我的Debian 9系统上的受限非root用户帐户上运行着一个BBS。在大多数情况下,这运行得很好。有时会运行需要root访问权限的命令,因此我一直将sudo与sudoers文件和sudoers.d目录结合使用,以使所有工作正常进行。
直到现在,它一直在顺利运行。
但是,当用户com
运行特定的代码块时,现在出现了这个问题:
[sudo] password for com:
Sorry, user com is not allowed to execute '/usr/bin/last' as root on [redacted].
Matching Defaults entries for com on [hostname]:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User com may run the following commands on [hostname]:
(ALL : ALL) NOPASSWD: /usr/sbin/asterisk
(ALL : ALL) NOPASSWD: /usr/bin/curl
(ALL : ALL) NOPASSWD: /usr/bin/last
Press ENTER to return:
在bash脚本中生成以上代码的实际代码:
recent=`sudo /usr/bin/last | grep "com"`
r=`sudo -l`
printf '%s\n' "$r"
printf '%s\n' "$recent"
read -n 1 -r -p "Press ENTER to return: "
是的,我也尝试了不带grep部分的命令。
以前,我只是在使用sudo last
,但是将其更改为sudo /usr/bin/last
也不起作用。
用户com
重新登录后,sudoers.d目录中的其他条目(您可以在上面的另两个条目中立即生效)没有问题。
如果我将以下内容添加到sudoers.d目录中,它将起作用:
com ALL=(ALL) NOPASSWD:ALL
但是,我不想只允许sudoers.d目录中的所有内容,因为这不是一个真正的解决方案,而是一个棘手的解决方法。如果某个地方存在安全漏洞,则可以利用此漏洞,并且不使用上面的线会减少攻击面。有谁知道为什么sudoers.d无法使最后一个命令-只有最后一个命令起作用?
在我看来,last
正在使用其他某些进程或文件,也许只有root / admin用户可以访问。但是, wtmp 似乎不是这种情况,last
使用的文件具有 664 许可,且具有"Read" permissions for everyone。 / p>