Вопрос или проблема
Я хочу знать, как изменить имя процесса root на другое?
При использовании следующей команды:
ps aux | grep keepalived
root 26982 0.0 0.0 19344 1560 ? Ss 11:52 0:00 /usr/local/keepalived-2.0.16/sbin/keepalived -D
root 26983 0.0 0.1 19344 2404 ? S 11:52 0:02 /usr/local/keepalived-2.0.16/sbin/keepalived -D
root 30816 0.0 0.0 9288 1628 pts/1 S+ 13:49 0:00 grep --color=auto keepalived
keepalived работает как ожидается, обрабатывая виртуальный IP и переключение при сбое.
Но я хочу изменить root на имя пользователя: keepalived
моя среда:
- дистрибутив linux: SUSE SLES 12 SP4
- ядро linux: 4.12.14-95.13
- Unix демон: systemd
- версия keepalived:
- 1.4.5 (используя zypper из https://software.opensuse.org/package/keepalived)
- также пробовал установить из исходного кода
- следовал инструкциям по установке из https://www.keepalived.org/doc/installing_keepalived.html#build-and-install
- 1.4.5 (из https://www.keepalived.org/download.html)
- 2.0.16 (из https://www.keepalived.org/download.html)
(из-за того, что https://www.keepalived.org/index.html говорит: “Код Keepalived, присутствующий в главной ветке git, должен считаться стабильным и готовым к будущему.“,
и https://www.keepalived.org/manpage.html показывает только одну версию (это 2.0.16?), я выбрал 2.0.16 для обсуждения)
(следующая информация относится к версии 2.0.16, выполняйте команды от имени root, но я вижу аналогичную ошибку в 1.4.5)
как я устанавливаю keepalived:
wget http://keepalived.org/software/keepalived-2.0.16.tar.gz
tar -xvf keepalived-2.0.16.tar.gz
cd keepalived-2.0.16/
zypper in gcc
zypper in openssl-devel
./configure --prefix=/usr/local/keepalived-2.0.16
make
sudo make install
настройка keepalived.conf
vi /etc/keepalived/keepalived.conf
! Файл конфигурации для keepalived
global_defs {
script_user keepalived
enable_script_security
}
# Скрипт, используемый для проверки, работает ли nginx
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 2
}
# Виртуальный интерфейс
# Приоритет указывает порядок, в котором назначенный интерфейс должен принимать управление при сбое
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass pass
}
# Виртуальный IP-адрес, общий между двумя балансировщиками нагрузки
virtual_ipaddress { # Блок ограничен 20 IP-адресами
192.168.2.179
}
track_script {
check_nginx
}
}
что я уже пробовал:
- копирование /usr/lib/systemd/system/keepalived.service в /etc/systemd/system/keepalived.service и добавление тега user
User=keepalived
Group=users
но keepalived больше не работает, keepalived остановлен.
- изменение каталога, разрешений в /etc/systemd/system/keepalived.service
#PIDFile=/var/run/keepalived.pid
ExecStart=/usr/local/keepalived-2.0.16/sbin/keepalived $KEEPALIVED_OPTIONS -p /etc/keepalived/keepalived.pid -r /etc/keepalived/vrrp.pid -c /etc/keepalived/keepalived_checkers.pid
useradd -M -s /bin/nologin -d /opt/keepalived keepalived
chown -R keepalived:users /etc/keepalived/
на этот раз keepalived начал работать
keepali+ 26289 0.0 0.0 19344 1628 ? Ss 11:34 0:00 /usr/local/keepalived-2.0.16/sbin/keepalived -D -p /etc/keepalived/keepalived.pid -r /etc/keepalived/vrrp.pid -c /etc/keepalived/keepalived_checkers.pid
keepali+ 26290 0.0 0.1 19344 2456 ? S 11:34 0:00 /usr/local/keepalived-2.0.16/sbin/keepalived -D -p /etc/keepalived/keepalived.pid -r /etc/keepalived/vrrp.pid -c /etc/keepalived/keepalived_checkers.pid
root 26323 0.0 0.0 9288 1628 pts/1 S+ 11:35 0:00 grep --color=auto keepalived
но возникла следующая ошибка в systemctl status keepalived и journalctl -xe
-- Unit keepalived.service has begun starting up.
Keepalived[10409]: Starting Keepalived v2.0.16 (05/03,2019), git commit v2.0.15-96-g4d492740+
Keepalived[10409]: Running on Linux 4.12.14-95.13-default #1 SMP Fri Mar 22 06:04:58 UTC 2019 (c01bf34) (bu
Keepalived[10409]: Command line: '/usr/local/keepalived-2.0.16/sbin/keepalived' '-D' '-p'
Keepalived[10409]: '/etc/keepalived/keepalived.pid' '-r' '/etc/keepalived/vrrp.pid' '-c'
Keepalived[10409]: '/etc/keepalived/keepalived_checkers.pid'
Keepalived[10409]: Opening file '/etc/keepalived/keepalived.conf'.
Keepalived[10409]: Failed to bind to process monitoring socket - errno 1 - Operation not permitted
systemd[1]: Started LVS and VRRP High Availability Monitor.
-- Subject: Unit keepalived.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit keepalived.service has finished starting up.
--
-- The start-up result is done.
Keepalived[10409]: Remove a zombie pid file /etc/keepalived/keepalived.pid
Keepalived[10409]: Remove a zombie pid file /etc/keepalived/vrrp.pid
Keepalived[10412]: Starting VRRP child process, pid=10413
Keepalived_vrrp[10413]: Registering Kernel netlink reflector
Keepalived_vrrp[10413]: Registering Kernel netlink command channel
Keepalived_vrrp[10413]: Opening file '/etc/keepalived/keepalived.conf'.
Keepalived_vrrp[10413]: Assigned address 192.168.2.178 for interface eth0
Keepalived_vrrp[10413]: Assigned address fe80::a00:27ff:feef:6ebe for interface eth0
Keepalived_vrrp[10413]: Error 1 while registering gratuitous ARP shared channel
Keepalived_vrrp[10413]: (VI_1) removing VIPs.
Keepalived_vrrp[10413]: Netlink: error: Operation not permitted, type=RTM_DELADDR(21), seq=1557728895, pid=
Keepalived_vrrp[10413]: cant open raw socket. errno=1
Keepalived_vrrp[10413]: (VI_1) Entering BACKUP STATE (init)
Keepalived_vrrp[10413]: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(0), fd(-1,-1)]
Keepalived_vrrp[10414]: Couldn't setgroups: 100 (Operation not permitted)
Keepalived_vrrp[10413]: VRRP_Script(check_nginx) succeeded
Keepalived_vrrp[10413]: (VI_1) Changing effective priority from 150 to 152
Keepalived_vrrp[10415]: Couldn't setgroups: 100 (Operation not permitted)
(в моем случае я использую keepalived для переключения на nginx)
также я хочу спросить
-
существует ли форум или Q&A для keepalived?
-
лучший способ установить keepalived?
- keepalived 1.4.5 (на данный момент) из zypper (менеджер пакетов)?
- последняя версия keepalived 2.0.16 (на данный момент) из исходного кода?
-
сделал ли я что-то неправильно или что-то странное?
Согласно ответу Александра Кассена (я спрашивал по электронной почте)
….Ответ довольно прост: на самом деле, поскольку Keepalived работает на уровне ОС, он не будет работать, если запустить его с другим пользователем с меньшими привилегиями, чем root. Keepalived необходимо открывать разные маршрутизирующие каналы и систему с ядром, что можно сделать только с правами уровня root (RAW socket, настройка канала netlink и т. д.).
Быстрый просмотр вашего поста на форуме и просто для подтверждения: последняя стабильная версия на сайте Keepalived должна рассматриваться для продакшна. Я действительно недоволен тем, что большинство дистрибутивов Linux по-прежнему поставляются с очень старыми версиями. Canonical/Ubuntu проделали шаги в этом направлении, и мы создали пакет snapcraft.io для Keepalived, который тесно связан с Keepalived на GitHub. Но использование последней опубликованной версии всегда является хорошей практикой, мы действительно тратим много времени на тестирование и отладку, чтобы предложить лучшее программное обеспечение.
Итак, ответ – НЕТ.
И попробуйте использовать последнюю версию keepalived.
Спасибо Александру Кассену.
Выпуск keepalived 2.2.7 поддерживает запуск от имени непользователя.
ссылка: https://keepalived.org/release-notes/Release-2.2.7.html
Ответ или решение
Вопрос о том, как изменить пользователя процесса Keepalived с root на другого (например, пользователя keepalived), является важным аспектом настройки безопасности и управления доступом в Linux. Обратите внимание, что в старых версиях Keepalived, таких как 1.4.5 и даже 2.0.16, Keepalived требует прав суперпользователя для выполнения определенных операций, таких как управление виртуальными IP-адресами и настройка маршрутизации.
Тем не менее, начиная с версии 2.2.7, Keepalived поддерживает возможность работы под учетной записью, отличной от root. Это означает, что, если возможно, рекомендуется обновить Keepalived до последней версии, чтобы воспользоваться данной функцией.
Если же вы хотите использовать более раннюю версию приложения, такие как 1.4.5 или 2.0.16 и изменить пользователя, на котором работает Keepalived, вот подробные шаги:
-
Создание пользователя для Keepalived:
useradd -r -M -s /bin/false keepalived
-
Изменение службы systemd:
Скопируйте файл службы Keepalived в каталог systemd для переопределения:cp /usr/lib/systemd/system/keepalived.service /etc/systemd/system/
-
Редактирование файла службы:
Откройте скопированный файл/etc/systemd/system/keepalived.service
в текстовом редакторе и добавьте строки:User=keepalived Group=keepalived
Убедитесь, что другие настройки, такие как
PIDFile
, правильно указаны. -
Настройка прав доступа к конфигурационным файлам:
Измените владельца конфигурационного каталога:chown -R keepalived:keepalived /etc/keepalived
-
Убедитесь, что скрипты проверки имеют необходимые права:
Если вы используете пользовательские скрипты для проверки, убедитесь, что у них также есть правильные права доступа и что пользовательkeepalived
может их выполнять. -
Перезагрузка и контроль службы:
После внесения всех изменений перезагрузите систему и проверьте статус службы:systemctl daemon-reload systemctl start keepalived systemctl status keepalived
Если сервис все еще не запускается, скорее всего, это связано с тем, что Keepalived пытается выполнять операции, требующие прав суперпользователя, такие как создание сокетов или настройка маршрутов. В этом случае, чтобы продолжить использовать Keepalived, вам необходимо оставаться под root или использовать более новую версию, в которой уже предусмотрена возможность работы от имени пользователя без прав суперпользователя.
Дополнительные Советы:
- Использование последних сборок: Рекомендуется использовать последнюю версию Keepalived, так как она содержит исправления и новые функции.
- Форумы и сообщество: Хорошие ресурсы для вопросов о Keepalived включают их официальный сайт, GitHub, а также соответствующие форумы и сообщества на Stack Overflow и Reddit.
Заключение
Начиная с версии 2.2.7, Keepalived может работать под другим пользователем, что улучшает безопасность. Изменение пользователя для более ранних версий связано с ограничениями, и для полноценной работы может потребоваться запускать сервис с правами root. Если вы требуется использовать более старую версию, вы можете экспериментировать с изменением пользователя, однако следует остерегаться любых ошибок, связанных с недостаточными правами доступа.