- Базовая настройка *nix сервера на примере Alma Linux в редакции minimal
- 1. Настройка сетевых подключений
- 2. Обновление системы
- 3. Установка текстового редактора nano
- 4. Исправление русской локализации
- 5. Добавление репозитория EPEL
- 6. Установка и настройка bash-completion
- 7. Установка необходимых утилит для работы с сетью
- 8. Дисковое пространство
- 9. Тop»ы
- 10. Отключение SELinux
- 12. Настройка SSH
- 13. Отключение суперпользователя по ssh
- 14. Настраиваем синхронизацию времени через chrony
- 15. Настройка хранения истории bash
- 16. Автоматическое обновление системы
- 17. FireWall или межсетевой экран!
Базовая настройка *nix сервера на примере Alma Linux в редакции minimal
Для начала немного лирики, то есть я расскажу казалось бы очевидные вещи, однако для многих они не очевидны.
После того как «Красная шапочка» окончательно прикончила проект CentOS, сделав из него по сути бесконечную beta версию своего RHEL, у многих встал вопрос, а что собственно дальше делать и какой теперь дистрибутив использовать?
А в мире .rpm их не так и много, помимо самого RHEL есть ещё Open SUSE, но она не полностью совместима с пакетной базой RHEL и в данной статье рассматриваться не будет. И выбор остаётся не велик, либо Oracle Linux, либо Alma Linux, и тут у Альмы есть серьёзное преимущество. Так как все компоненты в ней не имеют проприетарных лицензий, её можно использовать к коммерческой эксплуатации, как и когда-то CentOS, и Альма 100% совместима с пакетной базой RHEL.
Всё описанное в статье было применено к Alma Linux 8.5 в редакции minimal, а сам дистрибутив взят отсюда.
Статья в первую очередь предназначена для новичков в мире Linux и не претендует на истину в последней инстанции, тем более опытные Linux админы поленятся настраивать сервер руками и сделают это с помощью системы управления конфигурацией типа Ansible или любой другой.
1. Настройка сетевых подключений
В общем случае, сеть в Alma Linux настраивается с помощью NetworkManager и его консольной утилиты nmtui. Она идет в базовой установке системы. Там простой и понятный графический интерфейс.
Для того чтобы туда попасть, пишем следующие команды
Выбираем пункт «Edit a connection»
Выбираем нужный нам интерфейс
Активируем чек-бокс «Automatically connect»
2. Обновление системы
3. Установка текстового редактора nano
А теперь, дабы не испытывать «боль и унижение» от текстового редактора vi, предлагаю установить nano:
4. Исправление русской локализации
Если во время установки вы выбрали русский язык, то есть весьма большой шанс получить «квадратики» вместо русских символов в терминале.
Для того чтобы это исправить, делаем простые шаги:
cd /etc
nano /etc/vconsole.conf
приводим конфиг к такому виду:
5. Добавление репозитория EPEL
dnf -y install epel-release
6. Установка и настройка bash-completion
Чтобы стал доступен весь список команд после ввода пары символов, используется утилита bash-completion. Это реально удобно, TAB и готово!
dnf install bash-completion
cat /etc/profile.d/bash_completion.sh
source /etc/profile.d/bash_completion.sh
7. Установка необходимых утилит для работы с сетью
в этот пакет входят такие утилиты как:
А теперь поставим утилиту для работы с DNS, которая входит в пакет bind-utils:
8. Дисковое пространство
Для того чтобы понять, что и сколько занимает, а также для чистки/удаления, нам понадобится утилита ncdu :
9. Тop»ы
dnf install iftop
dnf install htop
dnf install atop
10. Отключение SELinux
Поскольку это руководство для новичков, то тут мы рассмотрим работу без использования SELinux, но отключать его крайне не рекомендуется!
cd /etc/sysconfig/
nano selinux
//меняем значение на SELINUX=disabled:
setenforce 0
12. Настройка SSH
Продолжаем настраивать centos. Внесем некоторые изменения в работу ssh для небольшого увеличения безопасности. Хотя речь стоит вести больше не о безопасности, а об удобстве и эффективности.
По-умолчанию, сервис ssh работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Это не доставляет в реальности каких-то серьезных хлопот и тем не менее, подобные запросы забивают лог secure и тратят некоторые ресурсы сервера, как минимум на установку соединения и рукопожатия (handshake).
Чтобы немного закрыть себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит. Повесим демон ssh на 2222 порт. Для этого редактируем файл /etc/ssh/sshd_config.
Но с начала отключим стандартный Firewall:
systemctl status firewalld
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
Возвращаемся к ssh. Раскомментируем строку Port 22 и заменим значение 22 на 2222:
cd /etc/ssh/
nano /etc/ssh/sshd_config
systemctl restart sshd
netstat -tulpn | grep sshd
tcp | 0 | 0 0.0.0.0:2222 | 0.0.0.0:* | LISTEN | 720/sshd |
tcp6 | 0 | 0 . 2222 | . * | LISTEN | 720/sshd |
13. Отключение суперпользователя по ssh
Для того чтобы отключить, откройте конфигурационный файл ssh:
Измените строку следующим образом:
Сохраните файл и перезапустите сервер SSH, выполнив следующие команды:
Для повторного включения учетной записи суперпользователя, просто поместите символ # для директивы PermitRootLogin в файл и сохраните его. Перезапустите SSH сервер.
14. Настраиваем синхронизацию времени через chrony
dnf install chrony
//Запускаем chrony и добавляем в автозагрузку: systemctl start chronyd
systemctl enable chronyd
//Проверяем, нормально ли запустился:
systemctl status chronyd
15. Настройка хранения истории bash
Как известно, история команд в Linux хранится в файле ~/.bash_history . Для редактирования пишем:
Размер файла ограничен списком из 500 последних выполненных команд, которые затираются по мере заполнения этого файла.
500 команд — это довольно мало, вы легко можете потерять полезную команду, которую выполнили, скажем неделю назад.
Чтобы увеличить размер хранимой истории, необходимо в файл ~/.bashrc добавить строки:
export HISTSIZE=10000
export HISTFILESIZE=10000
//HISTSIZE — количество команд, которые необходимо запоминать в списке истории (по умолчанию — 500);// //HISTFILESIZE — максимальное количество строк, содержащееся в файле истории ~/.bash_history (по умолчанию — 500);
Теперь у нас будет храниться история последних 10 тыс. команд. Для применения настроек нужно выполнить:
Идем дальше, если вы выполните команду history, то заметите, что выполненные подряд одни и те же команды повторяются в истории. Это жутко неудобно, давайте отключим такое поведение. Для этого в файл ~/.bashrc добавим строку:
export HISTCONTROL=ignoreboth:erasedups
Опция HISTCONTROL контролирует каким образом список команд сохраняется в истории.
- ignorespace — не сохранять строки, начинающиеся с символа ;
- ignoredups — не сохранять строки, совпадающие с последней выполненной командой;
- ignoreboth — использовать обе опции ‘ignorespace’ и ‘ignoredups’;
- erasedups — удалять ВСЕ дубликаты команд из истории.
Не забываем выполнить source ~/.bashrc для применения настроек на лету.
Следующая полезная настройка отвечает за игнорирование определенных команд при добавлении в историю, это HISTIGNORE.
Давайте не будем сохранять в истории команды ls, ps и history с доп. опциями. Для этого в файл ~/.bashrc добавим строку:
export HISTIGNORE='ls:ps:history*'
source ~/.bashrc
По умолчанию, Bash записывает историю команд в ~/.bash_history только при завершении сессии. Если Ваша сессия будет отключена некорректно, то как правило история команд в текущем сеансе не сохраниться — это неудобно. Чтобы это исправить нужно добавить в ~/.bashrc следующую строку:
Как вы уже заметили, вывод истории команд не учитывает дату и время выполнения этой команды, а иногда бывает очень нужно понимать, когда же Вы выполнили эту команду. Но все можно поправить, чтобы добавить дату к списку команд, нужно изменить формат вывода истории, для этого в ~/.bashrc нужно добавить строку:
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S:'
source ~/.bashrc
И в конце, все вышеописанные опции можно добавить в ~/.bashrc с помощью одной команды:
cat > ~/.bashrc
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -a'
export HISTIGNORE='ls:ps:history*'
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: '
EOT
source ~/.bashrc
Иногда случаются ситуации, когда необходимо очистить историю команд Linux. Например, вы случайно ввели в консоли команду, содержащую пароль в открытом виде. В этом случае Вам потребуется либо удалить всю историю, либо только определенную ее часть.
Если нужно удалить конкретную строку в истории, то выполните:
Для удаления всей истории команд выполните:
Если нужно очистить историю команд только для текущей сессии, то выполните:
Следует обратить внимание, что если вы сохраняете историю сразу по факту выполнения команды (настройка PROMPT_COMMAND=’history -a’ ), а не по выходу из сессии, как это предусмотрено по умолчанию, то полную очистку истории указанными выше способами (опции -c и -r) вы не сделаете, история в файле ~/.bash_history сохраниться. Тогда для полной очистки истории команд нужно очистить файл ~/.bash_history , для этого выполните:
и закройте текущую сессию, тогда история будет очищена полностью.
По умолчанию, история команд включена всегда и все введенные команды можно использовать повторно, не затрачивая времени на их набор. Но при желании функцию ведения истории можно временно отключить. В Bash история команд в текущей сессии отключается с помощью команды:
Для включения ведения истории команд в текущей сессии выполните:
16. Автоматическое обновление системы
Для поддержания безопасности сервера на должном уровне необходимо, как минимум, своевременно его обновлять — как само ядро с системными утилитами, так и остальные пакеты. Можно делать это вручную, но для более эффективной работы лучше настроить автоматическое выполнение. Не обязательно именно устанавливать обновления автоматически, но как минимум проверять их появление.
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
Дефолтный таймер настроен на запуск dnf-automatic через час после загрузки сервера и ежедневное повторение. Конфиг таймера живет тут — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.
17. FireWall или межсетевой экран!
Итак, самое интересное я оставил напоследок, по поводу «какой межсетевой экран лучше» написано много статей и там в основном сравнивают iptables с nftables и кто-то даже рассказывает, что один безопаснее другого.
На самом же деле в Linux с самого начала был и есть всего один межсетевой экран и называется он NetFilter, и поставляется NetFilter с ядром Linux. А всеми любимые iptables с nftables являются утилитами для управления и настройки, а не самим межсетевым экраном.
Но тут мы рассмотрим другой более удобный и современный инструмент для взаимодействия с NetFilter, а именно UFW.
Установим межсетевой экран:
Проверим список доступных приложений: