Oracle Linux 6: How to install specific Unbreakable Kernel (UEK) version

If you need to install specific unbreakable kernel (UEK) version for Oracle Linux 6.x you need to complete the following steps:
In this example we will use Oracle Linux 6.8 and our goal is to install 4.1.12-61.1.14 kernel version.
You need to edit /etc/yum.repos.d/public-yum-ol6.repo repository file and search there for UEKx record, where x is the linux release family (4 is the latest for now) and add ‘archive‘ to the path of repository, because by default repository contains only the most recent uek packages:

[public_ol6_UEKR4]
name=Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux $releasever ($basearch)
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/UEKR4/archive/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=$uekr4

Next you need to install correct packages (assuming that we need to build kernel modules in the future):
yum clean all
yum install kernel-uek-4.1.12-61.1.14.el6uek.x86_64 kernel-uek-devel-4.1.12-61.1.14.el6uek.x86_64 kernel-uek-headers.x86_64
Next, boot into the new kernel version.
Links:

  1. https://yum.oracle.com/oracle-linux-6.html – You can browse and take repository  address from the tab address bar for repository file.
  2. https://yum.oracle.com/oracle-linux-7.html

Linux. Распределение прерываний

Посмотреть распределение прерываний по ядрам в ОС Linux можно командой:
cat /proc/interrupts
Вы должны увидеть нечто следующее:

Где:

  • Первый столбец — номер прерывания
  • CPU0 .. CPUx — счетчик обработанных прерываний по процессорным ядрам
  • PCI-MSI-edge — тип прерывания
  • Последний столбец — название устройства

Как видите, все прерывания по-умолчанию обрабатываются ядром 0. Что не всегда хорошо.
Перенести обработку прерываний на другие ядра можно как в примерах ниже:
# CPU0
echo 1 >/proc/irq/45/smp_affinity
echo 1 >/proc/irq/46/smp_affinity
echo 1 >/proc/irq/47/smp_affinity
# CPU1
echo 2 >/proc/irq/48/smp_affinity
echo 2 >/proc/irq/49/smp_affinity
# CPU2
echo 4 >/proc/irq/50/smp_affinity
echo 4 >/proc/irq/51/smp_affinity
# CPU3
echo 8 >/proc/irq/52/smp_affinity
echo 8 >/proc/irq/53/smp_affinity
Где цифра после echo определяет маску для используемых ядер. Например, использовать только ядро 0 это будет выглядеть 00000001 в двоичной системе исчисления. Ядро 2 – 00000100. 0 и 2 соответственно 00000101, что соответствует 5 в десятичной системе.
Этот метод действует до перезагрузки. Чтобы сохранить настройки и после перезагрузки просто добавляем эти команды в файл /etc/rc.local – это скрипт, автоматически выполняющий своё содержимое при загрузке ОС.
Источники:

  1. https://cesbo.com/ru/linux/interrupts/

Remmina в Debian 9

Есть очень удобный клиент удаленного подключения для ОС Linux – remmina. Удобен он тем, что позволяет сохранять подключения по ssh, RDP, VNC etc со всеми настройками и открывать их одним кликом:

Но в Debian 9 с этой программой небольшая проблемка. В stable ветке её просто напросто нет в репозитории, а в testing она работает не правильно из-за другой версии библиотеки vte3, которую поменять нельзя, т. к. это поломает гном… 🙂
Но выход есть всегда. И он описан на гитхабе [1].
UPD: лучше ставить из экспериментальной ветки Debian, читайте ниже.
Вначале устанавливаем Snap:
aptitude install snapd
Далее устанавливаем саму remmina (–edge говорит, что нужно установить последнюю версию, которая нам и нужна, без этого префикса установится та же, что и в testing Debian и которая не работает):
snap install remmina –edge
Также можно добавить некоторые расширения:
snap connect remmina:avahi-observe :avahi-observe
snap connect remmina:cups-control :cups-control 
snap connect remmina:mount-observe :mount-observe
Теперь нужно как-то по удобнее запускать remmina ибо по-умолчанию она в gnome shell не интегрируется. Для этого копируем remmina.desktop:
aptitude install locate
updatedb
locate remmina.desktop
cp /snap/remmina/161/meta/gui/remmina.desktop /usr/share/applications/

