Базовая настройка операционной системы Centos 8

Настройка и администрирование операционной системы CentOS 8

 6 мин. на чтение
CentOS

Любое прикладное программное обеспечение требует наличие операционной системы. Если есть возможность выбора, то я всегда останавливаюсь на CentOS. В этом материале я попытаюсь раскрыть свое виденье базовой конфигурации данной OC.


Итак, у нас есть сервер с предустановленной операционной системой Centos 8. Ниже будет представлен перечень шагов, которым я следую при базовой настройке.

Смена пароля root

После получения доступа к вашему серверу, я настоятельно рекомендую сменить пароль пользователя root. Кроме того, данную процедуру в целях безопасности необходимо делать хотя бы несколько раз в год.

Изменить пароль для root довольно легко. Единственное требование нужно обладать правами суперпользователя.

# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Первоначальная настройка системы

Обновление системы

После смены пароля root можно продолжить настройку. Команда ниже проведет обновление до самого свежего состояния:

# dnf upgrade --refresh
Waiting for process with pid 5950 to finish.
CentOS-8 - AppStream                             31 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                  28 kB/s | 3.9 kB     00:00
CentOS-8 - Extras                                11 kB/s | 1.5 kB     00:00
Dependencies resolved.
Nothing to do.
Complete!

В моем случае операционная система находится в актуальном состоянии и не требует обновления.

Midnight Commander

Чтобы облегчить себе задачу администрирование, я всегда использую Midnight Commander. Это очень удобный файловый менеджер с текстовым интерфейсом и встроенным текстовым редактором с подсветкой синтаксиса.

# dnf install mc

Отключение SELinux

SELinux — система принудительного контроля доступа, реализованная на уровне ядра. Если Вам недостаточно классической системы контроля доступа и необходимо для каждого пользователя выставить минимум привилегий, то можете смело пропустить данный шаг.

Перед отключением SELinux сначала проверим его режим работы.

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

И непосредственно само отключение:

# setenforce 0
# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Проверим текущее состояние:

# cat /etc/selinux/config | grep SELINUX= | grep -v ^#
SELINUX=disabled

Имя хоста

Для того чтобы изменить имя хоста необходимо выполнить следующую команду:

# hostnamectl set-hostname 'my-host-name'

Настройка SSH

Если Ваш сервер общедоступен из интернета, то он непрерывно будет подвергаться атаке ботов на предмет подбора пароля к ssh. Эти запросы забивают лог secure и тратят, пусть и немного, ресурсы сервера. Чтобы хоть как-то сократить количество данных запросов, я меняю стандартный порт на котором работает демон ssh с 22 на любой пятизначный.

# mcedit /etc/ssh/sshd_config

Раскомментируем строку Port 22 и заменим значение по умолчанию на 27856

Смена стандартного порта ssh

Иногда вы можете обратить внимание на небольшую особенность. Бывают моменты, когда логин по ssh подвисает на кратковременный промежуток времени. Это может длиться до минуты. Чтобы избежать этого замедления, нужно запретить ssh использовать dns в своей работе.

Запрет использования dns

Перезапускаем sshd:

# systemctl restart sshd

Проверяем какой порт слушает sshd:

# netstat -tulpn | grep sshd
tcp        0      0 0.0.0.0:27856           0.0.0.0:*               LISTEN      17223/sshd
tcp6       0      0 :::27856                :::*                    LISTEN      17223/sshd

Авторизация по ключам

Авторизация на сервере по SSH, используя пароль, не всегда является безопасным методом. Для всех общедоступных серверов я предпочитаю авторизацию по ключу. Данный вариант помогает авторизовать клиента не используя пароли.

Для начала генерируем пару ключей (публичный и приватный) с помощью утилиты ssh-keygen:

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yypYXjFGP838KmxHm82V9PD1wn46oY4KEhHxC6C2vmo root@retinskiy.info
The key's randomart image is:
+---[RSA 3072]----+
|  . o.           |
| . . o.          |
|..  o... +       |
|. .  o+.o +   o .|
| .  ...oS. . o =o|
|.   .... .. . * +|
| . +....o. * + o |
| Eo o. o+ =.+ o .|
|+.   ....+... .+ |
+----[SHA256]-----+

