С чего начать настройку любого UNIX сервера

Обновлено Обновлено: Опубликовано Опубликовано:

Термины по теме: UNIX, Linux, FreeBSD, Ubuntu, CentOS

Описанные ниже действия рекомендуется выполнить в первую очередь после установки операционной системы на базе UNIX (например, DEB-base: Astra Linux, Ubuntu, Debian и RPM-base: Rocky Linux, РЕД ОС, CentOS, а также FreeBSD) вне зависимости от того, как планируется ее использовать. Также мы рассмотрим некоторые нюансы при работе с контейнерами.

Стоит учитывать, что контейнерная виртуализация решает разные задачи — идеологически, есть контейнеры для процессов (например, docker и podman), а есть контейнеры с полноценными операционными системами (например, LXD и systemd-nspawn). Нижеописанные действия меньше подходят контейнерам для процессов и больше последним.

1. Работа с пользователями

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

passwd root

Создаем нового пользователя для работы с сервером.

а) если Rocky Linux / CentOS:

useradd kdo -G wheel -m

* где kdo — имя учетной записи; wheel — группа, которая позволяет входить в систему в привилегированном режиме (su).

б) если Astra Linux / Debian / Ubuntu:

useradd kdo -G sudo -m

* где kdo — имя учетной записи; sudo — группа, которая позволяет запускать команды в привилегированном (sudo) режиме.

в) если BSD:

pw useradd kdo -G wheel -m

После того, как создали пользователя, обязательно задаем пароль.

Это можно сделать командой:

passwd kdo

2. Имя сервера

Предположим, имя нашего компьютера должно быть server.dmosk.ru. В зависимости от типа системы, наши действия будут различаться.

а) Для Linux:

hostnamectl set-hostname server.dmosk.ru

б) Для BSD:

ee /etc/rc.local

hostname="server.dmosk.ru"

в) Для контейнеров.

В контейнерах недоступна подсистема systemd, поэтому такие команды, как hostnamectl там не работают. Редактируем файл:

vi /etc/hostname

server.dmosk.ru

После перезагрузки сервер поменяет имя. Чтобы поменять его сразу, дополнительно вводим команду:

hostname server.dmosk.ru

3. Обновление и репозитории

На чистой системе рекомендуется сразу установить все обновления, которые доступны для системы из ее родных репозиториев. Наши действия будут различаться в зависимости от используемой операционной системы.

а) Rocky Linux / CentOS / Red Hat / Fedora:

yum update

Если каждый раз при установке и обновлении пакетов система подвисает на этапе:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

Значит могут быть проблемы при подключении к серверам для определения скорости. В итоге, это только будет увеличивать время ожидания.

Данную проверку можно отключить. Открываем файл:

vi /etc/yum/pluginconf.d/fastestmirror.conf

И приводим к виду опцию:

enabled=0

б) Ubuntu / Debian:

apt update && apt upgrade

в) Astra Linux.

Для данной системы по умолчанию нет подключенных онлайн репозиториев — установка возможна только с установочного носителя. Лучше это сразу отредактировать. Для этого откроем файл:

vi /etc/apt/sources.list

Поставим комментарий для CDROM:

#deb cdrom...

и добавим репозитории. Строки, которые нужно прописать стоит посмотреть на сайте разработчика, например, для Astra Linux SE 1.7:

deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free

Теперь можно выполнить обновление:

apt update && apt upgrade

Мы можем получить ошибку Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown.  Could not handshake: Error in the certificate verification. Она возникает из-за устаревших корневых сертификатов. Сложность в том, что для обновления данных сертификатор нам нужны некоторые пакеты и рабочие репозитории, поэтому для обхода проблемы сы создадим файл:

vi /etc/apt/apt.conf.d/99-verify-peer.conf

Acquire::https::dl.astralinux.ru::Verify-Peer "false";

* где dl.astralinux.ru — адрес репозитория, для которого необходимо отключить проверку сертификата.

После снова попробуем выполнить обновление:

apt update && apt upgrade

г) FreeBSD:

pkg update && pkg upgrade

4. Правильное время

Многие сервисы завязаны на время — от него зависит корректность их работы. Да и, в принципе, неправильное время — не удобно.

Посмотреть текущее время и часовой пояс можно командой:

date

Настройка состоит из двух шагов: указания подходящей временной зоны и запуска приложения для синхронизации времени.

Настраиваем временную зону

а) В большинстве систем Linux это можно сделать командой:

timedatectl set-timezone Europe/Moscow

* В данном примере мы задаем зону по московскому времени. Список всех доступных зон можно посмотреть командой timedatectl list-timezones. Если мы увидим только одну зону UTC, скорее всего, у нас установлена минимальная версия Ubuntu. Для установки всех зон вводим apt install tzdata.

б) В контейнерах и системах без systemd:

rm -f /etc/localtime

ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* В данном примере мы задаем зону по московскому времени. Список всех доступных зон можно посмотреть командой ls /usr/share/zoneinfo.

Синхронизация времени

Устанавливаем утилиту для синхронизации времени, разрешаем запуск демона и стартуем его.

а) если на системе Astra Linux / Ubuntu / Debian:

apt install chrony

systemctl enable chrony

б) если на системе Rocky Linux / CentOS / Red Hat / Fedora:

yum install chrony

systemctl enable chronyd --now

5. Обновление корневых сертификатов

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

Установка корневых сертификатов отличается для разных дистрибутивов Linux.

а) для систем на базе DEB (Astra Linux, Debian, Ubuntu, Mint):

apt install wget

wget http://ftp.ru.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20211016_all.deb

dpkg -i ca-certificates_*_all.deb

