С чего начать настройку любого 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. Обновление и репозитории

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

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. Работа с пользователями

Я рекомендую сделать два действия:

  1. Заблокировать парольный вход по SSH для пользователя root и разрешить вход с использованием сертификата.
  2. Создать дополнительного пользователя с правами 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.

В системах Linux на базе RPM с включенным SELinux мы можем получить ошибку:

Failed to set time zone: Access denied

Для ее решения вводим:

restorecon -Rv /etc

б) В контейнерах и системах без 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

24-х часовой формат

Если система возвращает время в 12-и часовом формате, а мы хотим более привычный, вводим команду:

dpkg-reconfigure locales

В открывшемся списке добавляем en_GB.UTF-8 UTF-8.

Подтверждаем добавление локали. После вводим:

localectl set-locale LC_TIME=en_GB.utf8

Чтобы настройка применилась, выйти и войти в консоль:

exit

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 --refuse-downgrade 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.

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

Да            Нет