Рассмотрим установку системы CentOS 7 и последующую настройку исходя из практики использования этой операционной системы. Данная система для меня основная для использования на серверах в продакшн. Стабильность работы гарантированна. Поддержка 10 лет.
Содержание:
- 1 Введение
- 2 Установка CentOS 7
- 3 Настройка CentOS 7
- 3.1 Информация об установленной системе
- 3.2 Отключение SELinux
- 3.3 Добавление репозиториев
- 3.4 Обновление CentOS 7
- 3.5 Популярные и полезные утилиты
- 3.6 Отправка почты с авторизацией на другом SMTP сервере
- 3.7 Настройка времени
- 3.8 Сетевые параметры
- 3.9 Подсчет сетевого трафика
- 3.10 Русификация консоли
- 3.11 Смена пароля root
- 3.12 Брандмауэр FirewallD
- 3.13 Смена порта SSH
- 3.14 Авторизация SSH по ключу
- 3.15 Установка Midnight Commander
- 3.16 Установка редактора Vim
- 3.17 Отображение приглашения в консоли bash
- 3.18 Настройка хранения истории bash
- 3.19 Установка Tmux
- 3.20 Cpaste или показываем свой код
- 4 Вывод
Введение
В данной статье я постарался в одном месте собрать все основные моменты базовой настройке сервера CentOS 7 которые использую на практике.
Установка CentOS 7
Создания USB носителя для установки
Существует множество программ для записи iso образа на устройство. Например, у меня два варианта для создания носителя для установки:
- Rufus — использую эту программа для создание загрузочных USB-дисков в системе Windows;
-
ROSA ImageWriter — использую эту програму для любой системы Linux.
Варианты установки
Рассмотрим два самых популярных варианта установки СentOS 7.
Образы iso CentOS 7
Все свежие образы можно скачать по ссылке Download CentOS. Существует два варианта:
- DVD ISO — полный образ;
- Minimal ISO — минимальный образ.
Выбор за вами. Мне нравится устанавливать минимальный вариант и дальше настраивать руками, так и опыт приходит и понимаешь как что работает.
Для сервера CentOS 7 система идеальна в плане обслуживания и стабильности работы.
Выбор с каким дистрибутивом работать это отдельная тема и я обязательно расскажу о своем пути в изучении разных дистрибутивов.
Шаблоны
Шаблоны используются как правило для установки на VDS и предоставляются компаниями предоставляющие такие услуги. Удобно, но тем не менее я пару раз попадал в дурацкие ситуации.
Вот моменты почему я советую использовать установку на VDS систем с iso образа:
- Разбивка диска порой не учитывает конфигурацию тарифа или требований вашей системы — например, на одном хостинге при 2 G оперативной памяти был создал SWAP раздел в 512 М в результате пришлось переустанавливать систему дабы не терять место на и так небольшом диске;
- Локализация как правило Английская — мне приятней работать на своем родном языке хотя и на английском если надо всё настрою;
- Присутствие в шаблоне каких-то изменений отличающихся от стандартных минимальных параметров установки — порой не понимаешь откуда взялись какие то настройки которых раньше не видел. Кроме того, можно потратить кучу времени не понимая почему не работает то что всегда работало как часы. В итоге выясняется что в шаблоне установки нет пакета который всегда ставился в стандартном минимальном образе.
Все компании предоставляющие услуги VDS могут предоставить возможность установки системы с ISO образа системы. При установке надо правильно указать сетевые параметры исходя из предоставленных сетевых параметров настроек выбранного тарифа!
Разбивка диска для установки
Вариантов разбивки диска для CentOS 7 может быть множество исходя из пожеланий и предпочтений. Например, мне нравиться придерживатся таких параметров:
- Размер диска под систему Linux 50 G — этого мне хватает с запасом;
- Создаю раздел boot размером 1 G — так я гарантирую что при заполнении диска система загрузится однозначно;
- Создаю SWAP — согласно требованиям системы.
Можно выносить логи и кэш в отдельные разделы, но это лишняя трата времени. Лучше всегда мониторить размер диска и в случае проблем решать их. Прежде всего, так и головная боль пропадает о том какой размер указывать разделам ( вариант с перераспределением очень сюрпризная тема) и больше времени потратится на правильную настройку сервера.
SWAP
Тема организации SWAP на сервере очень важная и поэтому я описал все основные моменты использования в статье SWAP для Linux
Настройка CentOS 7
Информация об установленной системе
Узнать какая система установлена на сервере можно следующей командой:
uname -a = вывод команды = Linux vds.sevo44.ru 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Этой информации достаточно для понимания с какой системой предстоит работать.
Отключение SELinux
Отключаем SELinux. Его использование и настройка в системе CentOS 7 отдельный разговор.
vi /etc/sysconfig/selinux = меняем значение = SELINUX=disabled
Перезагрузим для применения изменений. После перезагрузки проверяем статус:
sestatus = вывод команды = SELinux status: disabled
Надо иметь четкое понимание что SELinux система требующая хорошего понимания в том как она работает и как настраивать. Надо или отключить сразу или потратить время на изучение как она работает.
Добавление репозиториев
Для инсталляции различного софта необходимо подключить репозитории в CentOS 7. Со временем пришло понимание того что относится к добавляемым репозиториям надо очень внимательно, чтобы в последствии не возникало проблем при обслуживании.
Всегда подключаю самый популярный репозиторий Epel (Extra Packages for Enterprise Linux). Epel хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
yum -y install epel-release
Для свежих версий PHP использую репозиторий Remi. Расскажу про это в статье посещенной серверу LEMP.
Старюсь подключать репозитории которые поддерживают сами разработчики программ. Например, такие как Nginx, Zabbix, MariaDB.
Обновление CentOS 7
Обновление системы очень важный момент и следует относится к нему очень внимательно. Всегда проще найти проблему когда проходит немного обновлений.
Прежде всего, всегда перед обновлениями делайте резервные копии!
Перед выполнением настройки лучше выполнить полное обновление системы:
yum update
Автоматическое обновление системы
Для безопасности сервера его необходимо своевременно обновлять. Вариантов обновления CentOS 7 несколько и это тема отдельного длинного разговора.
Например, получать сообщения на почту об появившихся обновлениях и уже на основании этого принимать решение о необходимости обновления — для меня лучший вариант.
При моих пожеланиях мне подойдёт утилита yum-cron. Ставится она из базового репозитория командой:
yum install yum-cron
После установки создается автоматическое задание на выполнение утилиты в /etc/cron.daily и /etc/cron.hourly.
По-умолчанию, утилита скачивает найденные обновления, но не устанавливает их. Администратору на локальный почтовый ящик root отправляется уведомление об обновлениях.
Конфигурационный файл настройки yum-cron находятся по адресу /etc/yum/yum-cron.conf.
Самый важный параметр это update_cmd — которой будет говорить системе какие выполнять обновления. Доступно несколько вариантов:
- default — полное обновление;
- security — только обновление безопасности;
- security-severity:Critical — только критические обновления безопасности;
- minimal — минимальное обновление с исправлениями ошибок;
- minimal-security — исправления ошибок и обновления безопасности;
- minimal-security-severity:Critical — исправления ошибок и критические обновления.
В разделе настроек [email] указаны параметры отправки сообщений. По умолчанию отправка сообщений идет пользователю root.
Обычно я настраиваю глобально для всего сервера пересылку локальной почты root на внешний почтовый ящик через авторизацию на другом smtp сервере.
При настройках по умолчанию на почтовый ящик будет приходить очень много сообщений о наличии обновлений. Считаю что оптимальный вариант это когда приходят сообщения о наличии обновлений по безопасности и минимальные обновления с исправлениями ошибок.
В результате мои настройки примут следующий вид:
vi /etc/yum/yum-cron.conf = часть кода = update_cmd = minimal-security update_messages = yes download_updates = yes apply_updates = no
Согласно которым будут вкачиваться все пакеты где есть исправления ошибок и обновления безопасности. Установка производиться не будет а на почту придет сообщение.
После внесения изменений настройки не забываем перезапустить службу.
systemctl restart yum-cron
Популярные и полезные утилиты
Установим в начале основные популярные утилиты которые обычно требуются в работе.
yum -y install net-tools bind-utils htop atop iftop lsof wget bzip2 traceroute gdisk yum-utils vim
- net-tools bind-utils — сетевые утилиты после установки которых будут работать команды # ifconfig и # nslookup,
- htop atop — два интересных диспетчера задач,
- iftop — показывает в режиме реального времени загрузку сетевого интерфейса,
- lsof — вывода информации о том, какие файлы используются теми или иными процессами,
- wget — неинтерактивная консольная программа для загрузки файлов по сети,
- bzip2 — утилита командной строки с открытым исходным кодом для сжатия данных,
- traceroute — утилита предназначенная для определения маршрутов следования данных в сетях TCP/IP,
- fdisk — умеет работать с GPT-дисками разработано по подобию fdisk,
- yum-utils — — это набор утилит для управления репозиториями, установки и отладки пакетов, поиска пакетов и много другого.
Отправка почты с авторизацией на другом SMTP сервере
Настраиваем на базе Postfix.
Проверка статуса:
systemctl status postfix
Если Postfix не установлен то производим установку выполнив команду:
yum install postfix
Запускаем и добавляем в автозагрузку командами:
systemctl start postfix systemctl enable postfix
Чтобы отправлять письма с консоли необходимо установить пакет mailx:
yum install mailx
После этого можно отправлять с консоли сервера сообщения на свою почту:
uname -a | mail -s "info server" info@sevo44.ru
В результате на почту придёт сообщение:
Мы не уверены в подлинности отправителя этого письма. Возможно, данные были подменены.Отправитель: vds-micro2.sevo44.ruПодпись: НетШифрование: Нет
Из за выше сказанного сообщение может попасть в спам, либо вообще не будет принято сервером получателя, потому что на сервере нет корректных настроек для отправки почты. Чтобы почта корректно отправлялась, надо воспользоваться внешним почтовым сервером.
Например, мне удобно в данном случае везде использовать почту noreply@sevo44.ru которая обслуживается Yandex.
Переименуем дефолтный конфиг Postfix. После этого, создадим рабочий и добавим необходимые настройки:
mv /etc/postfix/main.cf /etc/postfix/main.cf_orig vim /etc/postfix/main.cf = необходимый код = # DEFAULT CONFIG queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix # Имя сервера, которое выводит команда hostname myhostname = vds-micro2.sevo44.ru # По логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель # фигурировало полное имя сервера, так удобнее разбирать служебные сообщения mydomain = vds-micro2.sevo44.ru myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost inet_interfaces = localhost inet_protocols = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES # SMTP YANDEX CONFIG relayhost = smtp.yandex.ru:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes # База параметров авторизации с SMPT smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd # Беза подмены имени почтового ящика smtp_generic_maps = hash:/etc/postfix/generic smtp_sasl_security_options = noanonymous smtp_tls_security_level = may
Создаем файл с информацией об имени пользователя и пароле для авторизации на сервере SMTP:
vim /etc/postfix/sasl_passwd = необходимый код = smtp.yandex.ru:587 noreply@sevo44.ru:PASSWORD
Создаем db файл:
postmap /etc/postfix/sasl_passwd
Для того чтобы почта уходила надо чтобы адрес отправителя а адрес авторизации на сервер smtp совпадал!
В случае если у нас имеется сайт отправляющий почту средствами PHP можно настроить корректную отправку почты. Например, добавим параметр для сайта crystalium44.ru.
Переименуем дефолтную безу подмены имени почтового ящика. После этого, создадим рабочий и добавим необходимые настройки:
mv /etc/postfix/generic /etc/postfix/generic_orig vim /etc/postfix/generic = необходимый код = root@vds-micro2.sevo44.ru noreply@sevo44.ru crystalium44.ru@php7-lxc-vds-micro2.sevo44.ru noreply@sevo44.ru
Создаем db файл:
postmap /etc/postfix/generic
При получении ошибки «warning: SASL authentication failure: No worthy mechs found» Необходимо установить еще несколько пакетов для работы SASL!
Установим необходимые пакеты:
yum -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain
Перезапустим Postfix и проверим работу.
systemctl restart postfix
Отправляем тестовое письмо через консоль.
uname -a | mail -s "info server" info@sevo44.ru
Отправитель письма подтверждён и проверен Спамообороной Яндекса.Отправитель: sevo44.ruПодпись: sevo44.ruШифрование: Да
Так выглядит письмо отправленное с сайта crystalium44.ru c помощью PHP:
Как видим теперь всё работает как надо!
В случае ошибок проверяем почтовый лог выполнив команду:
tail -n 10 /var/log/maillog
В заключение, осталось добавить к стандартному алиасу для root в /etc/aliases, внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку:
vim /etc/aliases = необходимо привести к виду = # Person who should get root's mail root: root,info@sevo44.ru
Обновляем базу сертификатов:
newaliases
Настройка времени
Определим текущее время на сервере:
date = вывод команды = Ср ноя 14 12:17:34 CET 2018
Как видим временная зона не настроена.
Выполним необходимую настройку временной зоны Europe — Moscow:
= Сделать резервную копию текущей timezone = mv /etc/localtime /etc/localtime.bak = В папке /usr/share/zoneinfo/ ишем что надо и делаем ссылку = ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В итоге получим:
date = вывод команды = Сб окт 13 02:59:46 MSK 2018
Синхронизация времени
В CentOS 7 по-умолчанию используется утилита для синхронизации времени chrony. Если у вас её нет, то устанавливайте:
yum install chrony
Запускаем chrony и добавляем в автозагрузку:
systemctl start chronyd systemctl enable chronyd
Проверяем правильность работы:
systemctl status chronyd = вывод команды = ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Ср 2018-10-03 21:55:18 MSK; 27min ago Docs: man:chronyd(8) man:chrony.conf(5) Main PID: 631 (chronyd) CGroup: /system.slice/chronyd.service └─631 /usr/sbin/chronyd окт 03 21:55:17 lemp.sevo44.loc systemd[1]: Starting NTP client/server... окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG) окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: Frequency 1.141 +/- 1.440 ppm read from /var/lib/chrony/drift окт 03 21:55:18 lemp.sevo44.loc systemd[1]: Started NTP client/server. окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: Selected source 89.109.251.23 окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: System clock wrong by 1.035954 seconds, adjustment started окт 03 21:55:36 lemp.sevo44.loc chronyd[631]: System clock was stepped by 1.035954 seconds
Сетевые параметры
При установке CentOS 7 уделяю особое внимание настройки сетевых параметров. Кроме того, на странице настройки сетевых параметров указывается название хоста.
В случае установки с образа iso на vds настройка сетевых параметров просто необходима.
Всегда отключаю ipv6 так как в большинстве случаев он не используется а вот проблемы при работе с системой может создать.
Для управления сетевыми настройками в CentOS 7 после установки можно воспользоваться графической утилитой nmtui:
nmtui = вывод команды = -bash: nmtui: команда не найдена = команда установки необходимого пакета для работы nmtui = yum install NetworkManager-tui
Сетевые настройки необходимо выполнять с помощью nmtui или руками предварительно отключив NetworkManager!
Руками вся настройка сводится к редактированию файлов в паке /etc/sysconfig/network-scripts/. Для определения интерфейсов необходимо предварительно выполнить команду ip addr которая покажет название всех имеющихся интерфейсов.
Например, мой файл настройки сетевого интерфейса ens18:
vim /etc/sysconfig/network-scripts/ifcfg-ens18 = вывод команды = TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="yes" IPV6INIT="no" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens18" UUID="2f1479ad-8a41-4886-acf4-64f0c5eff5c2" DEVICE="ens18" ONBOOT="yes" IPADDR="135.21.15.51" PREFIX="24" GATEWAY="18.22.52.1" DNS1="165.2.92.3" ZONE=public
Для применения изменений необходимо перезагрузить Network Manager выполнив команду:
/etc/init.d/network restart
= вывод команды =
Restarting network (via systemctl): [ OK ]
= или командой =
systemctl restart NetworkManager.service
= предварительно поняв название необходимого сервиса =
systemctl list-units | grep -i network
Подсчет сетевого трафика
Иногда необходимо посмотреть трафик сервера за определенный период и для этого идеально подходит утилита vnStat. При желании можно настроить web интерфейс, для красивого отображения статистики по трафику.
vnStat получает данные из ядра Linux, т.е. не снифит поток, благодаря чему работает быстро и не вызывает вопросов к безопасности. Кроме того, она отлично делает свое дело без root привилегий.
Утилита считает трафик для каждого интерфейса отдельно, разделяя входящий и исходящий. Умеет строить наглядные отчеты с графиками нагрузки. Уровни детализации этих графиков: месяц, неделя, день, час. Также всегда можно посмотреть текущую активность в сети.
Установка производится командой при условии установленного репозитория EPEL:
yum install vnstat
Посмотреть документацию по программе можно выполнив команду:
man vnstat
Посмотреть список доступных интерфейсов можно командой:
vnstat --iflist = вывод команды = Available interfaces: lo ens18 (1000 Mbit)
vnstat -u -i ens18
= вывод команды =
Error: Unable to read database "/var/lib/vnstat/ens18": Нет такого файла или каталога
Info: -> A new database has been created.
Необходимая база создалась.
vim /etc/vnstat.conf = необходимое исправление = # default interface Interface "ens18"
systemctl status vnstat -l = вывод команды = ● vnstat.service - vnStat network traffic monitor Loaded: loaded (/usr/lib/systemd/system/vnstat.service; enabled; vendor preset: disabled) Active: active (running) since Сб 2019-01-26 01:37:57 MSK; 3 days ago Docs: man:vnstatd(1) man:vnstat(1) man:vnstat.conf(5) Main PID: 12380 (vnstatd) CGroup: /system.slice/vnstat.service └─12380 /usr/sbin/vnstatd -n янв 29 06:48:14 vds-micro2.sevo44.ru vnstatd[12380]: Error: Unable to create database backup "/var/lib/vnstat/.ens18". янв 29 06:48:14 vds-micro2.sevo44.ru vnstatd[12380]: Error: Unable to create database backup "/var/lib/vnstat/.ens18".
vim /etc/vnstat.conf = необходимые изменения = # vnstatd ## # switch to given user when started as root (leave empty to disable) DaemonUser "vnstat" # switch to given user when started as root (leave empty to disable) DaemonGroup "vnstat"
Сменим пользователя сервиса с vnstat на root:
vim /lib/systemd/system/vnstat.service
= вывод команды с необходимыми изменениями =
[Unit]
Description=vnStat network traffic monitor
Documentation=man:vnstatd(1) man:vnstat(1) man:vnstat.conf(5)
After=network.target
[Service]
User=root
ExecStart=/usr/sbin/vnstatd -n
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Проверим статус сервиса выполнив необходимую команду:
systemctl status vnstat = вывод команды = ● vnstat.service - vnStat network traffic monitor Loaded: loaded (/usr/lib/systemd/system/vnstat.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:vnstatd(1) man:vnstat(1) man:vnstat.conf(5)
Запустим сервис vnstat и добавим в атозагрузку:
systemctl start vnstat systemctl enable vnstat
= С указанием необходимого интерфейса = vnstat -l -i ens18 = Показывает статистику default интерфейса = vnstat -l
При выполнении стандартной команды покажется месячная и дневная статистика:
vnstat = вывод команды = Database updated: Tue Jan 22 19:42:45 2019 ens18 since 22.01.2019 rx: 2,16 MiB tx: 58 KiB total: 2,22 MiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- янв '19 2,16 MiB | 58 KiB | 2,22 MiB | 0,01 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- today 2,16 MiB | 58 KiB | 2,22 MiB | 0,26 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
- rx – полученные;
- tx – переданные пакеты.
Вот примеры отображения дневной и месячной статистики:
vnstat -d = вывод дневной статистики = ens18 / daily day rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- 29.01.2019 375,86 MiB | 5,71 MiB | 381,57 MiB | 36,18 kbit/s 30.01.2019 535,89 MiB | 19,58 MiB | 555,47 MiB | 52,67 kbit/s 31.01.2019 509,02 MiB | 19,55 MiB | 528,57 MiB | 50,12 kbit/s 01.02.2019 366,43 MiB | 13,23 MiB | 379,66 MiB | 53,21 kbit/s ------------------------+-------------+-------------+--------------- estimated 541 MiB | 19 MiB | 560 MiB | vnstat -m = вывод статистики по месяцам = ens18 / monthly month rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- янв '19 1,39 GiB | 44,83 MiB | 1,43 GiB | 4,48 kbit/s фев '19 366,43 MiB | 13,23 MiB | 379,66 MiB | 65,27 kbit/s ------------------------+-------------+-------------+--------------- estimated 18,14 GiB | 659 MiB | 18,79 GiB |
Русификация консоли
При установке из шаблонов, как правило, будет использоваться английский язык по умолчанию. Если вам по душе русский язык в системной консоли, то используйте следующую команду:
localectl set-locale LANG=ru_RU.UTF-8
После перезагрузки всё в консоли станет на русском языке.
Смена пароля root
Смена пароля производится командой:
passwd = вывод команды = Изменяется пароль пользователя root. Новый пароль : Повторите ввод нового пароля : passwd: все данные аутентификации успешно обновлены.
Брандмауэр FirewallD
По умолчанию в системе CentOS 7 используется Файрвол (брандмауэр) FirewallD. О том как работать я описывал в статье FirewallD базовая настройка. Ниже я выполню необходимые действия не описывая всё подробно.
FirewallD многие советуют отключать и пользоваться старым проверенным механизмом iptables, так как он используется по умолчанию во многих системах Linux.
Найти информацию о том как настраивать iptables для разных вариантов работы вы можете на замечательном ресурсе serveradmin.ru.
Вывод информации об активных зонах:
firewall-cmd --get-active-zones = вывод команды = public interfaces: ens18
Выведем информацию о конкретной зоне:
firewall-cmd --list-all --zone=public = вывод команды = public (active) target: default icmp-block-inversion: no interfaces: ens18 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Для безопасности порт ssh лучше поменять на нестандартный.
Добавим разрешение подключаться по этому порту:
firewall-cmd --permanent --zone=public --add-port=25555/tcp = вывод команды = success
Кроме того, сразу далим ненужный сервис:
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client = вывод команды = success
Применим изменения и посмотрим результат сделанных действий:
firewall-cmd --reload = вывод команды = success firewall-cmd --list-all --zone=public = вывод команды = public (active) target: default icmp-block-inversion: no interfaces: ens18 sources: services: ssh ports: 25555/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Только после настройки ssh для работы по новому порту удаляйте сервис ssh из FirewallD!
Смена порта SSH
Укажем порт в настройках ssh открыв конфигурационный файл командой:
vi /etc/ssh/sshd_config = необходимые изменения = Раскоментируем строку Port 22 и заменим на наш 25555
Перезапускаем сервис ssh командой:
systemctl restart sshd
Проверяем какой порт слушает sshd (для работы нужен установленный пакет net-tools):
netstat -tulpn | grep sshd tcp 0 0 0.0.0.0:25555 0.0.0.0:* LISTEN 453/sshd tcp6 0 0 :::25555 :::* LISTEN 453/sshd
Подключение к SSH по нестандартному порту
Подключение производится с указанием необходимого порта командой:
ssh -p 25555 root@193.124.180.195
Авторизация SSH по ключу
Вводить каждый раз пароль не удобно да и не помешает добавить безопасности.
После настройки можно отключить в параметрах ssh авторизацию по паролю, но иногда подключение по паролю просто необходимо. Обычно я создаю 16 злачный пароль и меняю его если давал временный доступ специалистам любого уровня и моего доверия. Безопасность лишней не бывает!
Более подробно о том как настроить подключение по ключу можно в статье RSA или авторизация SSH по ключу
Добавляем на сервер необходимый ключ командой:
ssh-copy-id -i /home/local/.ssh/sevo44_rsa.pub -p 25555 root@243.21.12.24
Установка Midnight Commander
Установим самый популярный файловых менеджеров с текстовым интерфейсом командой:
yum -y install mc
Включаем подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax. Этот универсальный синтаксис подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса. Перезаписываем файл unknown.syntax:
cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
= вывод команды =
cp: переписать «/usr/share/mc/syntax/unknown.syntax»? y
В случае отказа от использования встроенного редактора MC необходимо в настройках «Настройки — Конфигурация» снять галки у параметров «Встроенный редактор» и «Встроенный просмотр»
Установка редактора Vim
По умолчанию в системе работает редактор vi и его вполне достаточно.
Обоснование использования редактора VIM и как с ним работать можно в статье Vim текстовый редактор
Установим Vim без вопросов командой:
yum -y install vim
Отображение приглашения в консоли bash
При появлении большого количества серверов на обслуживании я сразу столкнулся с плохой информативностью о том с каким я сервером работаю.
Стандартный вариант отображения приветсвия после установки CentOS 7:
[root@vds-micro ~]#
В представленном виде при работе одновременно с разными серверами я путался и порой выполнял команды не там где надо. Изменение цвета приглашения, вывода полного имени машины и пути где мы находимся позволило мне избежать таких ошибок.
Выведем имеющиеся параметры:
echo $PS1 = вывод команды = [\u@\h \W]\$
Изменим для текущей сессии:
export PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
= в результате =
root@vds-micro.sevo44.ru ~ #
Для постоянного применения настроек необходимо в папке пользователя в файл .bashrc добавить необходимый код:
vim .bashrc = необходимые дополнения = # Приветствие bash PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
Для применения подобных настроек для всех пользователей с обычными правами сделаем приглашение зеленым. Добавим необходимые параметры в имеющийся файл или создадим новый и добавим туда необходимые параметры:
vim /etc/profile.d/bash_completion.sh = необходимое дополнение = # Вид bash PS1='\[\033[01;32m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
В итоге я получил следующее:
root@vds-micro.sevo44.ru /etc # = права root root@vds-micro.sevo44.ru /etc # = простой пользователь
Более подробно можно почитать в статье Изменение приглашения терминала в bash.
Настройка хранения истории bash
Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть.
По умолчанию вывод команды history в консоли нам покажет:
history = вывод команды = 1 yum update 2 reboot 3 htop 4 df -h
Как видим вывод не информативный. Кроме того, покажет только последние 1000 команд.
Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:
history | grep yum
Изменим эту ситуацию добавив в файл .bashrc находящийся в папке пользователя необходимые параметры:
# Настройки history export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND='history -a' export HISTIGNORE="ls:ll:history:w"
Расшифруем параметры:
- Первый параметр увеличивает размер файла до 10000 строк;
- Второй параметр указывает, что необходимо сохранять дату и время выполнения команды;
- Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю;
- В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется.
Для применения изменений необходимо выполнить команду:
source ~/.bashrc
В итоге мы получим:
history = вывод команды = 1 янв 22 18:33:08 yum update 2 янв 22 18:33:08 reboot 3 янв 22 18:33:08 htop 4 янв 22 18:33:08 df -h
Можно применить эту настройку для всех пользователей указав параметр в файле /etc/profile.d/bash_completion.sh который мы создали ранее при настройке вида bash.
В таком варианте получаем гораздо большую информативность.
Установка Tmux
В заключение, установим пожалуй один из самых необходимых и удобных программ для удаленной работы с сервером. Tmux терминальный оконный менеджер при использовании дает возможность при обрыве связи с сервером по ssh не терять информацию о выполняемых действиях.
Установка выполняется командой:
yum install tmux
Более подробная информация по настройке и работе с программой Tmux можно в статье Tmux терминальный оконный менеджер
Cpaste или показываем свой код
Периодически возникает необходимость показать свои настройки коллегам для разных целей. В мессенджерах не всегда корректно отображается копируемый код. Существует механизм который идеально подходит для такой задачи. Установим необходимый пакет:
yum install cpaste
Например, мы хотим показать код глобальной настройки nginx.
Выполним в консоли команду:
cat /etc/nginx/nginx.conf | cpaste
= результат команды =
Successfully pastebined to: https://paste.centos.org/view/0c2650772c
Теперь нам достаточно отправить ссылку кому надо и по ссылке человек сможет увидеть наш код и отписать прям там свои пожелания и предложения.
Можно отправить вывод команды. Например, информацию о размерах дискового пространства можно отправить командой:
df -h | cpaste
= вывод команды =
Successfully pastebined to: https://paste.centos.org/view/17671ad924
По умолчанию заметка будет храниться 1 день.
Вывод
В результате я получил статью в которой свёл в одно место все основные моменты которые я на практике использую при базовой настройке сервера CentOS 7. Возможно что-то сказано с ошибками или можно улучшить. Комментируйте и советуйте я всегда рад обратной связи с пользователями систем Linux.
очень познавательно ,спасибо
Статья отличная! много чего узнал) У себя ещё настроил терминальный сервер. И при подключении через RDP или vnc не получается перевести раскладку на en, соответственно и войти не получается. Ибо пользователь на en и пароль тоже. Может вы можете что нибудь подсказать?
Добавил в статью про XRDP эту информацию: «Перед подключением с Windows необходимо вначале перейти на раскладку в которой вводится логин и пароль, как правило это EN.». Надеюсь это то что Вам надо.
Да, это то. Спасибо!