update-ca-certificates

rm -f ca-certificates_*_all.deb

б) для систем на базе RPM (Rocky Linux, CentOS):

yum install ca-certificates

update-ca-trust

Подробнее об установке корневых сертификатов в инструкции Обновление корневых сертификатов на Linux.

6. Настройка vi (Astra Linux, Debian или Ubuntu)

Некоторые дистрибутивы Linux используют версию vi, с которой работать не совсем удобно. Как правило, это относится к системам на основе deb.

Многие пользователи используют другие редакторы, например, nano. Но если мы хотим использовать, именно, vi, попробуем сделать работу с ним приятнее.

Tiny vi

Ставим пакет:

apt install vim vim-tiny

Вводим команду, чтобы для текущего сеанса использоватся не стандартный vi, а тюнингованный:

alias vi="vim.tiny"

Добавим в файл:

vi ~/.bashrc

... строку:

alias vi="vim.tiny"

* для текущего пользователя мы указали команду, которая должна выполняться при его входе в систему.

Готово.

Set paste (вставка json и yaml)

При вставке текста с форматом специального назначения, например json и yaml, vi неправильно определяет синтаксис, что приводит к сбиванию формата строк.

Для решения проблемы нужно ввести команду :set paste.

Можно немного упростить процесс — добавляем в конфиг опцию set pastetoggle=<F3>.

а) для настройки всем пользователям:

vi /etc/vim/vimrc

б) только для текущего:

vi ~/.vimrc

Добавим строку:

set pastetoggle=<F3>

* в данном примере мы настроим быструю клавишу F3, при нажатии которой мы введем опцию set paste.

Теперь переходим в редактор, нажимаем F3, переходим в режим вставки (i) — можно вставлять код.

Позиция курсора после выхода из vim

В Debian и некоторых программах подключения по SSH (например, Putty) после выхода из редактора vi, позиция курсора оказывается в верхней части экрана и на него накладывается предыдущий текст. Данное поведение мешает работать.

Для решения проблемы открываем на редактирование:

а) для настройки всем пользователям:

vi /etc/vim/vimrc

б) только для текущего:

vi ~/.vimrc

Добавим строку:

set t_ti= t_te=

7. Автозавершение ввода команд

Значительно упрощает работу с консолью. Выполняется только на Linux — на BSD настроен по умолчанию.

Открываем на редактирование следующий файл:

vi /etc/inputrc

И добавляем:

set show-all-if-ambiguous On
"\e[A": history-search-backward
"\e[B": history-search-forward

Выходим из системы и входим снова для применения настроек.

8. Безопасность

Для Debian или Ubuntu стоит настроить брандмауэр. А для Rocky Linux / CentOS — отключить SELinux (если только мы не собираемся его настраивать).

Iptables (Debian / Ubuntu)

По умолчанию, в системах на базе deb брандмауэр работает по принципу полного разрешения. Желательно, это поправить.

Для начала убедимся в наличие необходимых для этого утилит:

apt install iptables iptables-persistent

* где:

  • iptables — утилита управления правилами netfilter.
  • iptables-persistent — утилита для сохранения правил для iptables.

Теперь выполним стартовые настройки.

Разрешаем SSH:

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

* если мы подключаемся к SSH по нестандартному порту, то меняе 22 на нужное значение!

Создаем правила для нормальной работы apt или yum:

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Разрешаем ICMP (для выполнения команды ping):

iptables -I INPUT -p icmp -j ACCEPT

Разрешаем все входящие на адрес локальной петли:

iptables -I INPUT -i lo -j ACCEPT

Ставим политику запрета на входящие и разрешаем все исходящие:

iptables -P INPUT DROP

Для сохранения правил вводим команду:

netfilter-persistent save

О других вариантах сохранения правил в iptables читайте в инструкции Настройка netfilter с помощью iptables.

Firewalld (Rocky Linux / CentOS)

В системах на базе RPM брандмауэр работает на запрет пакетов и не требует начальной настройки. Но в данных системах используется SELinux. Его, чаще, предпочитают отключать. Это делается двумя командами:

setenforce 0

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

Подробнее в инструкции Как отключить SELinux. Если мы хотим его настроить, читаем инструкцию Настройка SELinux в CentOS.

Fail2ban

На все серверы, к которым можно подключиться из сети Интернет по ssh стоит установить Fail2ban. Данное средство защиты поможет предотвратить подбор пароля для подключения к нашему серверу (по крайней мере, сильно усложнит задачу взломщику).

Подробнее про работу данной программы рассказано в инструкции Настройка и использование Fail2ban на Linux. В рамказ данного руководства мы ограничимся установкой и запуском.

Команда для развертывания зависит от дистрибутива Linux.

а) RPM: Rocky Linux / CentOS:

yum install epel-release

yum install fail2ban

б) Deb: Ubuntu / Debian:

apt install fail2ban

По умолчанию, fail2ban настроен для защиты ssh на порту 22. Нам нужно только убедиться, что он запущен:

systemctl enable fail2ban --now

И убедиться, что правило существует: 

fail2ban-client status

Мы должны увидеть что-то на подобие:

Status
|- Number of jail:    1
`- Jail list:    sshd

Если команда покажет ошибку или не вернет никакого результат, то для пакета вашей системы нет стартовых настроек и их нужно выполнить самоу. Подробнее о настройке fail2ban можно прочитать в инструкции Настройка и использование Fail2ban на Linux.

# UNIX # Linux # FreeBSD # Операционные системы # Серверы # Настройки # Ubuntu
Дмитрий Моск — частный мастер
Был ли полезен этот ответ?

Да            Нет