Последнее обновление на 07.01.2024
Привет, Мир! Одну из первых статей я решил посвятить первоначальной настройке сервера с CentOS Stream. В моем примере будет использован виртуальный сервер с уже развернутой системой. Данная инструкция позволит во многом повысить уровень безопасности вашего сервера.
Добавление пользователя с правами root
Первым шагом Вам нужно добавить в систему нового пользователя, задать этому пользователю пароль и предоставить ему привилегии учётной записи root
.
Для создания пользователя под именем newuser
под root
‘ом и используйте команду:
adduser newuser
Зададим пароль для входа в систему:
passwd newuser
Предоставим привилегии sudo
, методом добавления в группу wheel
:
usermod -a -G wheel newuser
Теперь пользователь newuser
имеет привилегии для запуска команд через sudo
.Рекомендую использовать команду sudo
для выполнения команд с правами root
в базовой практике. Но, при необходимости, также Вы можете войти непосредственно в учетную запись пользователя root
с помощью команды sudo -i
.
Настройка firewalld
Скорее всего firewalld
уже установлен в системе, но даже если это и так, произведите обновление списка пакетов и зависимостей из установленных репозиториев:
sudo dnf update -y
После этого пробуем установить необходимый пакет:
sudo yum install firewalld -y
Если firewalld
установлен, Вы получите подобный вывод:
Nothing to do.
Complete!
Проверяем запущена ли служба firewalld
:
systemctl status firewalld
Если нет, тогда запускаем:
systemctl start firewalld
Смотрим, каким сервисам уже предоставлен доступ:
sudo firewall-cmd --permanent --list-all
Обычно из коробки есть доступ к : cockpit
, ssh
, dhcpv6-client
. Если Вам необходимо добавить еще один сервис, используйте команду:
sudo firewall-cmd --permanent --add-service=http
Список всех сервисов можно просмотреть командой:
sudo firewall-cmd --get-services
Если в списке нет необходимого сервиса или Вы используете свой порт, используйте команду:
sudo firewall-cmd --permanent --add-port=8080/tcp
В нашем примере будет открыт 8080
порт по протоколу tcp
.
Или же Вы можете добавить свой сервис:
sudo firewall-cmd --permanent --new-service=name
* где name— имя создаваемой службы.
Прикрепить к нему порт:
sudo firewall-cmd --permanent --service=name --add-port=8080/tcp
И добавить его:
sudo firewall-cmd --permanent --add-service=name
Для того, чтобы изменения начали действовать, инициализируем перезапуск firewalld
:
sudo firewall-cmd --reload
Более углубленно с настройкой firewalld
мы столкнемся в следующих записях, а сейчас продолжим настройку сервера.
Вход при помощи ключей SSH
Я в своей работе привык работать через Termius, тут все операции с ключами происходят в несколько кликов согласно инструкции. Но в данной статье рассмотрим создание новой пары из терминала Вашего клиентского ПК на Linux\MacOS\Windows.
Делается это командой:
ssh-keygen
Необходимо будет ввести имя и пароль для данной связки ключей.
Получите Вы в итоге что-то похожее на эту выдачу:
user@test-mcp13 ~ % ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test
Your public key has been saved in test.pub
The key fingerprint is:
SHA256:aYUbw+jtQur/Nl4aaIbY2Igjqh8mivPY6T+QhwN/rJQ d0xt0p@d0xt0p-mcp13.local
The key's randomart image is:
+---[RSA 3072]----+
| |
| o . |
| . = . |
|. . . * |
| o = o S |
| .E*++ + |
|=.**= = o . |
|**.+.o .o+ |
|B=*.oo.++. |
+----[SHA256]-----+
Команда сгенерирует Вашу пару открытых\закрытых ключей RSA. Открытый ключ будет сохранен как «test.pub» в указанной вами директории. Этот ключ необходимо добавить в файл authorized_keys
папки пользователя по пути /home/newuser/.ssh/
в нашем случае.
Для этого подключаемся к серверу server.test
по под пользователем newuser
командой в терминале клиента:
ssh newuser@X.X.X.X
, где X.X.X.X – IP-адрес вашего сервера
Проваливаемся в домашнюю директорию и создадим каталог .ssh
:
cd ~
mkdir -p .ssh
Создадим в этой папке файл authorized_keys
и скопируем в него содержимое созданного файла:
sudo nano authorized_keys
в моем примере использован редактор nano
предустановленный в моем образе системы на виртуальном хостинге. Если у Вас его нет, тогда можно его установить командой ниже или использовать другой, удобный Вам редактор:
sudo yum install nano -y
Закрываем (ctrl+x) файл и сохраняем (y) файл командами в скобках в случае использования nano
. Проверяем содержимое файла командой:
cat authorized_keys
Даём необходимые права каталогу .ssh
:
sudo chmod -R go= ~/.ssh
Теперь, Вам необходимо скопировать файлы ключей в необходимую для Вашей системы директорию, если ключи уже не создавались в нужной. Теперь при подключении к серверу по команде ssh newuser@X.X.X.X
, не будет требоваться пароль Вашей учётной записи. Но если Вы использовали парольную фразу при создании пары ключей, её необходимо вводить при доступе к ним.
Отключим возможность входа на сервер с помощью пароля для большей секьюрности. Отредактируем файл /etc/ssh/sshd_config
:
sudo nano /etc/ssg/sshd_config
Расскоментируем удалив #
строчку PasswordAuthentication
и сменим yes
на no
. После перезапустим службу sshd
:
sudo systemctl restart sshd
Установка web-интерфейса управления сервером Cockpit
Устанавливаем пакет командой
sudo yum install cockpit
Запускаем:
sudo systemctl start cockpit.socket
Включаем автозапуск сервиса:
sudo systemctl enable cockpit.socket
Вы можете добавить порт в настройки брандмауэра, хотя обычно он уже есть в стандартной настройке:
sudo firewall-cmd --add-port=9090/tcp --permanent
Или через службу:
sudo firewall-cmd --permanent --add-service=cockpit
Теперь Вы можете подключиться к вашему серверу, набрав в браузере https://X.X.X.X:9090
, где X.X.X.X – IP-адрес вашего сервера.
Бонус 1. 2FA для Cockpit
Обычно все инструкции по настройке доступа к Cockpit заканчиваются, но мы же за секьюрность?! Настроим двухфакторную аутентификацию.
Для начала найдем пакет репозитория EPEL (Extra Packages for Enterprise Linux):
sudo yum search epel
Если выдача в консоли на команду типа:
===== Name Matched: epel =====
epel-release.noarch : Extra Packages for Enterprise Linux repository configuration
Тогда производим установку:
sudo yum install epel-release -y
Если нет, тогда вручную пропишем:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Устанавливаем необходимые пакеты:
sudo yum install google-authenticator qrencode-libs -y
Инициализируем программу под необходимым пользователем:
google-authenticator -s ~/.ssh/google_authenticator
Проходим все необходимые шаги:
Do you want authentication tokens to be time-based (y/n) y
Do you want me to update your "~/.google_authenticator" file (y/n) y
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
Выдачей будет файл /home/${USER}/.ssh/google_authenticator
. Теперь осталось добавить требование к вводу кода при логине пользователя:
sudo bash -c 'echo "auth required pam_google_authenticator.so secret=/home/${USER}/.ssh/google_authenticator nullok" >> /etc/pam.d/cockpit'
И перезапустить службу cockpit
:
sudo systemctl restart cockpit
Если Вы хотите данный метод защиты использовать и при подключении по ssh
:
sudo bash -c 'echo "auth required pam_google_authenticator.so secret=/home/${USER}/.ssh/google_authenticator nullok" >> /etc/pam.d/sshd'
sudo bash -c 'echo "auth required pam_permit.so" >> /etc/pam.d/sshd'
Вторая команда будет нужна для успешного входа пользователей без настроенной двухфакторной аутентификации.
И перезапустить службу sshd
:
sudo systemctl restart sshd
Бонус 2. Плагин docker-cockpit
Добавлю бонусом установку плагина docker-cockpit
(Источник) Так как с приходом podman
его вырезали и более не развивают, но Вам он может понадобиться.
Переходим в папку приложения:
cd /usr/share/cockpit/
Скачиваем последнюю версию, актуальную ссылку можно получить здесь:
sudo wget https://github.com/mrevjd/cockpit-docker/releases/download/v2.0.3/cockpit-docker.tar.gz
Если wget не установлен:
sudo yum install wget -y
И распаковываем:
sudo tar xf cockpit-docker.tar.gz -C
Так же не забывайте о возможности задать вопросы в комментариях или Telegram канале. До связи!
Ну очень интересно!