Теперь скопируем наш публичный ключ в нужный файл. Данный путь демон ssh использует по умолчанию:

# cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys

Авторизация на сервер с помощью программы PuTTy

Ключи представляют простые текстовые файлы. Так что скопируем ранее сгенерированный приватный ключ для импорта в PuTTy.

Копирование приватного ключа ssh

Импортируем приватный ключ в программу PuTTy Key Generator, загрузив сохраненный приватный ключ:

Импорт приватного ключа ssh в PuTTy Key Generator

Диалоговое окно нам подсказывает, что нужно сохранить наш приватный ключ, чтобы мы могли использовать его вместе с PuTTy. Открываем клиент. Как обычно в главном окне указываем куда подключаемся, а с левой стороны выбираем «Connection -> Auth», в окошке выбираем наш ключ.

Подключение к серверу с помощью PuTTy

Подключаемся, видим предупреждение и подтверждаем «Yes». Вводим логин, и мы попадаем на сервер без пароля. Теперь можно отключить парольную аутентификацию:

Отключение парольной аутентификации

И снова перезапускаем sshd:

# systemctl restart sshd

Настройка файрвола с помощью iptables

В последнее время в среде линуксоидов набирает популярность утилита по управлению брандмауэрами firewalld. В некоторых дистрибутивах она включена по умолчанию. Я же предпочитаю использование классического iptables.

Прежде всего убедимся, что в системе отсутствует firewalld:

# systemctl status firewalld
Unit firewalld.service could not be found.
# rpm -q firewalld
package firewalld is not installed

В моем случае утилита отсутствует. Если же у Вас она установлена, то отключить можно следующим образом:

# systemctl stop firewalld
# systemctl disable firewalld

Теперь проверим, что iptables установлен в системе (должен быть умолчанию):

# rpm -q iptables
iptables-1.8.4-10.el8_2.1.x86_64

Настройка всех правил довольно утомительная работа, поэтому я использую заранее приготовленный скрипт iptables.sh. Скачиваем bash-скрипт c помощью curl и даем права на выполнение:

# curl -Lo /usr/local/sbin/iptables.sh https://tinyurl.com/yyzyaz8x
# chmod +x /usr/local/sbin/iptables.sh

Запускаем скрипт убеждаемся, что все подключения работают (особо нужно обратить внимание на порт SSH). Теперь сделаем несколько шагов для того, чтобы правила автоматически применялись после перегрузки сервера.

Создадим юнит для systemd:

# mcedit /etc/systemd/system/iptables.service

Он должен быть следующего содержания:

[Unit]
Description=IPTables rules
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/iptables.sh start
ExecStop=/usr/local/sbin/iptables.sh stop
ExecReload=/usr/local/sbin/iptables.sh restart
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Проверяем что все в порядке с файлом и мы нигде не совершили ошибку:

# systemctl status iptables
● iptables.service - IPTables rules
   Loaded: loaded (/etc/systemd/system/iptables.service; disabled; vendor prese>
   Active: inactive (dead)

Разрешаем автозапуск скриптов.

# systemctl enable iptables

Теперь после перегрузки правила должны применяться автоматически. Посмотреть список правил можно следующим образом:

# iptables -L -v -n
# ip6tables -L -v -n

Настройка времени

Узнать какой часовой пояс установлен на сервере можно следующей командой:

# timedatectl
               Local time: Mon 2020-10-16 19:06:36 CET
           Universal time: Mon 2020-10-16 18:06:36 UTC
                 RTC time: Mon 2020-10-16 18:06:35
                Time zone: Europe/Berlin (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Если необходимо сменить, то выполните следующую команду:

# timedatectl set-timezone Europe/Kiev

В моем случае система синхронизации включена. Если же она неактивна, то результат должен содержать следующее:

System clock synchronized: no
              NTP service: inactive

В CentOS есть утилита для синхронизации времени chrony. Установив которую, время на сервере будет синхронизировано.

# dnf install chrony
# systemctl enable chronyd
# systemctl start chronyd

На этом подготовка закончена, выполним перезагрузку сервера:

# reboot