Lnav представляет собой расширенный просмотрщик файлов журналов (log) для терминала Linux. Открывает архивные логи, отображает содержимое в режиме реального времени, возможно открыть сразу несколько логов и увидеть их наложение на одном экране.
Введение
В работе постоянно требуется просматривать логи для выявления ошибок и оптимальной настройки как системы так и разных служб. На практике я перепробовал разные утилиты, но данная программа подходит идеально для разных случаев. Устанавливается просто и не требует никаких дополнительных настроек.
Основные преимущества утилиты:
Устанавливается просто и не требует настроек,
Показывает содержание в режиме реального времени,
Позволяет открывать архивные файлы,
Производит подсветку синтаксиса,
Можно открывать несколько логов одновременно.
Установка Lnav
Утилита присутствует во всех популярных операционных системах Linux.
Более подробно о программе и работе с ней можно посмотреть на официальном сайте Lnav.
Установка из репозитория:
= Семейство Debian =
apt install lnav
= Семейство RedHat =
dnf install lnav
Работа с Lnav
В сети существует Документация по Lnav на русском языке в котором все хорошо рассказано.
Lnav понимает наиболее популярные форматов логов, таких как access логи веб сервера, syslog, dpkg, strace и другие. Программа автоматически подсвечивает, позволяет быстро делать какие-то выборки. Например, посмотреть все ошибки в нужном логе, показать по ним статистику, вывести информацию по какой-то службе и т.д. и т. п.
В Lnav есть возможность открыть сразу несколько логов и увидеть их наложение на одном экране. Это удобно, когда надо что-то расследовать.
Открываем сразу два лога такой командой:
# В случае если находимся в нужной папке
/var/www/sevo44.ru/log # lnav sevo44.ru-access.log sevo44.ru-error.log
# С указанием полного пути
lnav /var/www/sevo44.ru/log/sevo44.ru-access.log /var/www/sevo44.ru/log/sevo44.ru-error.log
Утилита выстроит строки обоих логов в порядке времени событий.
Заключение
Конечно для более профессионального подхода в изучении логов лучше использовать такое решение как Elastic Stack, но пока его нет или не подключили новый ресурс использование утилиты Lnav лучшее решение.
Кроме того не надо путать мониторинг логов и мониторинг параметров системы это совсем разные вещи. Например я лично для мониторинга разных параметров системы активно и давно использую систему Zabbix.
Несколько версий PHP на сервере Linux удобно в работе и последующем обслуживании. В статье пример на базе Rocky Linux , но вы можете использовать его и для других систем использующих репозиторий RHEL.
Введение
Для любого системного администратора обновление версий PHP является задачей не простой и очень ответственной. При использовании на сервере одной версии php в процессе перехода на новую версию приходиться делать много действий необходимых для безотказной работы ресурса на период обновления. Сюрпризы могут подстерегать на любом моменте и спрогнозировать их крайне сложно.
В этой статье я описал механизм того как можно совершенно спокойно обновлять версии PHP не создавая проблем в работе пользователей с рабочим ресурсом.
Предварительная подготовка
Для работы с разными версиями php на одном сервере нам необходимо произвести предварительную настройку системы.
Перед началом использования репозитория Remi (на базе которого мы и будем устанавливать разные версии PHP) необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel для дистрибутивов на базе RHEL производится командой:
dnf install epel-release
dnf update
Установка и настройка Nginx
При написании статьи учитывается что настройка Nginx была произведена согласно статьи NGINX установка и настройка.
Посмотрим какие варианты присутствуют в базовой версии:
# dnf module list php
Последняя проверка окончания срока действия метаданных: 1:27:39 назад, Ср 10 ноя 2021 11:34:45.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
Подсказка: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Видим что в базовой версии по умолчанию находится версия 7.2 её и будем устанавливать.
Установим php и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Проверим установленную версию выполнив команду в консоли сервера:
php -v
= вывод команды =
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
systemctl enable --now php-fpm
Проверяем, запустился ли он.
systemctl status php-fpm
= вывод команды =
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-11-10 13:51:24 EST; 16s ago
Main PID: 7567 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 23681)
Memory: 17.3M
CGroup: /system.slice/php-fpm.service
├─7567 php-fpm: master process (/etc/php-fpm.conf)
├─7568 php-fpm: pool www
├─7569 php-fpm: pool www
├─7570 php-fpm: pool www
├─7571 php-fpm: pool www
└─7572 php-fpm: pool www
ноя 10 13:51:24 localhost.localdomain systemd[1]: Starting The PHP FastCGI Process Manager...
ноя 10 13:51:24 localhost.localdomain systemd[1]: Started The PHP FastCGI Process Manager.
Из вывода видно сервис успешно работает.
Настройки php находятся по стандартному пути /etc/php.ini а настройки пулов лежат в папке /etc/php-fpm.d/.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта создать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp. Более подробно про настройку доступа по SFTP прочтите в статье SFTP настройка для веб хостинга.
В настройках nginx для сайта необходимо указать требуемый пул.
Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location ~ \.php$
Настройка базовой версии закончена и приступаем к установке других версий php.
Версии PHP от Remi
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционных систем на базе RHEL. Познакомится с новостями репозитория можно на блоге Remi Collet.
Посмотрим список всех доступных вариантов установки php:
dnf module list php
= вывод команды =
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64 1.6 MB/s | 2.0 MB 00:01
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
Подсказка: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Из вывода выше видно что появилась возможность установить версии от 7.2 до 8.1 из реппозитрия Remi.
В выводе нет информации о возможности установить PHP версии 5.6, но сделать это можно по аналогии как мы будем устанавливать версии ниже. Достаточно указать код #dnf install php56 php56-php-fpm
Для чистоты эксперимента и наглядности установим две версии 7.4 и 8.1
В результате мы получим на сервере 3 разных версии php.
Установка версий PHP от Remi
Активируем репу php remi-7.4, для этого выполняем команды:
Обращаю особое внимание на указание именно php74 перед требуемыми пакетами. Только при таком названии пакетов установятся необходимые и не возникнет путаницы.
Сразу установим версию php 8.1 из репозитория Remi и выключим активную версию:
В случае если вы не хотите смотреть всю информацию можете использовать такой код файла info.php в котором выбрано отображение информации только о загруженных модулях:
<?php
// Показывать всю информацию, по умолчанию INFO_ALL
//phpinfo();
// Показывать информацию только о загруженных модулях.
phpinfo(INFO_MODULES);
?>
Конфигурации NGIN для сайтов
Создадим для для каждого сайта свои конфигурационные файлы:
Используя этот код можно использовать различные ресурсы с разными параметрами php использующими одну версию php.
Проверка работы
Для проверки нам необходимо или прописать для каждого тестируемого ресурса DNS или на компьютере с которого производим проверку внести необходимые правки. В нашем случае система с которой проводится проверка работает на базе Linux и там необходимо внести следующие правки:
vim /etc/hosts
= необходимые добавления =
192.168.0.206 php72.loc
192.168.0.206 php74.loc
192.168.0.206 php81.loc
Для проверки необходимо в строке браузера вписать путь http://ДОМЕН/info.php.
Вот так выглядит вывод для разных сайтов:
Обновление версий PHP
Обновление версий происходит обычным механизмом обновления и последующим перезапуском необходимых сервисов.
Для нашего случая команды будут иметь такую последовательность:
Используя разные версии php на одном ресурсе можно спокойно перевести работу ресурса на новую версию и в случае проблем в работе оперативно вернутся на старую.
При использовании не сервере одной версии при переходе на другую версию необходимо было выполнять следующие действия:
Остановка php-fpm,
Вывод и удаление всех имеющихся пакетов php,
Удаление старого и активирование нового репозитория требуемой версии php,
Установка новой версии,
Проверка настрое из старой версии,
Запуск php-fpm и проверка сервиса.
Если ресурс рабочий выполнять все действия приходится оперативно и очень аккуратно для минимизирования простоя в работе ресурса.
Заключение
Данный вариант работы с разными версиями меня вполне устраивает и не вызывает проблем. В статье я специально сделал установку версии как с базовых репозиториев так и с репозитория Remi. На практике использовать базовый репозиторий не удобно, так как не удобно просматривать какие именно пакеты установлены в базовой версии. Запрос # rpm -qa | grep php выведет все имеющиеся версии.
Рекомендую использовать версии PHP от Remi это удобно и вызывает меньше путаницы.
В любом случае какие версии использовать и с какими параметрами использовать необходимо смотреть в каждом конкретном случае. Нормальные разработчики ресурсов всегда указывают какие необходимо использовать версии php и с какими параметрами.
Рассмотрим установку Rocky Linux 8 и последующую настройку исходя из практики использования этой операционной системы. Данная система для меня является основной для использования на серверах. Стабильность работы гарантированна. Поддержка до 2029 года.
Введение
В данной статье собраны все основные моменты базовой настройки сервера Rocky Linux 8 которые я использую на практике. Rocky Linux это полностью бинарно совместимый дистрибутив с RHEL.
Собирается дистрибутив силами сообщества и Rocky Enterprise Software Foundation. Развитием системы занимается Gregory Kurtzer, являющийся автором Centos. Лично я отдаю предпочтение именно Rocky Linux, потому что организация вокруг него строится только для развития самой системы.
К сожалению дальнейшее стабильное использование CentOS стало не возможно. Версия CentOS Stream конечно имеет более новые версии, но при использовании я стал получать неожиданные сюрпризы которых на стабильной ветке раньше не было.
Установка Rocky Linux 8
Создания USB носителя для установки
Существует множество программ для записи iso образа на устройство. Например, у меня два варианта для создания носителя для установки:
Rufus — использую эту программа для создание загрузочных USB-дисков в системе Windows;
ROSA ImageWriter — использую эту программу для любой системы Linux.
Варианты установки
Рассмотрим два самых популярных варианта установки Rocky Linux 8.
Образы iso Rocky Linux 8
Образы можно скачать c официального сайта по ссылке Download Rocky Linux. Существует три варианта:
Rocky-8.4-x86_64-boot.iso — загрузочный образ 755M;
Rocky-8.4-x86_64-minimal.iso — минимальный образ 2G;
Rocky-8.4-x86_64-dvd1.iso — полный образ 9.9G.
Какой вариант использовать решать вам. Например, мне нравится устанавливать загрузочный образ и дальше настраивать руками, так и опыт приходит и понимаешь как что работает.
Минимальный образ не такой уж и маленький, но радует что есть загрузочный при установке с которого надо только руками внести требуемый репозиторий и выбрать нужные параметры установки.
Указывать надо путь к той папке, где лежит каталог repodata http://download.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/
В выборе программ выбираем базовое окружение «Минимальная установка» а в дополнительных параметрах «Гостевые агенты» и «Стандарт».
Шаблоны
Шаблоны используются как правило для установки на VDS и предоставляются компаниями предоставляющие такие услуги. Удобно, но тем не менее я пару раз попадал в дурацкие ситуации.
Вот моменты почему я советую использовать установку на VDS систем с iso образа:
Разбивка диска порой не учитывает конфигурацию тарифа или требований вашей системы — например, на одном хостинге при 2 G оперативной памяти был создал SWAP раздел в 512 М в результате пришлось переустанавливать систему дабы не терять место на и так небольшом диске;
Локализация как правило Английская — мне приятней работать на своем родном языке хотя и на английском если надо всё настрою;
Присутствие в шаблоне каких-то изменений отличающихся от стандартных минимальных параметров установки — порой не понимаешь откуда взялись какие то настройки которых раньше не видел. Кроме того, можно потратить кучу времени не понимая почему не работает то что всегда работало как часы. В итоге выясняется что в шаблоне установки нет пакета который всегда ставился в стандартном минимальном образе.
Все компании предоставляющие услуги VDS могут предоставить возможность установки системы с ISO образа системы. При установке надо правильно указать сетевые параметры исходя из предоставленных сетевых параметров настроек выбранного тарифа!
Разбивка диска для установки
Вариантов разбивки диска для Rocky Linux 8 может быть множество исходя из пожеланий и предпочтений. Например, мне нравиться придерживаться таких параметров:
Размер диска под систему Linux 50 G — этого мне хватает с запасом;
Создаю раздел boot размером 1 G — так я гарантирую что при заполнении диска система загрузится однозначно;
Создаю SWAP — согласно требованиям системы.
Можно выносить логи и кэш в отдельные разделы, но это лишняя трата времени. Лучше всегда выполнять мониторинг размера диска и в случае проблем оперативно принять необходимые меры. Прежде всего, так пропадёт головная боль о том какой размер указывать разделам ( вариант с перераспределением очень сюрпризная тема).
SWAP
Тема организации SWAP на сервере очень важная и поэтому я описал все основные моменты использования в статье SWAP для Linux
Настройка Rocky Linux 8
Пакетный менеджер DNF
Используется новый менеджер пакетов который поддерживает модульный формат пакетов.
По прежнему можно вносить команды yum вместо dnf и всё будет работать. Для yum сделан алиас для запуска dnf.
Для вывода всей информации о том какие команды можно использовать достаточно внести в консоли команду dnf и увидеть полный список возможностей.
dnf
= вывод части команды =
usage: dnf [options] COMMAND
Список основных команд:
alias List or create command aliases
autoremove удалить все ненужные пакеты, первоначально установленные по зависимостям
check поиск проблем в packagedb
check-update проверить доступные обновления для пакетов
clean удалить кэшированные данные
deplist Показывать список зависимостей пакета и какие пакеты их предоставляют
distro-sync обновить установленные пакеты до последних имеющихся версий
downgrade Откат к предыдущей версии пакета
group показать или использовать информацию о группах
help отобразить подсказку по использованию
history отобразить (или использовать) историю транзакций
info отобразить информацию о пакете или группе пакетов
install установка пакета(ов) в систему
list вывести список пакетов или групп пакетов
makecache создание кэша метаданных
mark отметить или снять отметку пользовательской установки с установленных пакетов.
module Взаимодействие с репозиторием Modules.
provides найти пакет по заданному значению
reinstall переустановка пакета
remove удалить пакет или пакеты из системы
repolist отобразить настроенные репозитории ПО
repoquery поиск пакетов по ключевому слову
repository-packages выполнить команды над всеми пакетами заданного репозитория
search поиск информации о пакете по заданной строке
shell запустить интерактивную оболочку DNF
swap запустить интерактивный вариант dnf для удаления и установки одной спецификации
updateinfo показать рекомендации к пакетам
upgrade обновить пакет или пакеты в системе
upgrade-minimal обновление, но только «новейших» пакетов, которые исправляют проблему в вашей системе
Информация об установленной системе
Узнать какая система установлена на сервере можно следующими командами:
uname -a
= вывод команды =
Linux localhost.localdomain 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Wed Sep 15 19:12:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
= вывод команды =
Rocky Linux release 8.4 (Green Obsidian)
Этой информации достаточно для понимания с какой системой предстоит работать.
Отключение SELinux
Отключаем SELinux. Его использование и настройка в системе Rocky Linux 8 отдельный разговор.
vi /etc/sysconfig/selinux
= меняем значение =
SELINUX=disabled
Перезагрузим для применения изменений. После перезагрузки проверяем статус:
sestatus
= вывод команды =
SELinux status: disabled
Надо иметь четкое понимание что SELinux система требующая хорошего понимания в том как она работает и как настраивать. Надо или отключить сразу или потратить время на изучение как она работает.
Добавление репозиториев
Для инсталляции различного софта необходимо подключить репозитории в Rocky Linux 8. Со временем пришло понимание того что относится к добавляемым репозиториям надо очень внимательно, чтобы в последствии не возникало проблем при обслуживании.
Всегда подключаю самый популярный репозиторий Epel (Extra Packages for Enterprise Linux). Epel хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
dnf -y install epel-release
Старюсь подключать репозитории которые поддерживают сами разработчики программ. Например, такие как Nginx, Zabbix, MariaDB.
Обновление Rocky Linux 8
Обновление системы очень важный момент и следует относится к нему очень внимательно. Всегда проще найти проблему когда проходит немного обновлений.
Прежде всего, всегда перед обновлениями делайте резервные копии!
Перед выполнением настройки лучше выполнить полное обновление системы:
dnf update
Автоматическое обновление системы
Для безопасности сервера его необходимо своевременно обновлять. Вариантов обновления Rocky Linux 8 несколько и это тема отдельного длинного разговора.
Например, получать сообщения на почту об появившихся обновлениях и уже на основании этого принимать решение о необходимости обновления — для меня лучший вариант.
При моих пожеланиях мне подойдёт утилита dnf-automatic. Ставится она из базового репозитория командой:
dnf install dnf-automatic
Управлением запуском по расписанию занимается systemd со своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:
systemctl list-timers *dnf-*
= вывод команды =
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2021-10-24 14:36:56 MSK 5min left n/a n/a dnf-makecache.timer dnf-makecache.service
Посмотрим настройки этого таймера выполнив команду:
cat /etc/systemd/system/multi-user.target.wants/dnf-makecache.timer
= вывод команды =
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
Unit=dnf-makecache.service
[Install]
WantedBy=multi-user.target
Если заданий нет, то можно добавить таймер выполнив команду:
systemctl enable --now dnf-automatic.timer
Настройка этого таймера будет по пути — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.
Настройка системы автоматического обновления находится по пути /etc/dnf/automatic.conf. По-умолчанию он только скачивает обновления, и отправляет сообщение на почту root.
Самый важный параметр это update_type — которой будет говорить системе какие выполнять обновления. Доступно несколько вариантов:
default — полное обновление;
security — только обновление безопасности.
Мой вариант настройки выглядит следующим образом:
vim /etc/dnf/automatic.conf
= часть вывода с пояснениями
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
Согласно этих параметров будут скачаны все обновления безопасности и будет отправлено сообщение пользователю root.
В настройках можно настроить отправку почты на другой почтовый ящик, но мне больше нравится вариант когда все сообщения пользователя root пересылаются на мой почтовый ящик.
Популярные и полезные утилиты
Установим в начале основные популярные утилиты которые обычно требуются в работе.
dnf -y install net-tools bind-utils htop atop iftop lsof wget bzip2 traceroute gdisk yum-utils vim mc tmux
net-tools bind-utils — сетевые утилиты после установки которых будут работать команды # ifconfig и # nslookup,
htop atop — два интересных диспетчера задач,
iftop — показывает в режиме реального времени загрузку сетевого интерфейса,
lsof — вывода информации о том, какие файлы используются теми или иными процессами,
wget — неинтерактивная консольная программа для загрузки файлов по сети,
bzip2 — утилита командной строки с открытым исходным кодом для сжатия данных,
traceroute — утилита предназначенная для определения маршрутов следования данных в сетях TCP/IP,
gdisk — умеет работать с GPT-дисками разработано по подобию fdisk,
yum-utils — — это набор утилит для управления репозиторием, установки и отладки пакетов, поиска пакетов и много другого.
Про vim, mc и tmux расскажу ниже.
Настройка времени
Определим текущее время на сервере:
date
= вывод команды =
Ср ноя 14 12:17:34 CET 2021
Как видим временная зона не настроена.
Выполним необходимую настройку временной зоны 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 2021
Можно использовать одну команду зная точно что эта временная зона присутствует в настройках:
timedatectl set-timezone Europe/Moscow
Синхронизация времени
В Rocky Linux 8 по-умолчанию используется утилита для синхронизации времени chrony. Если у вас её нет, то устанавливайте:
dnf install chrony
Запускаем chrony и добавляем в автозагрузку:
systemctl enable --now 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 Ср 2021-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
Сетевые параметры
При установке Rocky Linux 8 уделяю особое внимание настройки сетевых параметров. Кроме того, на странице настройки сетевых параметров указывается название хоста.
Всегда отключаю ipv6 так как в большинстве случаев он не используется а вот проблемы при работе с системой может создать.
Для управления сетевыми настройками в Rocky Linux 8 после установки можно воспользоваться графической утилитой nmtui:
nmtui
= вывод команды =
-bash: nmtui: команда не найдена
= команда установки необходимого пакета для работы nmtui =
yum install NetworkManager-tui
В Rocky Linux 8, сеть управляется только через Network Manager. Сетевые настройки лучше выполнять с помощью утилиты nmtui.
Руками вся настройка сводится к редактированию файлов в паке /etc/sysconfig/network-scripts/. Для определения интерфейсов необходимо предварительно выполнить команду ip addr которая покажет название всех имеющихся интерфейсов.
Например, мой файл настройки сетевого интерфейса ens18:
Для применения изменений необходимо перезагрузить Network Manager выполнив команду:
= или командой =
systemctl restart NetworkManager
= предварительно поняв название необходимого сервиса =
systemctl list-units | grep -i network
Смена пароля root
Смена пароля производится командой:
passwd
= вывод команды =
Изменяется пароль пользователя root.
Новый пароль :
Повторите ввод нового пароля :
passwd: все данные аутентификации успешно обновлены.
Брандмауэр FirewallD
По умолчанию в системе Rocky Linux 8 используется брандмауэр FirewallD.
Ниже я выполню необходимые действия не описывая всё подробно.
Вывод информации об активных зонах:
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: cockpit ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Для безопасности порт ssh лучше поменять на нестандартный.
Добавим разрешение подключаться по этому порту:
firewall-cmd --permanent --zone=public --add-port=35555/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: cockpit ssh
ports: 35555/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Только после настройки ssh для работы по новому порту удаляйте сервис ssh из FirewallD! Иначе в случае ошибки настройки можете потерять доступ к серверу.
Смена порта SSH
Укажем порт в настройках ssh открыв конфигурационный файл командой:
vi /etc/ssh/sshd_config
= необходимые изменения =
Раскоментируем строку Port 22 и заменим на наш 35555
Перезапускаем сервис ssh командой:
systemctl restart sshd
Проверяем какой порт слушает sshd (для работы нужен установленный пакет net-tools):
Подключение производится с указанием необходимого порта командой:
ssh -p 35555 root@193.124.180.195
Авторизация SSH по ключу
Вводить каждый раз пароль не удобно да и не помешает добавить безопасности.
После настройки можно отключить в параметрах ssh авторизацию по паролю, но иногда подключение по паролю просто необходимо. Обычно я создаю 16 злачный пароль и меняю его если давал временный доступ специалистам любого уровня и моего доверия. Безопасность лишней не бывает!
Установим самый популярный файловых менеджеров с текстовым интерфейсом командой если не установили ранее:
dnf -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
По умолчанию в системе работает редактор vim и это вполне оправдано.
Обоснование использования редактора VIM и как с ним работать можно в статье Vim текстовый редактор
В случае отсутствия редактора его можно установить без вопросов командой:
dnf -y install vim
Отображение приглашения в консоли bash
При появлении большого количества серверов на обслуживании я сразу столкнулся с плохой информативностью о том с каким я сервером работаю.
Стандартный вариант отображения приветствия после установки Rocky Linux 8:
[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\] '
Для применения подобных настроек для всех пользователей с обычными правами сделаем приглашение зеленым. Добавим необходимые параметры в имеющийся файл или создадим новый и добавим туда необходимые параметры:
Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть.
По умолчанию вывод команды history в консоли нам покажет:
history
= вывод команды =
1 yum update
2 reboot
3 htop
4 df -h
Как видим вывод не информативный. Кроме того, покажет только последние 1000 команд.
Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:
history | grep yum
Изменим эту ситуацию добавив в файл .bashrc находящийся в папке пользователя необходимые параметры:
vim .bashrc
= необходимые дополнения =
# history
export HISTSIZE=50000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w"
Расшифруем параметры:
Первый параметр увеличивает размер файла до 50000 строк;
Второй параметр указывает, что необходимо сохранять дату и время выполнения команды;
Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю;
В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется.
Для применения изменений необходимо выполнить команду:
Можно применить эту настройку для всех пользователей указав параметр в файле /etc/profile.d/bash_completion.sh.
В таком варианте получаем гораздо большую информативность.
Установка Tmux
Установим пожалуй один из самых необходимых и удобных программ для удаленной работы с сервером. Tmux терминальный оконный менеджер при использовании дает возможность при обрыве связи с сервером по ssh не терять информацию о выполняемых действиях.
Cockpit: Веб-интерфейс управления сервером Rocky Linux 8
Возможность видеть наглядно все основные параметры системы и иметь возможность ими управлять пожалуй самая приятна новость которая меня порадовала в выпуске Rocky Linux 8.
При авторизации по ssh вы увидите следующее сообщение:
Activate the web console with: systemctl enable --now cockpit.socket
Достаточно выполнить команду в консоли systemctl enable —now cockpit.socket и при следующей авторизации вы увидите следующее сообщение:
Web console: https://localhost:9090/ or https://192.168.0.23:9090/
Порт 9090 должен быть открыт. Работающий по умолчанию сервис cockpit в FirewallD открывает этот порт.
При вводе в браузере https://192.168.0.23:9090 увидите приглашение ввести данные авторизации.
После входа вы увидите главную страницу с выводом графиков нагрузки основных параметров сервера.
Далеко не все конечно можно видеть и настраивать в этой панели но определенное удобство есть явно. Пользоваться панелью просто, понятно и не вызывает никаких сюрпризов, так что описывать по большому счету нечего. Попробуйте и вы сами всё поймете.
Единственное что я делаю это то что не держу её включенной. Убираю из автозагрузки в самой панели управления или командой:
systemctl disable cockpit.socket
В случае необходимости мне не сложно включить при необходимости и отключить после использования следующими командами:
Удаленное управление компьютером без ограничений по времени и скорости сеанса. Бесплатная версия как для физических, так и для юридических лиц. Программа LiteManager это идеальное решение для удаленного управления компьютерами на разных ОС.
Введение
Удаленное управление в повседневных буднях системного администратора обыденная вещь. О том как я добился простоты и удобства в этом вопросе я расскажу в этой статье.
На практике я перепробовал все возможные бесплатные варианты удаленного управления компьютерами без использования IP адреса, но все они таят в себе сюрпризы.
Основные моменты которые меня не устраивали в бесплатных версиях:
Ограничение сеанса минутами;
Ограничение скорости сеанса;
Легальность использования в организациях;
Необходимость одинаковых версий на компьютерах.
Для себя я нашел программу LiteManager которая удовлетворила все мои требования и дает возможность комфортно и удобно работать с удаленными компьютерами.
Главные для меня моменты благодаря которым я выбрал этот продукт:
Работает на всех операционных системах, Windows, Linux, Mac OS, Android;
Подключатся по ID через свой сервер NoIP;
Легальное использование в организациях;
Программа не требует установки на компьютер.
Обязательно посетите сайт разработчика. Все возможности хорошо и наглядно задокументированы. В случае вопросов вы можете посетить их форум или написать разработчику напрямую. У программы много возможностей которые возможно вас заинтересуют и подтолкнут к выбору именно этой программы. Например, есть режим работы для удаленного обучения.
Режимы работы LiteManager
Удаленное управление может требовать разных вариантов режимов работы, но обычно их используется не много.
Основные режимы которые мной используются:
Режим просмотра — вы видите что делает пользователь но не можете ничего сделать;
Режим полного управления — полный контроль над удаленным компьютером;
Передача файлов — возможность обмениваться файлами с удаленным компьютером.
На практике мне обычно хватает этих трех режимов. Тем не менее, периодически пользуюсь и другими режимами. При покупке платной версии добавляются механизмы которые востребованы при обслуживании большого парка машин.
Слева вы видите группы компьютеров которые вы создадите по своему усмотрению, посередине компьютеры для подключения а слева типы подключений. Вы можете смотреть имеющиеся узлы в режиме списка или создать карту.
В бесплатной версии имеется ограничение на 30 компьютеров, но в программе есть замечательная возможность импорта и экспорта как всех узлов так и выбранных.
Удаленное управление для сотрудников
В случае если необходимо настроить сотруднику удаленное управление компьютером на работе достаточно выполнить несколько простых действий.
Вот перечень необходимых действий:
Добавить на компьютере пользователя профиль для подключения с необходимыми параметрами;
Экспортировать нужное подключение;
Передать работнику LiteManager Viewer портативную версию (работает без установки) и сказать как импортировать подключение.
Вот таким простым способом можно настроить работнику удаленную работу с его компьютером на работе.
Необходимо учитывать при удаленной работе разрешение экрана.
При варианте когда разрешение монитора на компьютере к которому подключаетесь больше достаточно на нем снизить разрешение до такого как на том с которого подключаетесь и работать станет комфортно.
Варианты доступа к компьютерам
На практике мне требуется организовать постоянный доступ с возможностью управления в любое время без участия пользователя или вариант когда пользователь запускает программу и сообщает мне данные для подключения.
Настройки гибкие и позволяют создавать пользователей для подключения с разными правами. При желании можно скрыть от глаз пользователя работу программы.
Доступ без разрешения
При данном виде управления я устанавливаю программу, добавляю её в автозагрузку, блокирую паролем настройки программы. Произвожу подключение в любой необходимый мне момент для решения текущих задач с компьютером.
Доступ с разрешением
Когда оказываешь разовые услуги и нужно максимально быстро и просто подключится к клиенту необходимо иметь простой и понятный механизм.
Вариант когда человек просто запускает файл и передает вам параметры для подключения (желательно только цифры) самый удобный и оптимальный. Для такой простоты необходимо развернуть свой NoIP сервер и создать свою версию программы с нужными параметрами. О том как это сделать вы узнаете читая статью дальше.
Статья прям пугающая и по ощущениям явно написана на заказ. По сути уязвимость была только в случае если вы будете подключаться через сторонний NoIP. При использовании своего NoIP уязвимости нет.
Мало кто любит читать комментарии к статьям, хотя там бывает весьма любопытная информация.
+2 Программа обновлена до версии 4.8.3 в процесс авторизации внесены изменения, с учетом данного вида угроз.
Спасибо Всем, извините за неудобства
Сервис работает под управлением операционной системы Windows, но думаю что разработчик сделает версию и под Linux. Кстати, использую Wine можно запускать и на Linux, но стабильность работы я не проверял.
Скачиваем с сайта разработчика последнюю версию LiteManager Windows. В полной версии будет папка NOIP (ID router) где находится то что нам надо.
После запуска вы увидите станицу на которой показан статус и варианты запуска программы. В моем случае я запускаю её вручную:
Не забудьте открыть порт указанный в основных настройках 5651. При желании можете поменять на любой другой . Главное при дальнейших настройках учитывайте это.
Переходим на страницу «Дополнительно» в которой необходимо выбрать параметр который обеспечит совмещенный режим работы для разных лицензий:
Переходим на стартовую страницу и запускаем сервис. В результате должно быть так:
Обязательно переходим на страницу «Информация» и убеждаемся что тип лицензии сервера бесплатный:
После того как будет подключен по ID вы увидите на странице статистики информацию:
Есть и другие полезные возможности которые в последствии вы сможете применить. Для начала использования сервиса этих настроек хватит.
Настройка подключения по ID
Используя конструктор QuickSupport можно создать свою версию программы которая будет производить соединение с необходимыми вам параметрами и выводом нужной информации.
В моем случае соединение проходит через мой NoIP сервер и как следствие все работает быстро и без сбоев.
Можно использовать и общедоступные NoIP но работают они медленно и нестабильно.
При создании есть несколько нюансов о которых я расскажу.
Запустить конструктор необходимо вот так:
Базовая информация
При данном варианте достаточно указать IP адрес вашего NoIP и выбрать запись настроек в имени файла:
После нажатия «Сохранить QuickSupport пакет» создастся необходимый файл.
Свой логотип и информация
Данный вариант более привлекательный, так как позволяет изменить текстовую информацию и вставить свой логотип. Все требования для графики указанны.
В результате вы получите папку со всеми необходимыми файлами.
В моем варианте клиент видит такое окно:
При создании пакета в обоих вариантах менять названия файлов нельзя.
Для удобства я создал само распаковывающийся архив который помещает необходимые файлы в системную папку с программами а на рабочем столе создает необходимый ярлык. Кроме того, я записал видео со всеми часто встречающиеся проблемами у пользователей связанные с запуском программы.
Пример подключения по ID
В заключение, покажу как выглядит весь механизм подключения для удаленного управления компьютером.
Клиент запускает программу для доступа. Вначале выйдет сообщение с 5 секундным таймером про лицензию:
В случае успеха видим состояние соединения и параметры для подключения:
Действия на стороне клиента закончены. Переходим к непосредственному подключению.
Запускаем соединение по ID:
Нажимаем «Настройки» и указываем необходимый NoIP сервер:
Вводим ID и после подключения видим окно в которое необходимо указать пароль:
После введения пароля вы увидите созданное подключение:
Выбираем слева режим подключения и подключаемся для удаленного управления:
На картинке указано изображение в режиме масштабирования.
Заключение
Пользуюсь программой очень давно и вижу как постоянно добавляются новые полезные возможности. Сбоев в работе за все время я не встречал.
Огромное спасибо разработчикам давшим возможность пользоваться программой в коммерческих целях и позволили создавать версию для удаленной поддержки со своей информацией.
Уважаю и ценю таких разработчиков. Они ведут открытую и понятную политику своих продуктов без использования маркетинговых ухищрений. Может из за этого они получают меньше денег, но мне кажется я не один для кого деньги пахнут.
Рано или поздно всегда приходиться делать изменение размера диска или раздела Linux. Варианты как это сделать существуют разные и все зависит от конкретного случая. Постарался найти вариант который подходит для разных случаев.
Введение
Рано или поздно всем необходимо произвести изменение размера диска, раздела, или вообще перестроить разбивку диска по новому.
Вариантов как это сделать множество, но мне кажется я нашел идеальный и 100% рабочий вариант.
Основной принцип состоит из следующих моментов:
Подключаем дополнительный диск;
Загружаем систему с Live-образа;
Переносим информацию на дополнительный диск;
Создаем, изменяем разделы на требуемом диске;
Возвращаем данные в случае форматирования;
Обновляем загрузчик системы и вносим правки в файл системы отвечающий за подключение разделов диска в систему.
Это очень грубая общая схема не отражающая всех нюансов, но дающая понять суть процесса.
В моем случае необходимо было поменять размер диска с преобразованием системы XFS в EXT4 на виртуальной машине работающей в Proxmox.
Меня лично необходимость уменьшить раздел возникла по причине того что в системе Proxmox появился диск SSD, но вот перенести туда нужную машину я не мог по причине большого размера диска а не реально используемого пространства.
Подготовка
Обязательно перед выполнением работ сделайте резервные копии виртуальных машин или как минимум данных с них!
Все действия необходимо выполнять только на отключенных разделах.
Забегая вперед скажу, что для уменьшения размера диска мы будем использовать возможности типа файлов raw и для этого в системе Proxmox диски должны находится в файловом варианте.
В моем случае делались изменения размеров на корневом разделе а значит необходимо запустить систему с Live-образа. Для этих целей у меня сделана собственная сборка дистрибутива Calculate Linux где установлены все необходимые мне утилиты. Можно использовать любой удобный вам Live-образ системы Linux.
Перед началом работ выполните команду которая покажет все реально смонтированные диски в работающей системе:
Сохраните эти данные, так как в последствии нам с ними будет проще работать.
Загружаем систему используя Live-образ.
Работать в консоли самого Proxmox не удобно, так как нет возможности копировать команды. Запускаю ssh сервер командой:
/etc/init.d/sshd start
Подключаюсь по ssh используя данные авторизации live-образа.
Все подготовительные действия сделаны и переходим к непосредственной работе с разделами диска.
В примере имеется ввиду что раздел /boot выведен на отдельный раздел и мы его не трогаем. Всегда при создании выношу раздел boot на отдельный раздел и не раз эта схема упрощала мне жизнь при работе или проблемах с диском.
Изменение размера диска без форматирования
В случае простого изменения размеров у разделов все просто.
К сожалению раздел XFS уменьшить нельзя а увеличить можно.
Запускаем программу Gparted и выполняем необходимые действия с имеющимися разделами. Уменьшаем, перераспределяем или отключаем какой то раздел и переносим в корень. Например, в моем случае раздел /var/sevo44 находился на отдельном разделе а мне захотелось перенести его в корневой раздел.
Самое главное это перед тем как удалять раздел и переносить его в общий не забудьте сохранить данные с него.
Если выполнялись действия только по изменению размера имеющихся разделов делать больше ничего не надо. После перезагрузки система успешно запустится с новым размером разделов.
Изменение размера диска с форматированием
В моем случае файловая система была XFS и для уменьшения этого раздела мне необходимо было его переформатировать.
Определяем имеющиеся диски в системе выполнив команду:
fdisk -l
= часть вывода команды с пояснениями =
Диск /dev/sda: 100 GiB, 107374182400 байт, 209715200 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x85300bf3
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux/dev/sda2 2099200 23070719 20971520 10G 83 Linux/dev/sda3 23070720 209715199 186644480 89G 83 Linux
Диск /dev/sdb: 32 GiB, 34359738368 байт, 67108864 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Из вывода видно что sda рабочий диск а sdb подключенный.
Создаем раздел из всего диска sdb и форматируем его в ext4:
cfdisk -z /dev/sdb
mkfs.ext4 /dev/sdb1
Создаем две папки куда будем монтировать диски:
mkdir /mnt/sda && mkdir /mnt/sdb
Монтируем раздел sdb1 в необходимую папку:
mount /dev/sdb1 /mnt/sdb
C диском sda немного посложнее. В нашем случае разделы были подключены следующим образом:
df -h
= часть вывода с работающей системы =
/dev/sda2 10G 6,9G 3,2G 69% /
/dev/sda3 89G 11G 79G 12% /var/sevo44
/dev/sda1 976M 179M 731M 20% /boot
Раздел sda1 надо оставить как есть а вот sda3 убрать переместив все данные в корневой раздел sda2.
Монтируем вначале главный раздел а затем вложенный:
mount /dev/sda2 /mnt/sda
mount /dev/sda3 /mnt/sda/var/sevo44
Переносим теперь все данные с папки /mnt/sda в папку /mnt/sdb
Переносить необходимо в консольном файловом менеджере Midnight Commander (mc), так как она при переносе сохранит все права на файлы и перенесёт все один в один.
Есть и другие способы переноса в консоли, но вариант с Midnight Commander проще и наглядней.
После переноса проверяем правильность и только после этого отключаем разделы диска sda строго в таком порядке:
umount /mnt/sda/var/sevo44
umount /mnt/sda
Запускаем программу Gparted с Live-образа и делаем с разделами что нам необходимо. В моем случае получилось следующее:
Удалил раздел sda3 а раздел sda2 увеличил и отформатировали в формат ext4. Уменьшили диск больше чем на 50 Гиб.
Можно высчитывать и обрезать раздел ровно для последующего уменьшения, но мне проще потом его расширить подключившись с Live-образа.
Монтируем sda2 в папку /mnt/sda и копируем обратно в программе mc все данные с папки /mnt/sdb в /mnt/sda:
mount /dev/sda2 /mnt/sda
После копирования и проверки отключаем sdb1:
umount /mnt/sdb
Теперь нам необходимо отредактировать файл /etc/fstab который отвечает за монтирование разделов.
Определим какие uuid у разделов диска sda (при форматирование раздела uuid меняется на новый):
После перезагрузки системы CentOS 8 вы увидите такое сообщение:
Система говорит что она не видит корневой диск с таким uuid.
В случае если вы делали изменения раздела /boot вы увидите другую ошибку и способ устранения этой ошибки выходит за рамки данной статьи.
Решается эта проблема в два шага:
Загрузится указав правильный uuid;
В загрузившейся системе обновить Grub2.
Запускаем систему и как только увидите варианты загрузки нажимайте клавишу е:
В результате вы увидите место где необходимо сменить информацию:
Меняем на наш новый uuid 611171b8-5da5-460c-a6da-7bf8d42f2128 и нажимаем сочетание клавиш Ctrl и X.
Система загрузится, но значения загрузчика не поменяются. Выполним команду которая обновит grub2 в системе CentOS 8:
grub2-mkconfig -o /boot/grub2/grub.cfg
= вывод команды =
Generating grub configuration file ...
Found CentOS Linux 8 (Core) on /dev/sdb1
done
Все успешно обновилось, но я не отключил дополнительный диск и он добавился в меню загрузчика. На работу системы это никак не повлияет, но лучше не забывать отключать дополнительный диск после того как он больше не нужен.
Диск мы уменьшили и добились работоспособности системы теперь осталось выполнить последнее действие по уменьшению файла raw.
Преобразование раздела утилитой fstransform
Существует более простой способ, но как он работает на практике точно сказать не могу. Для меня описанный вариант выше более надежен, так как я не завишу от правильности действий этой утилиты.
Утилита называется fstransform и способна она преобразовывать в разные форматы.
Для преобразования корневого раздела необходимо загрузится с Live-образа установить утилиту и преобразовать нужный раздел.
Для Live-образа системы Debian (консольный вариант) нам вначале необходимо получить права root:
sudo su
Обновить список пакетов и установить:
apt update
apt install fstransform
Определить нужный раздел для преобразования командой # fdisk -l и запустить необходимую команду:
fstransform /dev/sda2 ext4
Раздел преобразуется с изменением uuid и дальше необходимо выполнить действия аналогично описанным выше.
Возможно если у вас виртуальная машина работает на LVM существует способ более простой и не надо переносить образ в файловый вариант, но мне не захотелось выполнять более сложные действия с системой LVM.
Воспользуемся командой которая может произвести изменение диска обрезав образ диска raw с конца на нужный размер.
В нашем случае номер виртуальной машины был 112 и нам необходимо уменьшить образ на 50 G:
qemu-img resize /var/lib/vz/images/112/vm-112-disk-0.raw -50G
= вывод команды =
WARNING: Image format was not specified for '/var/lib/vz/images/112/vm-112-disk-0.raw' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
qemu-img: warning: Shrinking an image will delete all data beyond the shrunken image's end. Before performing such an operation, make sure there is no important data there.
qemu-img: warning: Using the --shrink option will suppress this message. Note that future versions of qemu-img may refuse to shrink images without this option.
Image resized.
Как видим образ успешно изменён.
Осталось загрузится c Live-образа и в программе Gparted задействовать все свободное место от диска.
В системе Proxmox после изменения размера диска в разделе вы увидите уже новые параметры а вот в свойствах машины будет стоять старое значение. Возможно необходимо выполнить какое то действие, но в моем случае я переношу диск на раздел LVM и после этого везде будет показываться правильное значение.
Вывод
Как видно из статьи нюансы и главное внимательность при работе с разделами главный залог успеха. В любом случае всегда необходимо делать резервную копию выполняя изменение размера диска.
При создании новой системы всегда в голове возникает мысль как лучше разбить и какое использовать место, но попасть в нужные параметры удаётся не всегда. Зная как производить изменение разделов можно больше не ломать голову а делать все стандартным проверенным способом и в случае необходимости все исправить.
Версии PHP от Remi являются самыми популярными и стабильными при использовании на Web серверах. Расскажу основные моменты работы с репозиторием. Рассмотрим как сменить версию PHP. Один из самых популярных репозиториев для CentOS.
Введение
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционной системы CentOS. Познакомится с новостями репозитория можно на блоге Remi Collet.
В статье будет рассказано про использование репозитория на системах CentOS 7 и 8.
Les RPM de Remi repository поддерживает последние версии MySQL и PHP (бэкпорты федоровских rpm). Пакеты этого репозитория необходимо использовать с осторожностью, так как они заменяют базовые пакеты.
В другой статье вы можете узнать как использовать репозиторий WebtaticEL для CentOS 7. В нем так же используются последние версии PHP, но к сожалению там нет многих удобств которые есть у Remi. Например, используя репозиторий Remi можно всегда иметь последнюю версию phpMyAdmin.
Предварительная подготовка
Перед началом использования репозитория Remi необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel в CetnOS 7 производится командой:
yum install epel-release
Установка Epel в CetnOS 8 производится командой:
dnf install epel-release
Подключение репозитория от Remi
для CentOS 7
Для установки репозитория Remi в CentOS 7 достаточно выполнить команду:
Посмотреть активные репозитории можно следующей командой:
yum repolist
= вывод части команды =
Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.corbina.net
* epel: mirror.logol.ru
* extras: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: mirror.corbina.net
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 3 144
По умолчанию установлен репозиторий remi-safe который имеет только дополнительные пакеты для базового хранилища и коллекций программного обеспечения. Например, при попытке установить phpMyAdmin будет установлена старая версии. Для установки последних версий надо активировать репозиторий remi.
Посмотрим репозитории что у нас есть в системе выполнив команду:
GLPI — это программный инструмент ITSM, который помогает вам легко планировать и управлять изменениями в ИТ структуре предприятия, эффективно решать возникающие проблемы используя систему заявок, так же позволяет вам получить контроль над ИТ-бюджетом и расходами вашей компании. В будущем я расскажу как работать с этим замечательным проектом. Кроме того, то что Remi Collet поддерживает репозиторий меня очень радует.
Перед работой с репозиториями Remi необходимо установите пакет yum-utils, что бы не получать ошибку «bash: yum-config-manager: command not found». Установим yum-utils выполнив необходимую команду:
yum install yum-utils
Сейчас у нас активирован remi-safe. Для активации remi надо вначале отключить remi-safe а потом активировать remi выполнив команды:
Перед тем как определится какую версию PHP использовать я всегда смотрю на сайте Supported Versions PHP.
В списке имеющихся репозиториев нет версии php5.6, так как он входит в состав remi.repo. Для установки достаточно в команде указать remi-php56.
для CentOS 8
В 8 версии CentOS используется версия php 7.2 которая уже может удовлетворять требования множества новых сайтов, но если вам нужны версии новее подключайте Remi.
Посмотрим список всех доступных вариантов установки php:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:41:10 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Из вывода выше видно что по умолчанию стоит базовая версия CentOS 7.2 и имена она будет установлена.
Установка версии PHP от Remi
для CentOS 7
Активируем репу remi-php72, для этого выполняем команду:
# yum-config-manager --enable remi-php72
Устанавливаем php7.2 выполнив команду:
yum install php72
Лучше указывать php72 и тогда пакеты будут установлены только из репозитория remi. Например, я всегда внимательно смотрю какая версия php будет установлена в списке устанавливаемых пакетов.
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Последняя проверка окончания срока действия метаданных: 1:53:36 назад, Пн 28 окт 2019 08:05:09.
Зависимости разрешены.
====================================================================================================
Пакет Архитектура Версия Репозиторий Размер
====================================================================================================
Enabling module streams:
httpd 2.4
php remi-7.2
Результат транзакции
====================================================================================================
Продолжить? [д/Н]: д
Выполнено!
Switching module streams does not alter installed packages (see 'module enable' in dnf(8) for details)
Убедимся что версия выбрана правильно:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:55:03 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 [e] common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Всё правильно.
Установим php remi-7.2 и все популярные модули следующей командой:
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Необходимая временная зона
date.timezone = "Europe/Moscow"
Настройка Php-fpm для Nginx
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
systemctl start php-fpm
systemctl enable php-fpm
=== Для CentOS 8 можно выполнить одну команду ===
systemctl enable --now php-fpm
Проверяем, запустился ли он.
systemctl status php-fpm
= вывод команды =
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-10-28 10:09:25 MSK; 1min 1s ago
Main PID: 463 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 11524)
Memory: 25.7M
CGroup: /system.slice/php-fpm.service
├─463 php-fpm: master process (/etc/php-fpm.conf)
├─464 php-fpm: pool www
├─465 php-fpm: pool www
├─466 php-fpm: pool www
├─467 php-fpm: pool www
└─468 php-fpm: pool www
окт 28 10:09:24 wp-lxc_pro-php7_sevo44_loc systemd[1]: Starting The PHP FastCGI Process Manager...
окт 28 10:09:25 wp-lxc_pro-php7_sevo44_loc systemd[1]: Started The PHP FastCGI Process Manager.
Все в порядке, сервис работает и находится в автозагрузке.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта созать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp.
В настройках nginx для сайта необходимо указать требуемый пул. Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location ~ \.php$
Обновление версий PHP от Remi
Схема обновления универсальна и подойдет как для всех версий CentOS. В примере ниже расмотрен вариант обновления для версии 7.
Обновление состоит из нескольких действий:
Остановка php-fpm,
Вывод и удаление всех имеющихся пакетов php,
Удаление старого и активирование нового репозитория требуемой версии php,
Установка новой версии,
Проверка настрое из старой версии,
Запуск php-fpm и проверка сервиса.
Выполним обновление PHP до версии 7.3 в системе CentOS 7.
Обязательно смотрим версию и репозиторий откуда будут ставится пакеты.
Осталось проверить файлы что выдала команда при удалении старой версии php:
предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave
предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave
В заключение, запустим сервис php-fpm и проверим статус:
systemctl start php-fpm
systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since Ср 2019-03-13 21:16:12 MSK; 7s ago
Main PID: 1392 (php-fpm)
Status: "Ready to handle connections"
CGroup: /lxc/php7-lxc/system.slice/php-fpm.service
├─1392 php-fpm: master process (/etc/php-fpm.conf)
├─1393 php-fpm: pool www
├─1394 php-fpm: pool www
├─1395 php-fpm: pool www
├─1396 php-fpm: pool www
└─1397 php-fpm: pool www
мар 13 21:16:11 php7-lxc-lemp.sevo44.loc systemd[1]: Starting The PHP FastCGI Process Manager...
мар 13 21:16:12 php7-lxc-lemp.sevo44.loc systemd[1]: Started The PHP FastCGI Process Manager.
Из вывода видно что сервис не стартует при загрузке. Добавим сервис в автозагрузку выполнив команду:
systemctl enable php-fpm
Вывод
В статье рассказано про основные моменты работы с репозиторием Remi Collet. Репозиторий активно обновляется и мой выбор остановился на использовании именно его при работе с PHP.
Рассмотрим установку системы CentOS 8 и последующую настройку исходя из практики использования этой операционной системы. Данная система для меня является основной для использования на серверах. Стабильность работы гарантированна. Поддержка до 2029 года.
Введение
В данной статье собраны все основные моменты базовой настройки сервера CentOS 8 которые использую на практике.
Установка CentOS 8
Создания USB носителя для установки
Существует множество программ для записи iso образа на устройство. Например, у меня два варианта для создания носителя для установки:
Rufus — использую эту программа для создание загрузочных USB-дисков в системе Windows;
ROSA ImageWriter — использую эту программу для любой системы Linux.
Варианты установки
Рассмотрим два самых популярных варианта установки СentOS 8.
Образы iso CentOS 8
Образы можно скачать c зеркала Yandex по ссылке Download CentOS. Существует два варианта:
CentOS-8-x86_64-1905-dvd1.iso — полный образ 7G;
CentOS-8-x86_64-1905-boot.iso — загрузочный образ 550M.
Какой вариант использовать решать вам. Например, мне нравится устанавливать загрузочный образ и дальше настраивать руками, так и опыт приходит и понимаешь как что работает.
Больше нет минимального образа, но радует что есть загрузочный при установке с которого надо только руками внести требуемый репозиторий и выбрать нужные параметры установки.
Указывать надо путь к той папке, где лежит каталог repodata. Например, mirror.yandex.ru/centos/8/BaseOS/x86_64/os/.
В выборе программ выбираем базовое окружение «Минимальная установка» а в дополнительных параметрах «Гостевые агенты» и «Стандарт».
Шаблоны
Шаблоны используются как правило для установки на VDS и предоставляются компаниями предоставляющие такие услуги. Удобно, но тем не менее я пару раз попадал в дурацкие ситуации.
Вот моменты почему я советую использовать установку на VDS систем с iso образа:
Разбивка диска порой не учитывает конфигурацию тарифа или требований вашей системы — например, на одном хостинге при 2 G оперативной памяти был создал SWAP раздел в 512 М в результате пришлось переустанавливать систему дабы не терять место на и так небольшом диске;
Локализация как правило Английская — мне приятней работать на своем родном языке хотя и на английском если надо всё настрою;
Присутствие в шаблоне каких-то изменений отличающихся от стандартных минимальных параметров установки — порой не понимаешь откуда взялись какие то настройки которых раньше не видел. Кроме того, можно потратить кучу времени не понимая почему не работает то что всегда работало как часы. В итоге выясняется что в шаблоне установки нет пакета который всегда ставился в стандартном минимальном образе.
Все компании предоставляющие услуги VDS могут предоставить возможность установки системы с ISO образа системы. При установке надо правильно указать сетевые параметры исходя из предоставленных сетевых параметров настроек выбранного тарифа!
Разбивка диска для установки
Вариантов разбивки диска для CentOS 8 может быть множество исходя из пожеланий и предпочтений. Например, мне нравиться придерживаться таких параметров:
Размер диска под систему Linux 50 G — этого мне хватает с запасом;
Создаю раздел boot размером 1 G — так я гарантирую что при заполнении диска система загрузится однозначно;
Создаю SWAP — согласно требованиям системы.
Можно выносить логи и кэш в отдельные разделы, но это лишняя трата времени. Лучше всегда выполнять мониторинг размера диска и в случае проблем оперативно принять необходимые меры. Прежде всего, так и головная боль пропадает о том какой размер указывать разделам ( вариант с перераспределением очень сюрпризная тема) и больше времени потратится на правильную настройку сервера.
SWAP
Тема организации SWAP на сервере очень важная и поэтому я описал все основные моменты использования в статье SWAP для Linux
Настройка CentOS 8
Пакетный менеджер DNF
Используется новый менеджер пакетов который поддерживает модульный формат пакетов.
По прежнему можно вносить команды yum вместо dnf и всё будет работать. Для yum сделан алиас для запуска dnf.
Для вывода всей информации о том какие команды можно использовать достаточно внести в консоли команду dnf и увидеть полный список возможностей.
dnf
= вывод части команды =
usage: dnf [options] COMMAND
Список основных команд:
alias List or create command aliases
autoremove удалить все ненужные пакеты, первоначально установленные по зависимостям
check поиск проблем в packagedb
check-update проверить доступные обновления для пакетов
clean удалить кэшированные данные
deplist Показывать список зависимостей пакета и какие пакеты их предоставляют
distro-sync обновить установленные пакеты до последних имеющихся версий
downgrade Откат к предыдущей версии пакета
group показать или использовать информацию о группах
help отобразить подсказку по использованию
history отобразить (или использовать) историю транзакций
info отобразить информацию о пакете или группе пакетов
install установка пакета(ов) в систему
list вывести список пакетов или групп пакетов
makecache создание кэша метаданных
mark отметить или снять отметку пользовательской установки с установленных пакетов.
module Взаимодействие с репозиторием Modules.
provides найти пакет по заданному значению
reinstall переустановка пакета
remove удалить пакет или пакеты из системы
repolist отобразить настроенные репозитории ПО
repoquery поиск пакетов по ключевому слову
repository-packages выполнить команды над всеми пакетами заданного репозитория
search поиск информации о пакете по заданной строке
shell запустить интерактивную оболочку DNF
swap запустить интерактивный вариант dnf для удаления и установки одной спецификации
updateinfo показать рекомендации к пакетам
upgrade обновить пакет или пакеты в системе
upgrade-minimal обновление, но только «новейших» пакетов, которые исправляют проблему в вашей системе
Информация об установленной системе
Узнать какая система установлена на сервере можно следующей командой:
uname -a
= вывод команды =
Linux localhost.localdomain 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Этой информации достаточно для понимания с какой системой предстоит работать.
Отключение SELinux
Отключаем SELinux. Его использование и настройка в системе CentOS отдельный разговор.
vi /etc/sysconfig/selinux
= меняем значение =
SELINUX=disabled
Перезагрузим для применения изменений. После перезагрузки проверяем статус:
sestatus
= вывод команды =
SELinux status: disabled
Надо иметь четкое понимание что SELinux система требующая хорошего понимания в том как она работает и как настраивать. Надо или отключить сразу или потратить время на изучение как она работает.
Добавление репозиториев
Для инсталляции различного софта необходимо подключить репозитории в CentOS 8. Со временем пришло понимание того что относится к добавляемым репозиториям надо очень внимательно, чтобы в последствии не возникало проблем при обслуживании.
Всегда подключаю самый популярный репозиторий Epel (Extra Packages for Enterprise Linux). Epel хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
dnf -y install epel-release
Старюсь подключать репозитории которые поддерживают сами разработчики программ. Например, такие как Nginx, Zabbix, MariaDB.
Обновление CentOS 8
Обновление системы очень важный момент и следует относится к нему очень внимательно. Всегда проще найти проблему когда проходит немного обновлений.
Прежде всего, всегда перед обновлениями делайте резервные копии!
Перед выполнением настройки лучше выполнить полное обновление системы:
dnf update
Автоматическое обновление системы
Для безопасности сервера его необходимо своевременно обновлять. Вариантов обновления CentOS 8 несколько и это тема отдельного длинного разговора.
Например, получать сообщения на почту об появившихся обновлениях и уже на основании этого принимать решение о необходимости обновления — для меня лучший вариант.
При моих пожеланиях мне подойдёт утилита dnf-automatic. Ставится она из базового репозитория командой:
dnf install dnf-automatic
Управлением запуском по расписанию занимается systemd со своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:
systemctl list-timers *dnf-*
= вывод команды =
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2019-10-24 14:36:56 MSK 5min left n/a n/a dnf-makecache.timer dnf-makecache.service
Посмотрим настройки этого таймера выполнив команду:
cat /etc/systemd/system/multi-user.target.wants/dnf-makecache.timer
= вывод команды =
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
Unit=dnf-makecache.service
[Install]
WantedBy=multi-user.target
Если заданий нет, то можно добавить таймер выполнив команду:
systemctl enable --now dnf-automatic.timer
Настройка этого таймера будет по пути — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.
Настройка системы автоматического обновления находится по пути /etc/dnf/automatic.conf. По-умолчанию он только скачивает обновления, и отправляет сообщение на почту root.
Самый важный параметр это update_type — которой будет говорить системе какие выполнять обновления. Доступно несколько вариантов:
default — полное обновление;
security — только обновление безопасности.
Мой вариант настройки выглядит следующим образом:
vim /etc/dnf/automatic.conf
= часть вывода с пояснениями
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
Согласно этих параметров будут скачаны все обновления безопасности и будет отправлено сообщение пользователю root.
В настройках можно настроить отправку почты на другой почтовый ящик, но мне больше нравится вариант когда все сообщения пользователя root пересылаются на мой почтовый ящик.
Популярные и полезные утилиты
Установим в начале основные популярные утилиты которые обычно требуются в работе.
net-tools bind-utils — сетевые утилиты после установки которых будут работать команды # ifconfig и # nslookup,
htop atop — два интересных диспетчера задач,
iftop — показывает в режиме реального времени загрузку сетевого интерфейса,
lsof — вывода информации о том, какие файлы используются теми или иными процессами,
wget — неинтерактивная консольная программа для загрузки файлов по сети,
bzip2 — утилита командной строки с открытым исходным кодом для сжатия данных,
traceroute — утилита предназначенная для определения маршрутов следования данных в сетях TCP/IP,
gdisk — умеет работать с GPT-дисками разработано по подобию fdisk,
yum-utils — — это набор утилит для управления репозиторием, установки и отладки пакетов, поиска пакетов и много другого.
Отправка почты с авторизацией на другом SMTP сервере
Настраиваем на базе Postfix.
Проверка статуса:
systemctl status postfix
Если Postfix не установлен то производим установку выполнив команду:
dnf install postfix
Запускаем и добавляем в автозагрузку командами:
systemctl start postfix
systemctl enable postfix
Чтобы отправлять письма с консоли необходимо установить пакет mailx:
dnf 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
compatibility_level = 2
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/samples
readme_directory = /usr/share/doc/postfix/README_FILES
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
# 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!
Отправитель письма подтверждён и проверен Спамообороной Яндекса.
Отправитель: 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
Можно использовать одну команду зная точно что эта временная зона присутствует в настройках:
timedatectl set-timezone Europe/Moscow
Синхронизация времени
В CentOS 8 по-умолчанию используется утилита для синхронизации времени chrony. Если у вас её нет, то устанавливайте:
dnf 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 8 уделяю особое внимание настройки сетевых параметров. Кроме того, на странице настройки сетевых параметров указывается название хоста.
Всегда отключаю ipv6 так как в большинстве случаев он не используется а вот проблемы при работе с системой может создать.
Для управления сетевыми настройками в CentOS 8 после установки можно воспользоваться графической утилитой nmtui:
nmtui
= вывод команды =
-bash: nmtui: команда не найдена
= команда установки необходимого пакета для работы nmtui =
yum install NetworkManager-tui
В CentOS 8, сеть управляется только через Network Manager. Сетевые настройки лучше выполнять с помощью утилиты nmtui.
Руками вся настройка сводится к редактированию файлов в паке /etc/sysconfig/network-scripts/. Для определения интерфейсов необходимо предварительно выполнить команду ip addr которая покажет название всех имеющихся интерфейсов.
Например, мой файл настройки сетевого интерфейса ens18:
Для применения изменений необходимо перезагрузить Network Manager выполнив команду:
= или командой =
systemctl restart NetworkManager
= предварительно поняв название необходимого сервиса =
systemctl list-units | grep -i network
Смена пароля root
Смена пароля производится командой:
passwd
= вывод команды =
Изменяется пароль пользователя root.
Новый пароль :
Повторите ввод нового пароля :
passwd: все данные аутентификации успешно обновлены.
Брандмауэр FirewallD
По умолчанию в системе CentOS 8 используется брандмауэр FirewallD.
Ниже я выполню необходимые действия не описывая всё подробно.
Вывод информации об активных зонах:
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: cockpit 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: cockpit 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):
Подключение производится с указанием необходимого порта командой:
ssh -p 25555 root@193.124.180.195
Авторизация SSH по ключу
Вводить каждый раз пароль не удобно да и не помешает добавить безопасности.
После настройки можно отключить в параметрах ssh авторизацию по паролю, но иногда подключение по паролю просто необходимо. Обычно я создаю 16 злачный пароль и меняю его если давал временный доступ специалистам любого уровня и моего доверия. Безопасность лишней не бывает!
Установим самый популярный файловых менеджеров с текстовым интерфейсом командой:
dnf -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
По умолчанию в системе работает редактор vim и это вполне оправдано.
Обоснование использования редактора VIM и как с ним работать можно в статье Vim текстовый редактор
В случае отсутствия редактора его можно установить без вопросов командой:
dnf -y install vim
Отображение приглашения в консоли bash
При появлении большого количества серверов на обслуживании я сразу столкнулся с плохой информативностью о том с каким я сервером работаю.
Стандартный вариант отображения приветствия после установки CentOS 8:
[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_history (в начале точка). Его можно открыть любым редактором и посмотреть.
По умолчанию вывод команды history в консоли нам покажет:
history
= вывод команды =
1 yum update
2 reboot
3 htop
4 df -h
Как видим вывод не информативный. Кроме того, покажет только последние 1000 команд.
Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:
history | grep yum
Изменим эту ситуацию добавив в файл .bashrc находящийся в папке пользователя необходимые параметры:
Можно применить эту настройку для всех пользователей указав параметр в файле /etc/profile.d/bash_completion.sh.
В таком варианте получаем гораздо большую информативность.
Установка Tmux
Установим пожалуй один из самых необходимых и удобных программ для удаленной работы с сервером. Tmux терминальный оконный менеджер при использовании дает возможность при обрыве связи с сервером по ssh не терять информацию о выполняемых действиях.
Cockpit: Веб-интерфейс управления сервером CentOS 8
Возможность видеть наглядно все основные параметры системы и иметь возможность ими управлять пожалуй самая приятна новость которая меня порадовала в выпуске CentOS 8.
При авторизации по ssh вы увидите следующее сообщение:
Activate the web console with: systemctl enable --now cockpit.socket
Достаточно выполнить команду в консоли systemctl enable —now cockpit.socket и при следующей авторизации вы увидите следующее сообщение:
Web console: https://localhost:9090/ or https://192.168.0.252:9090/
Порт 9090 должен быть открыт. Работающий по умолчанию сервис cockpit в FirewallD открывает этот порт.
При вводе в браузере https://192.168.0.252:9090 увидите приглашение ввести данные авторизации.
После входа вы увидите главную страницу с выводом графиков нагрузки основных параметров сервера.
Далеко не все конечно можно видеть и настраивать в этой панели но определенное удобство есть явно. Пользоваться панелью просто, понятно и не вызывает никаких сюрпризов, так что описывать по большому счету нечего. Попробуйте и вы сами всё поймете.
Единственное что я делаю это то что не держу её включенной. Убираю из автозагрузки в самой панели управления или командой:
systemctl disable cockpit.socket
В случае необходимости мне не сложно включить при необходимости и отключить после использования следующими командами:
В результате я получил статью в которой свёл в одно место все основные моменты которые я на практике использую при базовой настройке сервера CentOS 8. Возможно что-то сказано с ошибками или можно улучшить. Комментируйте и советуйте я всегда рад обратной связи с пользователями систем Linux.
ZFS мониторинг файловой системы с помощью системы Zabbix. Контроль состояния происходит с учетом значения DEGRADED появляющегося в выводе статуса ZFS при ошибках с дисками. Своевременно полученная информация может избавить от серьезных проблем.
Введение
Не представляю как можно спокойно жить системному администратору без тотального контроля файловых систем. Например, для меня чем больше механизмов меня оповестят о проблемах дисков тем лучше. К сожалению жесткий диск может выйти из строя в любой момент и это не зависит от того дорогой он или дешевый.
В этой статье вы узнаете как с помощью системы Zabbix можно держать под контролем все имеющие диски в файловой системе ZFS.
Схема действий для мониторинга параметра будет следующей:
Создаем скрипт bach который будет записывать нужное значение в текстовый файл;
Добавляем в cron задание которое будет с нужной нам периодичностью записывать показания в текстовый файл;
Добавляем необходимые параметры в агент Zabbix и проверяем правильность работы;
На сервере Zabbix для нужного узла добавляем все необходимые данные для контроля над параметром и настраиваем оповещение в случае плохих параметров.
Действия на Zabbix агенте
Команда для вывода нужных параметров ZFS
Выведем состояние zfs:
zpool status
= вывод команды =
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-ST3120811AS_5PT00YS1-part3 ONLINE 0 0 0
ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0
errors: No known data errors
Из вывода видно что имеются 2 диска сделанные в зеркале.
ZFS мониторинг будет основываться на появлении сообщения DEGRADED. Выполним команду которая проверит наличие этого сообщение:
/sbin/zpool status | grep DEGRADED | wc -l
= вывод команды =
0
При отсутствии значения DEGRADED выводится сообщение 0. При наличии значения выведется число соответствующее количеству встречающихся значений.
Отключим диск и подождав немного запросим статус ZFS:
zpool status
= вывод команды =
pool: rpool
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
ata-ST3120811AS_5PT00YS1-part3 REMOVED 0 0 0
ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0
errors: No known data errors
Видим что у одного из дисков появилось значение REMOVED и параметр DEGRADED встречается 3 раза.
Проверим правильность выполняемой команды:
/sbin/zpool status | grep DEGRADED | wc -l
= вывод команды =
3
Всё правильно.
Создадим папку и в ней скрипт bash который будем запускать в cron для записи значения в текстовый файл.
mkdir /etc/zabbix/scripts
vim /etc/zabbix/scripts/zfs_degraded-bin.sh
= необходимый код =
#!/bin/bash
/sbin/zpool status | grep DEGRADED | wc -l > /etc/zabbix/scripts/zfs_degraded.txt
Сделаем скрипт исполнительным:
chmod +x /etc/zabbix/scripts/zfs_degraded-bin.sh
Произведем проверки. Запустим скрит, проверим создание текстового файла и информацию в нём. Выполнив по очереди 3 команды:
sh /etc/zabbix/scripts/zfs_degraded-bin.sh
= вывод пустой =
ls /etc/zabbix/scripts
= вывод команды =
zfs_degraded-bin.sh zfs_degraded.txt
cat /etc/zabbix/scripts/zfs_degraded.txt
= вывод команды =
3
Все работает как надо. Добавим задание в крон:
vim /etc/crontab
= необходимый код =
*/3 * * * * root /etc/zabbix/scripts/zfs_degraded-bin.sh >/dev/null 2>&1
Каждые 3 минуты в текстом фале будет обновляться информация.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
Имя — pve-1 degraded zfs;
Ключ — pve-1.zfs;
Тип информации — Числовой (целое положительное);
Интервал обновления — 5m;
Период хранения истории — 1w;
Группы элементов данных — Filesystem.
Добаление тригера
Открываем необходимый узел и перейдя в «Триггеры» добавляем новый нажав «Создать триггер«.
Необходимо заполнить следующие поля:
Имя триггера — pve-1 degraded zfs;
Выражение — {pve-1:pve-1.zfs.last()}>0.
Ждем немного времени и проверяем срабатывание триггера. В случае успешного срабатывания выключаем систему, подключаем диск назад и запускаем систему.
Cброс счетчиков ошибок ZFS
После того как мы подключили в диск в выводе статуса ZFS будет информация об ошибках. Например, в нашем случае мы знаем чем вызваны эти ошибки и разбираться в их причине не требуется.
Сбросить все ошибки в пуле мы можем следующей командой:
zpool clear rpool
Заключение
Возможно есть и другие варианты и подходы для мониторинга файловой системы ZFS и если вы знаете о них поделитесь информацией в комментариях.
Обслуживание компьютеров, ремонт, лечение вирусов, модернизация. Системы на ОС Linux. Создание и продвижение Интернет проектов. Бесплатные консультации. Офисные АТС. Видеонаблюдение.