Также необходимо отредактировать этот файл, прописав там правильный путь к бинарнику:
Exec=/snap/bin/remmina
Вообще структура каталогов для snap в Debian выглядит следующим образом:
/snap/
├── bin (здесь лежат бинарники программ, установленных через snap)
├── core (базовые файлы snap)
└── remmina (а это папка с файлами приложения, в данном случае установлена только remmina, а если будут еще приложения – они будут здесь также)
Перезаходим в gnome shell – теперь remmina должна появиться в Activities.
UPD:
Как показала практика, remmina из snap глючит. Версия 1.2.х есть только в ветке experimental и чтобы её установить идем на страницу пакета. Здесь внизу в секции Download выбираем нужную архитектуру и копируеи ссылку на зеркало, например – amd64http://ftp.us.debian.org/debian/pool/main/r/remmina/remmina_1.2.0-rcgit.20-1_amd64.deb
Заходим в консоль, загружаем пакет по скопированной ссылке и устанавливаем его:
wget http://ftp.us.debian.org/debian/pool/main/r/remmina/remmina_1.2.0-rcgit.20-1_amd64.deb
dpkg -i remmina_1.2.0-rcgit.20-1_amd64.deb
Будет ругаться на неудовлетворенные зависимости примерно так:
Selecting previously unselected package remmina.
(Reading database … 157173 files and directories currently installed.)
Preparing to unpack remmina_1.2.0-rcgit.20-1_amd64.deb …
Unpacking remmina (1.2.0-rcgit.20-1) …
dpkg: dependency problems prevent configuration of remmina:
remmina depends on libssh-4 (>= 0.6.1); however:
Package libssh-4 is not installed.
remmina depends on remmina-common (= 1.2.0-rcgit.20-1); however:
Package remmina-common is not installed.
dpkg: error processing package remmina (–install):
dependency problems – leaving unconfigured
Processing triggers for gnome-menus (3.13.3-9) …
Processing triggers for desktop-file-utils (0.23-2) …
Processing triggers for mime-support (3.60) …
Processing triggers for man-db (2.7.6.1-2) …
Errors were encountered while processing:
remmina
В моём случае не хватало двух пакетов: libssh-4 и remmina-common. Ищем указанные пакеты на сайте пакета remmina experimental в секции Other Packages Related to remmina и помеченные dep, загружаем их описанным выше образом через wget и устанавливаем с помощью dpkg. Также можно установить плагины для rdp и vnc – они есть там в списке.
Радуемся нормальной реммине.

  1. https://github.com/FreeRDP/Remmina/wiki
  2. https://snapcraft.io/docs/snaps/structure
  3. https://packages.debian.org/en/experimental/remmina

Динамический порт (Ephemeral port)

Динамический порт, или Эфемерный порт — временный порт, открываемый соединением межсетевого протокола транспортного уровня (IP) из определённого диапазона программного стека TCP/IP.
Т. е. это локальный порт, присваемый TCP-соединению операционной системой. Например, вы подключаетесь по ssh к удаленной машине на порт 22. Это удаленный порт, а для обмена данными нужен еще локальный порт, который присваивается ОС автоматически, причем случайным образом из определенного диапазона. Этот диапазон можно узнать в ОС Linux посмотрев файл:
cat /proc/sys/net/ipv4/ip_local_port_range
Изменить этот диапазон можно командой (например, нам нужен диапазон 49152..65535):
echo “49152 65535” > /proc/sys/net/ipv4/ip_local_port_range

Белый и черный список в amavisd-new

