我想允许 sudo 用户删除 /tmp 目录中的某些文件。我已为Allow_Cmnd /usr/sbin/userdel
sudo 用户添加了,但这不会删除与该用户关联的所有 /tmp 文件。
那么我该如何调整 sudoers 以允许它们仅删除 /tmp 目录中的某些文件。我在 Google 上搜索了一下,但了解到正则表达式可能适用于此。我尝试了一些调整,但对我来说不起作用。
我希望用户能够执行如下命令
find /tmp -uid 10002 | grep joeuser | xargs rm -rf
答案1
最好的办法是编写一个可以执行所需操作的脚本。您可以在其中进行广泛的健全性检查,检查用户是否只执行允许的操作,等等。然后只允许从 sudo 运行该脚本。
或者,您也可以允许他们按照您描述的运行命令:/bin/bash -c "find /tmp -uid 10002 | grep joeuser | xargs rm -rf"
,或者更简单find /tmp -uid 10002 -path \*joeuser\* -delete
。
正如已经指出的那样,使用xargs
这种方式不是一个好主意。您可以使用find -print0 | xargs -0
,或者我个人的建议是:find /tmp -uid 10002 -path \*joeuser\* -depth -exec rm -rf {} +
。如果您的版本find
不支持+
,您可以改用\;
。
答案2
我相信编写良好的脚本将是您的最佳选择。但是,这实际上取决于总体目标以及设计规划的完善程度...您是否希望删除 /tmp 中属于执行脚本的用户的文件,或者脚本是否应接受 UID 和用户名的参数?
存在明显的安全隐患,您需要非常小心。在您的测试期间,我不会执行实际的删除,而是记录(输出)如果删除代码到位则“将”被删除的文件。然后我会再测试 3 次左右以确定。
最后,根据您的需要,另一个选择是编写一个更通用的脚本并通过 cron 安排它在特定日期/时间运行以自动执行该过程。
顺便提一句:
/usr/sbin/userdel 不是您想要的命令。该命令用于删除本地用户帐户。
-布伦丹