我试图允许 sudoers 中的 find 命令但禁止find ... -exec rm
或find ... -delete
。
以下是我所做的:
$ sudo grep find /etc/sudoers.d/myUser
myUser ALL=!/usr/bin/find * -exec *
myUser ALL=!/usr/bin/find * -delete *
myUser ALL=/usr/bin/find *
$
但是当我尝试 find * -exec 命令时,它可以工作而不是被禁止:
$ sudo su - myUser
$ sudo find var/www/html/ ! -type d -exec ls -l {} +
lrwxrwxrwx 1 adn adn 23 Mar 21 2023 var/www/html/index.html -> index.nginx-debian.html
$
我怎样才能做到这一点?
(来源:
man 5 sudoers
)在您的情况下,当您使用或
myUser ALL=/usr/bin/find *
时是最后一次匹配,因此它适用。-exec
-delete
改变顺序:
我的测试(
sudo
1.9)表明你还需要禁止在
-delete
末尾使用(-exec
不需要类似的行,因为-exec
总是需要进一步的参数)。如果您的find
设计工作方式是使用给定的零个起始路径,那么您还需要:我认为您可能也想禁止
-ok
。根据 的实现find
,您可能还想禁止其他参数:-execdir
、-okdir
、-fprint
、-fprintf
、-fprint0
,甚至更多。所有这些附加行都应放在之后
myUser ALL=/usr/bin/find *
。无法识别所有可能被滥用的参数和语法显然会导致安全漏洞。