у меня есть 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