我尝试授予 www-data 组在 sudo 下访问某些命令的权限(例如重新启动 Apache),但失败了。我花了星期五的大部分时间来研究这个问题,并且查看了 20 个论坛帖子和与此问题相关的 SO/SF 主题,但失败了。
以下是我的 sudoers 文件(通过 visudo 编辑)。
#
# This file MUST be edited with the 'visudo' command as root
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
Defaults !requiretty
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root 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
# Allow members of www-data group access to apache
%www-data ALL= NOPASSWD: /usr/bin/service apache2 *
# See sudoers(5) for more information on "#include" directive
如果我以我的 jenkins 用户身份登录(它是 www-data 组的一部分,如下所示);
root@ip-REDACTED:~# groups jenkins
jenkins : www-data jenkins
我无法运行“sudo service apache2 restart”,如下所示。
jenkins@REDACTED:/root$ sudo service apache restart
[sudo] password for jenkins:
jenkins is not allowed to run sudo on ip-REDACTED. This incident will be reported.
Jenkins 不属于 sudo 组,但我不希望它属于 sudo 组,因为这样它就可以访问所有内容。此外,它似乎没有识别出 sudoers 中设置的 NOPASSWD 标志。我尝试了目前能想到的所有方法,但一无所获。值得一提的是,这是在 EC2 实例上运行的,EC2 对 sudoers 文件可以执行的操作是否设置了任何其他限制?
提前致谢。
答案1
尝试一个Cmnd_Alias
定义:
Cmnd_Alias APACHE_CMD = /usr/sbin/service apache2 restart
%www-data ALL = (root)NOPASSWD: APACHE_CMD
确保可执行文件的路径service
正确。
您还可以检查文件sudoers
中的定义/etc/nsswitch.conf
,并确保它包含files
属性:
sudoers: files ldap sss