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

Ограничение sudoers работает только при использовании «sudo», как ограничить регулярное использование?

У меня в моем sudoers.d/nginx файл:

deployer ALL=NOPASSWD: /etc/init.d/nginx reload

Это работает, если я запускаю команду как sudo:

$ sudo /etc/init.d/nginx start
[sudo] password for deployer: 
Sorry, user deployer is not allowed to execute '/etc/init.d/nginx start' as root on graduation.

Однако, когда я запускаю команду как не-sudoКажется, что sudoers пропускается. Команда по-прежнему не работает, но это из-за других ошибок владения, а не из-за ограничений в sudoers:

$ /etc/init.d/nginx start
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2012/12/30 20:59:49 [warn] 30054#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:12
2012/12/30 20:59:49 [emerg] 30054#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)

Это ожидаемое поведение? И если да, то почему это происходит? Я ожидал sudoers проверка должна происходить перед запуском команды. Применяются ли правила sudoers только к командам, запускаемым как sudo? (имеет смысл, учитывая его название).

И если это так, есть ли другие способы ограничить обычный доступ к командам без использования sudo?

В принципе, я бы хотел развертыватель пользователю нужно сделать только две вещи:

Все остальные вещи должны быть запрещены (в идеале даже cd'ing вне домашнего каталога)

Это ожидаемое поведение, файл sudoers просматривается только при запуске sudo, поэтому он запрещает пользователю доступ к команде и дает вам соответствующее сообщение об ошибке.

Когда пользователь пытается запустить команду напрямую, sudo не участвует, поэтому вы получаете сообщения об ошибках, возникающие из-за сбоя отдельных команд из-за отсутствия у пользователя прав.

Если вы хотите ограничить пользователя только одним действием, вы можете разрешить им входить через ssh и привязать свои ключи к одной команде используя

command="/usr/bin/sudo /etc/init.d/nginx reload" ssh-rsa AAAAB3NzaC1...

В этой конфигурации, когда пользователь входит в систему, выполняется перезагрузка, и пользователь выходит из системы.

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