允许 sudo 删除某些文件

允许 sudo 删除某些文件

我想允许 sudo 用户删除 /tmp 目录中的某些文件。我已为Allow_Cmnd /usr/sbin/userdelsudo 用户添加了,但这不会删除与该用户关联的所有 /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 不是您想要的命令。该命令用于删除本地用户帐户。

-布伦丹

相关内容