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


Термины по теме: UNIX, Linux, FreeBSD, Ubuntu, CentOS
Описанные ниже действия рекомендуется выполнить в первую очередь после установки операционной системы на базе UNIX (например, DEB-base: Astra Linux, Ubuntu, Debian и RPM-base: Rocky Linux, РЕД ОС, CentOS, а также FreeBSD) вне зависимости от того, как планируется ее использовать. Также мы рассмотрим некоторые нюансы при работе с контейнерами.
Стоит учитывать, что контейнерная виртуализация решает разные задачи — идеологически, есть контейнеры для процессов (например, docker и podman), а есть контейнеры с полноценными операционными системами (например, LXD и systemd-nspawn). Нижеописанные действия меньше подходят контейнерам для процессов и больше последним.
Обновление системы
Настройка vi
Работа с пользователями
Задать имя сервера
Настройка времени и его обновления
Обновление корневых сертификатов
Автозавершение ввода команд
Утилиты гостевой операционной системы
Безопасность
1. Обновление и репозитории
На чистой системе рекомендуется сразу установить все обновления, которые доступны для системы из ее родных репозиториев. Наши действия будут различаться в зависимости от используемой операционной системы.
Rocky Linux / CentOS / Red Hat / Fedora
yum update
1. Если каждый раз при установке и обновлении пакетов система подвисает на этапе:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfileЗначит могут быть проблемы при подключении к серверам для определения скорости. В итоге, это только будет увеличивать время ожидания.
Данную проверку можно отключить. Открываем файл:
vi /etc/yum/pluginconf.d/fastestmirror.conf
И приводим к виду опцию:
enabled=0
2. В некоторых релизах версии 8 и старше мы можем получить ошибку:
Error: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d"
Открываем файл:
vi /etc/yum.repos.d/rocky.repo
Для репозиториев baseos и appstream редактируем директиву enabled:
[baseos]
...
enabled=1
...
[appstream]
...
enabled=1
...Также делаем для файла rocky-extras.repo и репозитория extras:
vi /etc/yum.repos.d/rocky-extras.repo
[extras]
...
enabled=1
...
Debian / Ubuntu
Обновляем кэш репозиториев и выполняем обновление:
apt update && apt upgrade
Но бывает так, что репозиторий Debian не настроен. Мы получим ошибку при обновлении кэша репозитория.
Открываем файл:
vi /etc/apt/sources.list
И приводим его к виду:
deb http://deb.debian.org/debian/ bullseye main
deb-src http://deb.debian.org/debian/ bullseye main
deb http://security.debian.org/debian-security bullseye-security main contrib
deb-src http://security.debian.org/debian-security bullseye-security main contrib
deb http://deb.debian.org/debian/ bullseye-updates main contrib
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib* обратите внимание, что bullseye — кодовое название 11 версии. Вы должны подставить свое значение:
- Debian 12 — bookworm.
- Debian 11 — bullseye.
- Debian 10 — buster.
- Debian 9 — stretch.
После можно вводить:
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
2. Настройка vi (Astra Linux, Debian или Ubuntu)
Некоторые дистрибутивы Linux используют версию vi, с которой работать не совсем удобно. Как правило, это относится к системам на основе deb.
Многие пользователи используют другие редакторы, например, nano. Но если мы хотим использовать, именно, vi, попробуем сделать работу с ним приятнее.
Tiny vi
Ставим пакет:
apt install vim vim-tiny
Вводим команду, чтобы для текущего сеанса использоватся не стандартный vi, а тюнингованный:
alias vi="vim.tiny"
Также добавим это же в файл:
echo 'alias vi="vim.tiny"' >> ~/.bashrc
Готово.
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 / Astra Linux и некоторых программах подключения по SSH (например, Putty) после выхода из редактора vi, позиция курсора оказывается в верхней части экрана и на него накладывается предыдущий текст. Данное поведение мешает работать.
Для решения проблемы открываем на редактирование:
а) для настройки всем пользователям:
vi /etc/vim/vimrc
б) только для текущего:
vi ~/.vimrc
Добавим строку:
set t_ti= t_te=
3. Работа с пользователями
Я рекомендую сделать два действия:
- Заблокировать парольный вход по SSH для пользователя root и разрешить вход с использованием сертификата.
- Создать дополнительного пользователя с правами sudo.
Пользователь root
Открываем конфигурационный файл:
vi /etc/ssh/sshd_config
Опцию PermitRootLogin приводим к виду:
PermitRootLogin without-password
* значение without-password гарантирует, что мы не сможем подключиться к серверу по ssh под пользователем root с использованием пароля.
Если у нас нет готового SSH-ключа, на любом компьютере с Linux сгенерируем его командой:
ssh-keygen -t ed25519
В домашней директории:
ls -l ~/.ssh/
... будет создано 2 файла id_ed25519.pub и id_ed25519. Содержимое файла id_ed25519.pub фиксируем.
Идем на наш целевой компьютер Linux. Создаем каталог:
mkdir /root/.ssh
И файл:
vi /root/.ssh/authorized_keys
Вставляем в него содержимое файла id_ed25519.pub.
Теперь с использованием ключа из файла id_ed25519 можно подключиться к нашему компьютеру без пароля.
Дополнительный пользователь
Создаем нового пользователя для работы с сервером.
а) если 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
4. Имя сервера
Предположим, имя нашего компьютера должно быть 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
5. Правильное время
Многие сервисы завязаны на время — от него зависит корректность их работы. Да и, в принципе, неправильное время — не удобно.
Посмотреть текущее время и часовой пояс можно командой:
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
6. Обновление корневых сертификатов
Для корректной работы по зашифрованному каналу связи, необходимо, чтобы на нашем сервере были свежие корневые сертификаты. В противном случае, мы будем получать предупреждения о попытках установить соединение с небезопасным сервером. Это приведем к тому, что некоторые команды не будут отрабатывать или будут требоваться с нашей стороны дополнительные действия.
Установка корневых сертификатов отличается для разных дистрибутивов Linux.
а) для систем на базе DEB (Astra Linux, Debian, Ubuntu, Mint):
apt install wget
wget http://ftp.ru.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20230311_all.deb
dpkg -i ca-certificates_*_all.deb
rm -f ca-certificates_*_all.deb
б) для систем на базе RPM (Rocky Linux, CentOS):
yum install ca-certificates
update-ca-trust
Подробнее об установке корневых сертификатов в инструкции Обновление корневых сертификатов на Linux.
7. Автозавершение ввода команд
Значительно упрощает работу с консолью. Выполняется только на Linux — на BSD настроен по умолчанию.
Открываем на редактирование следующий файл:
vi /etc/inputrc +
И добавляем:
set show-all-if-ambiguous On
"\e[A": history-search-backward
"\e[B": history-search-forward
Выходим из системы и входим снова для применения настроек.
8. Утилиты гостевой системы для виртуальных машин
Если наш компьютер является виртуальной машиной, не забываем установить гостевые утилиты. Они позволяют повысить производительность системы, а также дают дополнительные возможности, например, получение дополнительной информации о виртуальной среде из хоста виртуализации или мягкую перезагрузку.
Для каждой системы виртуализации свои методы установки утилит. Читайте о них подробнее в других инструкциях:
1. Установка и настройка Proxmox VE.
2. Пошаговая инструкция по установке VMware Tools на Linux.
9. Безопасность
Для 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.