Термины по теме: UNIX , Linux , Ubuntu , CentOS
Описанные ниже действия рекомендуется выполнить в первую очередь после установки операционной системы на базе UNIX (например, DEB-base: Astra Linux, Ubuntu, Debian, ALT и RPM-base: Rocky Linux, РЕД ОС, CentOS) вне зависимости от того, как планируется ее использовать. Также мы рассмотрим некоторые нюансы при работе с контейнерами.
Стоит учитывать, что контейнерная виртуализация решает разные задачи — идеологически, есть контейнеры для процессов (например, docker и podman), а есть контейнеры с полноценными операционными системами (например, LXD и systemd-nspawn). Нижеописанные действия меньше подходят контейнерам для процессов и больше последним.
Обновление системы
Настройка vi
Работа с пользователями
Задать имя сервера
Настройка времени и его обновления
Обновление корневых сертификатов
Автозавершение ввода команд
Утилиты гостевой операционной системы
Безопасность
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. Работа с пользователями
Я рекомендую сделать два действия:
- Заблокировать парольный вход по 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 -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