Для создания белого списка  в amavisd-new создаем конйигурационный файл с названием например (путь для Debian 7) /etc/amavis/conf.d/whitelist
Есть два пути. В конфигурационный файл (/etc/amavis/conf.d/whitelist) добавляем список доменов:
@whitelist_sender_maps = ([‘.example.org’, ‘.example.net’]);
Или добавляем список регулярных выражений, в которые можно завернуть либо доменыые имена либо отдельные почтовые ящики
@whitelist_sender_maps = ( new_RE(
qr’.*@something\.com$’i,
qr’oneaddress@example\.com$’i
));
Так же точно добавляется и чёрный список, только вместо @whitelist_sender_maps следует указать @blacklist_sender_maps
Источники:

  1. http://www.akadia.com/services/postfix_amavisd.html#Globally%20Sender%20Whitelists%20and%20Blacklists

Использование утилиты rkhunter для борьбы с руткитами в Linux

Установка.
Здесь всё просто – ставим из репозиториев:
aptitude install rkhunter / yum install rkhunter
или собираем из исходников, взятых с http://rkhunter.sourceforge.net/
Обновление.
Проверяем версию:
rkhunter –versioncheck
Обновляем вирусные базы:
rkhunter –update
Далее нужно обновить базу rkhunter, чтобы он считал текущие файлы утилит чистыми и в дальнейшем выдавал предупреждения при их модификации (эту команду нужно использовать перед первым запуском или после обновлений утилит):
rkhunter –propupd
И наконец-то сама проверка:
rkhunter -c –enable all –disable none
Ждем окончания, нажимая Enter когда попросит и смотрим лог, ища warning или error:
nano /var/log/rkhunter.log
Принимаем меры по необходимости.

Авторизация в Apache c помощью MySQL (mod-auth-mysql)

MySQL авторизация – неплохой вариант, особенно для сайтов, использующих эту БД.
Порывшись в инете, разобрался, как её настроить и вот шаги, котором следует последовать 🙂
1. Устанавливаем необходимый софт (имеется в виду, что веб-сервер уже есть и настроен):
apt-get install libapache2-mod-auth-mysql
a2enmod auth_mysql

2. Создаем для примера БД:

