我想允许删除/ tmp目录中的某些文件来sudo用户。 我为sudo用户添加了Allow_Cmnd /usr/sbin/userdel ,但不会删除与用户关联的所有/ tmp文件。
那么我应该如何调整sudoers,让它们只删除/ tmp目录中的某些文件。 我GOOGLE了一下,但得知正则expression式可能是在这个应用程序。 我尝试了一些调整,但它不为我工作。
我希望用户有能力执行命令,如
find /tmp -uid 10002 | grep joeuser | xargs rm -rf
最好的办法是写一个脚本,做你想做的。 你可以在那里做广泛的合理性检查,检查用户是否只做他们被允许的东西,等等。 然后只允许脚本从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 -print0 | xargs -0 ,或者我个人的build议是: find /tmp -uid 10002 -path \*joeuser\* -depth -exec rm -rf {} + 。 如果您的版本find不支持+ ,则可以使用\; 代替。
我相信一个写得好的脚本将是你最好的select。 但是,这实际上取决于总体目标以及devise的计划如何……您想要删除属于执行脚本的用户的/ tmp中的文件还是脚本接受UID和用户名的参数?
有明显的安全问题,你需要非常小心。 在testing过程中,我不会进行实际的删除操作,而是logging(输出)如果删除代码已经到位,“将”被删除的文件。 然后再testing三次以确定。
最后,根据您的需要,另一个选项是编写一个更通用的脚本,并通过cron将其安排在特定date/时间运行,以自动执行该过程。
BTW:
/ usr / sbin / userdel不是你想要的命令。 这是为了删除本地用户帐户。
-Brendan