Базовая настройка операционной системы Centos 8
Настройка и администрирование операционной системы CentOS 8
Любое прикладное программное обеспечение требует наличие операционной системы. Если есть возможность выбора, то я всегда останавливаюсь на 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 использовать 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.
Импортируем приватный ключ в программу PuTTy Key Generator, загрузив сохраненный приватный ключ:
Диалоговое окно нам подсказывает, что нужно сохранить наш приватный ключ, чтобы мы могли использовать его вместе с PuTTy. Открываем клиент. Как обычно в главном окне указываем куда подключаемся, а с левой стороны выбираем «Connection -> Auth», в окошке выбираем наш ключ.
Подключаемся, видим предупреждение и подтверждаем «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