# Первичная настройка сервера на CentOS 8
Новый сервер готов к работе сразу же после создания. Но начинать работу с ним пока ещё рано — несколько простых операций сделают всю последующую работу с сервером гораздо удобнее и безопаснее.
В этой инструкции мы расскажем, как подготовить к работе только что созданный сервер под управлением CentOS 8. Мы создадим нового пользователя, наделим его правами администратора, настроим фаервол и аутентификацию по ключу при подключении к серверу по SSH.
# Основные особенности
В настройке сервера под управлением CentOS 8 есть несколько принципиальных отличий от настройки сервера на предыдущей версии CentOS 7.
Во-первых, разработчики сменили пакетный менеджер, использующийся при загрузке программных пакетов. На смену YUM пришёл более быстрый и менее требовательный к оперативной памяти DNF.
Во-вторых, при установке стандартного firewalld в процессе установки зависимостей nftables скачивается и устанавливается, но не запускается — его нужно запускать вручную перед запуском фаервола.
# Создание нового пользователя
Первым пользователем, созданным на сервере, по умолчанию является root — пользователь с правами администратора. Крайне не рекомендуется заходить на сервер от имени root-пользователя на постоянной основе — серверу можно нанести серьёзный ущерб даже просто по неосторожности. Чтобы избежать этого, мы создадим нового пользователя и наделим его sudo-привилегиями — позволим ему запускать некоторые команды от имени администратора.
Создадим нового пользователя:
adduser User
Далее установим для него пароль:
passwd User
Теперь у нас есть рядовой пользователь. Чтобы разрешить ему выполнять команды от имени администратора, добавьте его в группу wheel:
usermod -aG wheel User
После добавления нового пользователя в группу wheel ему нужно будет только ввести в начале строки sudo, и команда запустится от имени администратора.
Чтобы сменить пользователя, можно воспользоваться командой:
su User
Также с её помощью вы можете разорвать текущее SSH-соединение и заново подключиться к серверу уже от имени нашего нового пользователя.
# Установка и настройка фаервола
В качестве фаервола CentOS использует утилиту FirewallD. Начнём с её установки:
sudo dnf install firewalld
Для установки мы используем пакетный менеджер DNF, пришедший на смену YUM в CentOS 8.
Как мы уже говорили выше, при установке firewalld устанавливается nftables — обновлённая версия iptables. При этом после установки nftables не запускается, что приводит к ошибкам в работе FirewallD, поэтому для корректной работы фаервола нужно сначала запустить nftables:
sudo systemctl start nftables
Далее — активировать его, чтобы он запускался после перезагрузки сервера:
sudo systemctl enable nftables
Теперь проверим его статус, чтобы убедиться, что он работает:
sudo systemctl status nftables
Проверяем, что в окне выдачи есть сообщения enabled и active, и переходим непосредственно к фаерволу.
По умолчанию в первичные настройки FirewallD уже включён SSH-протокол, поэтому запускать фаервол можно сразу после установки (в отличие от UFW на Ubuntu, в котором SSH нужно сначала добавить в список разрешённых приложений):
sudo systemctl start firewalld
Теперь проверьте статус фаервола командой:
sudo systemctl status firewalld
На экране появится сообщение, что фаервол запущен и активен (enabled, active).
# Настройка FirewallD
Управление и настройка фаервола осуществляются с помощью утилиты «firewall-cmd».
Для начала проверим, какая зона (группа правил) установлена по умолчанию:
sudo firewall-cmd --get-default-zone
Сразу после установки по умолчанию задана зона public. Это стандартная зона, применяемая для публичных сетей, к которым нет доверия — фаервол не доверяет никаким компьютерам в сети и может разрешать отдельные входящие соединения на единоразовой основе.
Подробнее ознакомиться с правилами этой зоны можно командой:
sudo firewall-cmd --list-all
В результате на экране появится примерно такой результат:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Как видим из выдачи, в список разрешённых служб уже добавлены cockpit (веб-интерфейс управления сервером), dhcpv6-client (DHCP v6-клиент) и ssh.
Чтобы добавить службы в список разрешений фаервола, сперва посмотрим на весь список доступных служб:
sudo firewall-cmd --get-services
Результатом команды станет длинный список доступных для добавления служб. Добавить одну из них в текущую зону можно командой --add-service
:
sudo firewall-cmd --permanent --add-service=http
В данном случае мы добавили к списку разрешённых службы http. Флаг --permanent означает, что служба добавлена на постоянной основе. В firewalld есть возможность временно добавлять правила и службы, в этом случае после перезагрузки фаервола они отменяются и удаляются.
Чтобы изменения вступили в силу, перезапустим фаервол:
sudo firewall-cmd --reload
# SSH-подключение с аутентификацией по ключу
Подключение к серверу с аутентификацией по ключу значительно повышает уровень устойчивости вашего сервера к взлому. SSH-клиент будет сравнивать публичный ключ, размещённый на сервере, с частным ключом на вашем компьютере, полностью исключая возможность перехвата данных.
# ОС Windows
Для создания шифрованного подключения с аутентификацией по ключу на ОС Windows нужен клиент для SSH-подключения (например, PUTTY), утилиты для генерации самого ключа и для его автоматического использования (PuTTY Key Generator и Pageant).
Сначала сгенерируем публичный и частный ключи. Для этого запустим PuTTYgen и в пункте меню Key
укажем параметр «SSH-2 RSA key». Нажмём Generate и сделаем несколько движений мышью в определённой области экрана — на основании наших движений будут генерироваться числа для ключей.
После этого в окне «Public key for pasting...» появится публичный ключ, который нужно будет поместить на сервер.
Мы сделаем это с помощью SSH-подключения и текстового редактора vi:
После подключения к серверу сменим директорию на домашнюю командой:
cd ~
Теперь создадим папку «.ssh»:
mkdir .ssh
Перейдём в эту папку:
cd .ssh
Создадим здесь файл «authorized_keys»:
vi authorized_keys
Поместим в этот файл публичный ключ из окна «Public key for pasting...» утилиты PuTTYgen.
Сохраним только что созданный файл.
Удалим все права и зависимости, которые могли случайно привязаться к этой папке:
chmod -R go- ~/.ssh
- Передадим права на эту папку нашему пользователю:
chown -R user:user `/.ssh
Возвращаемся к PuTTYgen.
В поля «key passphrase» и «confirm passphrase» можно ввести пароль, который будет проверяться перед проверкой частного ключа (дополнительная ступень безопасности).
Теперь сохраним на компьютере публичный ключ (Save Public Key) в формате .txt и частный ключ (Save Private Key) в формате .ppk.
В окне утилиты Pageant выберем файл нашего частного ключа (Add key), укажем пароль (passphrase) и активируем его.
Теперь при подключении по SSH клиенты, поддерживающие аутентификацию по ключу, сами определят, что для авторизации на сервере нужно использовать ключ. Программа-клиент сверит публичный ключ, размещённый на сервере, с частным ключом на вашем компьютере и установит соединение.
Чтобы отключить аутентификацию по паролю, отредактируем файл конфигурации SSH. Откроем его в текстовом редакторе:
vi /etc/ssh/sshd_config
Далее укажем значение параметра PasswordAuthentication no. Раскомментируем (уберём #) параметр Public Key Authentication и укажем yes. Также укажем файлы публичных ключей в строке AuthorizedKeysFile.
Теперь осталось только перезапустить службу SSH, чтобы все внесённые изменения вступили в силу:
sudo systemctl restart sshd
# Linux
Если у вас unix-подобная система, то процесс генерирования пар ключей будет производиться с помощью терминала:
ssh-keygen
Затем в терминале появится запрос «указать путь», по которому будут сохранены ваши ключи, и затем запрос на кодовое слово (passphrase), которое усилит защиту вашего приватного ключа.
После этого появится сообщение о том, что публичный и приватный ключи успешно сгенерированы.
Следующий шаг — поместить публичный ключ на сервер — полностью идентичен как для пользователей Windows, так и для пользователей Linux.
Теперь наш сервер готов к полноценной работе: на него можно устанавливать любое программное обеспечение, запускать на нём сайты или веб-приложения.