Sudo命令被拒绝(htpasswd) – CentOS / Apache(htaccess)

我想给web开发人员testuser一个权限,使用web服务器“mywebserver”上的/ usr / bin / htpasswd命令来设置他自己的.htpasswd密码。

Web服务器树属于wwwadmin用户,因此他拥有Web根目录中的.htpasswd文件,并能够定期运行htpasswd。

在我对sudo的理解中,web服务器(股票Apache,CentOS 6)的/ etc / sudoers中的下一行应该完成这个工作:

testuser mywebserver=(wwwadmin) /usr/bin/htpasswd 

事实是,只要用户testuser运行:

 sudo /usr/bin/htpasswd .htpasswd someusername 

该命令将被拒绝: [sudo] password for testuser: Sorry, user testuser is not allowed to execute '/usr/bin/htpasswd' as root on mywebsever.mydomain.com.

日志/ var / log / secure显示:

Apr 1 17:13:51 mywebserver sudo: testuser : command not allowed ; TTY=pts/2 ; PWD=/var/www/html ; USER=root ; COMMAND=/usr/bin/htpasswd .htpasswd someusername

我很困惑,花了几个小时在这里和其他地方挖掘为什么会发生这种情况(以及为什么提到root用户而不是wwwadmin暗示

任何线索将不胜感激!

阅读文档回答你的问题

-u user,–user = user以默认目标用户(通常为root)以外的用户身份运行该命令。 用户可以是用户名或数字用户ID(UID),前缀为“#”字符(例如,用于UID 0的#0)。 以UID的forms运行命令时,许多shell要求使用反斜线('\')来转义'#'。 某些安全策略可能会将UID限制为密码数据库中列出的UID。 只要未设置targetpw选项,sudoers策略就允许不在密码数据库中的UID。 其他安全策略可能不支持这一点。

您正在向testuser授予在mywebserver上运行/ usr / bin / htpasswd的权限,作为wwwadmin用户,但是当您实际运行sudo命令时,您没有指定要运行的用户,因此默认为root。

尝试这个:

sudo -u wwwadmin /usr/bin/htpasswd