Изменить пользователя процесса keepalived с root на keepalived (или другого)

Вопрос или проблема

Я хочу знать, как изменить имя процесса 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

моя среда:

(из-за того, что 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
    }
}

что я уже пробовал:

  1. копирование /usr/lib/systemd/system/keepalived.service в /etc/systemd/system/keepalived.service и добавление тега user
User=keepalived
Group=users

но keepalived больше не работает, keepalived остановлен.

  1. изменение каталога, разрешений в /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, вот подробные шаги:

  1. Создание пользователя для Keepalived:

    useradd -r -M -s /bin/false keepalived
  2. Изменение службы systemd:
    Скопируйте файл службы Keepalived в каталог systemd для переопределения:

    cp /usr/lib/systemd/system/keepalived.service /etc/systemd/system/
  3. Редактирование файла службы:
    Откройте скопированный файл /etc/systemd/system/keepalived.service в текстовом редакторе и добавьте строки:

    User=keepalived
    Group=keepalived

    Убедитесь, что другие настройки, такие как PIDFile, правильно указаны.

  4. Настройка прав доступа к конфигурационным файлам:
    Измените владельца конфигурационного каталога:

    chown -R keepalived:keepalived /etc/keepalived
  5. Убедитесь, что скрипты проверки имеют необходимые права:
    Если вы используете пользовательские скрипты для проверки, убедитесь, что у них также есть правильные права доступа и что пользователь keepalived может их выполнять.

  6. Перезагрузка и контроль службы:
    После внесения всех изменений перезагрузите систему и проверьте статус службы:

    systemctl daemon-reload
    systemctl start keepalived
    systemctl status keepalived

Если сервис все еще не запускается, скорее всего, это связано с тем, что Keepalived пытается выполнять операции, требующие прав суперпользователя, такие как создание сокетов или настройка маршрутов. В этом случае, чтобы продолжить использовать Keepalived, вам необходимо оставаться под root или использовать более новую версию, в которой уже предусмотрена возможность работы от имени пользователя без прав суперпользователя.

Дополнительные Советы:

  • Использование последних сборок: Рекомендуется использовать последнюю версию Keepalived, так как она содержит исправления и новые функции.
  • Форумы и сообщество: Хорошие ресурсы для вопросов о Keepalived включают их официальный сайт, GitHub, а также соответствующие форумы и сообщества на Stack Overflow и Reddit.

Заключение

Начиная с версии 2.2.7, Keepalived может работать под другим пользователем, что улучшает безопасность. Изменение пользователя для более ранних версий связано с ограничениями, и для полноценной работы может потребоваться запускать сервис с правами root. Если вы требуется использовать более старую версию, вы можете экспериментировать с изменением пользователя, однако следует остерегаться любых ошибок, связанных с недостаточными правами доступа.

Оцените материал
Добавить комментарий

Капча загружается...