Назад | Перейти на главную страницу

Невозможно перезапустить службу systemctl удаленно от имени пользователя без полномочий root

у меня есть systemd.socket названный Gunicorn.socket который я хотел бы перезапустить после обновления кода на удаленном сервере.

Я выполнил шаги, описанные в Разрешение пользователю без полномочий root перезапускать службу и systemctl постоянно спрашивает мой пароль пользователя. Вот что я сделал, пытаясь запустить systemctl restart gunicorn.socket с пользователем john:

# added an appadmin group to allow the restart command to john
addgroup appadmin
usermod -a -G appadmin john
visudo

В sudoers:

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start gunicorn.socket, /bin/systemctl stop gunicorn.socket, /bin/systemctl restart gunicorn.socket
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

затем sudo systemctl restart gunicorn.socket работает нормально, находясь на сервере, но когда я пробую удаленно, я получаю:

ssh example.com "sudo systemctl restart gunicorn.socket"
Failed to restart gunicorn.socket: Interactive authentication required.
See system logs and 'systemctl status gunicorn.socket' for details.

Любые идеи? Я использую Ubuntu 17.04.

Обновить: добавление полного содержания /etc/sudoers:

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Cmnd alias specification
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start gunicorn.socket, /bin/systemctl stop gunicorn.socket, /bin/systemctl restart gunicorn.socket
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

# User privilege specification
root    ALL=(ALL:ALL) ALL
john        ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Вы можете переместить блок:

# Cmnd alias specification Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start gunicorn.socket, /bin/systemctl stop gunicorn.socket, /bin/systemctl restart gunicorn.socket %appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

в конец файла. Порядок блоков разрешений в /etc/sudoers нетривиально. Из sudoers страница руководства, благодаря @enzotib:

When multiple entries match for a user, they are applied in order.
Where there are multiple matches, the last match is used (which is not
necessarily the most specific match).

Убедитесь, что параметр requiretty не установлен в / etc / sudoers.

См. Этот вопрос для получения дополнительной информации: https://unix.stackexchange.com/questions/79960/how-to-disable-requiretty-for-a-single-command-in-sudoers