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

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

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

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

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

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

Rocky Linux / CentOS 9 / Red Hat / Fedora

yum update

1. В некоторых релизах версии 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

CentOS 7

Данная система уже не поддерживается, но все еще встречается. Основные репозитории больше не поддерживаются, поэтому выполняем их замену на vault.centos.org .

Переходим в каталог с файлами репозиториев:

cd /etc/yum.repos.d

Удаляем все, что связаны с CentOS:

rm -f CentOS-*.repo

Создаем новый файл:

vi CentOS-Base.repo

[base]
name=CentOS-$releasever — Base
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever — Updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever — Extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever — Plus
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

* где 7.9.2009 — номер релиза. Его можно посмотреть командой cat /etc/centos-release .

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

yum update

1. С российских IP-адресов система подвисает на этапе:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

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

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

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

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

enabled=0

ALT Linux

Обновляем кэш репозиториев и выполняем обновление:

apt-get update && apt-get dist-upgrade

Также для удобства можно создать алиас:

alias apt=»apt-get»

echo ‘alias apt=»apt-get»‘ >> ~/.bashrc

Так как во многих современных дистрибутивах DEB используется команда apt для работы с пакетами, то привычнее будет вводить эту команду.

2. Настройка редактора vi

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

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

Tiny vi (Astra Linux, Debian или Ubuntu)

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

apt install vim vim-tiny

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

alias vi=»vim.tiny»

Также добавим это же в файл:

echo ‘alias vi=»vim.tiny»‘ >> ~/.bashrc

Готово.

Tiny vi (ALT Linux)

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

apt-get install vim-enhanced

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

alias vi=»vim-enhanced»

Также добавим это же в файл:

echo ‘alias vi=»vim-enhanced»‘ >> ~/.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 -p ~/.ssh

И файл:

vi ~/.ssh/authorized_keys

Вставляем в него содержимое файла id_ed25519.pub.

Теперь с использованием ключа из файла id_ed25519 можно подключиться к нашему компьютеру без пароля.

Дополнительный пользователь

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

а) если Rocky Linux / CentOS:

useradd kdo -G wheel -s /bin/bash -m

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

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

useradd kdo -G sudo -s /bin/bash -m

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

в) если BSD:

pw useradd kdo -G wheel -m

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

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

passwd kdo

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

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

а) Для Linux:

hostnamectl set-hostname server.remontka.com

б) Для BSD:

ee /etc/rc.local

hostname=»server.remontka.com»

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

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

vi /etc/hostname

server.remontka.com

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

hostname server.remontka.com

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 / ALT:

apt install 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 curl

curl -sLO http://ftp.ru.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20241223_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

в) для ALT Linux:

apt-get update

apt-get install ca-certificates

Подробнее об установке корневых сертификатов в инструкции Обновление корневых сертификатов на 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 .

Обновление OpenSSH

С 01 июля 2024 стало известно об уязвимости в пакете openssh-server, благодаря которой злоумышленник может выполнять команды от суперпользователя на компьютере с настроенным доступом по SSH.

Рекомендуется обновить пакет до версии 9.8p1 и выше. Посмотреть текущую версию можно командами:

bash

ssh -V

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

OpenSSH_8.9p1 Ubuntu-3ubuntu0.10, OpenSSL 3.0.2 15 Mar 2022

В нашем примере используется версия 8.9p1 , значит ее необходимо обновить.

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

Устанавливаем dev-файлы, которые нам нужны для сборки исходника.

а) RPM: Rocky Linux / CentOS:

yum install curl tar gcc zlib-devel openssl-devel make

б) Deb: Ubuntu / Debian:

apt install curl build-essential zlib1g-dev libssl-dev make

После установки мы готовы к самой сборки и установки пакета.

Скачиваем исходник:

curl -sLO https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

* посмотреть актуальную версию пакета можно на странице официального сайта.

Распаковываем скачанный архив и переходим в распакованный каталог:

tar -zxf openssh-*.tar.gz

cd openssh-*/

Конфигурируем исходник:

./configure

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

1) configure: error: OpenSSL >= 1.1.1 required

Необходимо обновить пакет OpenSSL до версии 1.1.1 и выше. Читайте подробнее Как обновить OpenSSL на Linux .

Выполняем сборку:

make

И устанавливаем пакет:

make install

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

bash

И проверяем версию:

ssh -V

Также рекомендую перезагрузить sshd:

systemctl restart sshd

В Ubuntu 24.04 команда другая:

systemctl restart ssh

EnglishRussianUkrainian