mysql -u root -p
mysql> grant all on auth.* to auth_user@localhost identified by ‘<auth_password>’;
mysql> flush privileges;
mysql> create database auth;
mysql> use auth;
mysql> CREATE TABLE `clients` (
`username` varchar(25) NOT NULL default ”,
`passwd` varchar(25) NOT NULL default ”,
`groups` varchar(25) NOT NULL default ”,
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
mysql> INSERT INTO `clients` VALUES (‘<username>’, ‘<password>’, ‘<group>’);

3. Редактируем файл виртуалхоста (или .htaccess нужной папки), например:

nano /etc/apache2/sites-available/default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All

        </Directory>
        <Directory /var/www/>    
                AuthMYSQL on     #включает авторизацию по мускулю
                AuthMySQL_Authoritative on
                AuthMySQL_DB auth     #имя БД, в которой находится наша авторизация
                AuthMySQL_Host 127.0.0.1     #адрес или имя хоста с мускулем

                #AuthMySQL_Port 3306     #порт, если отличен от дефолтового
                #AuthMySQL_Socket <socket>    #сокет, если используется

                AuthMySQL_User auth_user     #пользователь БД
                AuthMySQL_Password <auth_password>     #пароль пользователя БД
                AuthMySQL_Password_Table clients     #таблица паролей
                AuthMySQL_Username_Field username     #поле, содержащее имя пользователя
                AuthMySQL_Password_Field passwd     #поле, содержащее праоль пользователя
                #AuthMySQL_Group_Table clients     #поле, содержащее принадлежность к группе
                AuthMySQL_Empty_Passwords off     #запретить пустые пароли
                Auth_MySQL_Encrypted_Passwords off    #если on - указывается, что пароли зашифрованы
                AuthMySQL_Encryption_Types Plaintext     #типа шифрования - может быть Plaintext, Crypt_DES, MySQL. Можно через пробел указывать несколько методов, которые будут использоваться по-очереди
                AuthBasicAuthoritative Off     #Отключить Basic-авторизацию - какойто костыль, без него не работает
                AuthUserFile /dev/null     #типа файл с паролями - тоже костыль
                Require valid-user     #требовать авторизацию. Тут также можно указывать имена групп (несколько - через пробелы): Require group assassins templars .Или конкретных пользователей: Require user leonardo vincent .Это удаобно, если прописывать опции в .htaccess
                AuthName "Please Auth!"     #приветствие
                AuthType Basic #костыль
                <Limit GET POST> #ограничения для запросов                Require valid-user     
                </Limit>     

                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler index
        </Directory>

service apache2 restart

Идем на страничку http://127.0.0.1 и авторизуемся.
P. S.

1. http://www.cgi101.com/book/ch20/mod_auth_mysql.html – здесь неплохое описание опций.
2. Можно в конфиге апача или модуля прописать параметры подключения к БД – так в некоторых случаях секьюрнее:

Auth_MySQL_Info <host> <user> <password>
Auth_MySQL_General_DB <database_name>

Как посмотреть Service Tag / Server Tag сервера.

Иногда нужно узнать серийный номер сервера из консоли ОС.
Для Windows:

открываем CMD и нам на помощь прийдут 3 WMI команды:

wmic bios get serialnumber
wmic csproduct get vendor,name,identifyingnumber

Результат будет примерно таким:

IdentifyingNumber    Name                Vendor
ABCDEF1              PowerEdge 2950      Dell Inc.

wmic /user:administrator /node:remote-host bios get serialnumber

а эта комана выводит серийный номер удаленного сервера:

SerialNumber
ABCDEF1

Для корректной работы этих команд должна быть хотя бы в режиме Manual служба Windows Management Instrumentation.

Для Linux:

используем команду

dmidecode -s system-serial-number

Установка и настройка NFS в Debian 6 Linux

1. Настройка сервера:
Вначале, как всегда, устанавливаем необходимые компоненты:
sudo apt-get install nfs-kernel-server nfs-common portmap
Теперь надо убедиться, что порт nfs слушается:
# rpcinfo -p | grep nfs
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
А также, что nfs в принципе поддерживается системой:
# cat /proc/filesystems | grep nfs
nodev   nfs
nodev   nfs4

Если нет, то пробуем:

# modprobe nfs
Смотрим, работает ли portmap:
rpcinfo -p | grep portmap
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
Теперь надо отредактировать конфиг, содержащий список общих директорий:
sudo nano /etc/exports
Пример общей папки, доступной всей подсети:
/home/vsftpd/shared 10.0.1.0/24(rw,all_squash,anonuid=5001,anongid=65534,no_subtree_check)
А индивидуальную шару, доступную только пользователю с IP 10.0.1.2 так:
/home/vsftpd/user 10.0.1.2(rw,all_squash,anonuid=5001,anongid=65534,no_subtree_check)
В скобках такие параметры потому что мне нужно было сделать видимым каталог ftp и all_squash,anonuid=5001 указывает, что будет использоваться юзер vsftpd, а anongid=65534 – его группа. Посмотреть цифры для вашего пользователя можно в /etc/passwd. Также перед IP должна быть табуляция, а не пробел. no_root_squash – эта опция может помочь, если вы монтируете на гостевой системе шару как рут.
Перезапускаем нфс-сервер:
sudo /etc/init.d/nfs-kernel-server restart
Далее можно не дрочить сервис, а применять новые параметры командой:
 
sudo exportfs -a
На клиенте чтобы юзать шару делаем следующее:

sudo apt-get install portmap nfs-common
sudo mkdir /mnt/share
sudo mount -t nfs 10.0.1.1:/home/vsftpd/shared /mnt/share

Чтобы шара была доступна автоматически без перезагрузки, редактируем
sudo nano /etc/fstab
Добавляем:

10.0.1.1:/home/vsftpd/shared     /mnt/share     nfs     rw,hard,intr     0

http://geckich.blogspot.com/