我想给一个网络开发者测试用户在 Web 服务器“mywebserver”上使用 /usr/bin/htpasswd 命令设置自己的 .htpasswd 密码的权限。
Web 服务器树属于管理员用户因此拥有 Web 根目录中的 .htpasswd 文件,并且能够定期运行 htpasswd。
以我对 sudo 的理解,Web 服务器(普通 Apache,CentOS 6)的 /etc/sudoers 中的下一行应该可以完成这项工作:
testuser mywebserver=(wwwadmin) /usr/bin/htpasswd
事实是,每当用户测试用户运行:
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
我感到很困惑,花了好几个小时在这里和其他地方寻找为什么会发生这种情况的线索(以及为什么根作为用户提及,而不是管理员)。
任何线索都将不胜感激!
答案1
阅读文档可以解答你的疑问
-u 用户,--user=user 以默认目标用户(通常是 root)以外的用户身份运行命令。用户可以是用户名或以“#”字符为前缀的数字用户 ID (UID)(例如,UID 0 为 #0)。以 UID 运行命令时,许多 shell 要求使用反斜杠(“\”)对“#”进行转义。某些安全策略可能会将 UID 限制为密码数据库中列出的 UID。只要未设置 targetpw 选项,sudoers 策略就允许密码数据库中没有的 UID。其他安全策略可能不支持此功能。
答案2
您授予 testuser 以 wwwadmin 用户身份在 mywebserver 上运行 /usr/bin/htpasswd 的权限,但是当您实际运行 sudo 命令时,您并没有指定以哪个用户身份运行它,因此它默认为 root。
尝试这个:
sudo -u wwwadmin /usr/bin/htpasswd