![有没有办法根据当前工作目录允许 sudo 中的命令?](https://linux22.com/image/795982/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E6%A0%B9%E6%8D%AE%E5%BD%93%E5%89%8D%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%E5%85%81%E8%AE%B8%20sudo%20%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我希望 sudo 允许我在当前工作目录(例如 /tmp)时运行命令。示例用法是从 /tmp 目录中删除文件,因此我在 /tmp ($PWD of shell == /tmp),然后我可以运行 rm -v someuseless.bin(someuseless.bin 当然不属于我,所以我无法删除它)。如果不可能(我在 sudo 手册中找不到参考资料),那么为什么?也许这里存在我没有发现的安全违规行为。谢谢。
答案1
您当然可以将 嵌入$cwd
到 sudoers 中,以允许某人仅删除特定目录下的文件,但您这样做是错误的。执行您想要的操作的方法是使用 中的绝对路径sudoers
,例如
orc ALL=(ALL) /bin/rm /tmp/someuseless.bin
答案2
您可以编写一个 shell 脚本来检查当前目录,然后授予 sudo 权限来运行该脚本。
/usr/local/bin/cwddostuff.sh:
#!/bin/sh
if [ "$CWD" != "/tmp" ]; then
exit 1
fi
echo do your stuff
在 /etc/sudoers 中:
user ALL=(ALL) /usr/local/bin/cwddostuff.sh
但谨防这样做很危险,因为现在您还需要检查所有参数是否正常(例如,用户可能在 /tmp,但运行“rm -rf /”)。
最好的方法是按照 MadHatter 所说的那样,明确添加允许用户删除的路径,或者按照 Kwaio 建议的那样,在目录上设置 ACL。