如何通过 SUDOERS 限制在特定目录中运行命令?

Pra*_*ntB 14 sudo

我可以配置 sudo(通过 sudoers 文件)以允许用户在系统中的任何文件或目录上运行chownchmod命令。但是,我只想授予用户权限以对驻留在/var/www/html目录下的文件运行这些命令。

如何限制特权命令,以便用户只能在预先指定的目录中运行它们?

例如:以下命令授予index.html文件777 权限。

sudo chmod 777 /var/www/html/index.html
Run Code Online (Sandbox Code Playgroud)

现在我想执行两个操作

  1. 限制sudo,使得用户可以仅运行chmodchown从内/var/www/html

  2. 禁止用户在系统的其他地方执行这些命令(例如命令不能在/var/www或 中运行/var/ftp

Gil*_*il' 14

如果不是不可能的话,你要问的是困难的。即使您确实限制了特定目录下文件的应用chown和限制chmod,有人仍然可以传递符号链接,从而影响他们喜欢的任何地方的文件。

幸运的是,您尝试做的很可能不是您实际问题的正确解决方案,并且还有另一种有效的方法。

通常,需要额外权限来创建和修改文件的用户会/var/www被添加到一个组中(通常www-data,或者您可能为站点的不同部分设置不同的组)。您可以使用组所有权和 setgid 目录:chgrp www-data /var/www/html; chmod g+ws /var/www/html允许www-data组中的每个人都可以写入/var/www/html目录,在该目录www-data中创建的文件将由该组而不是创建该文件的用户的主要组拥有。但是,这不是很灵活。

什么你应该做的是建立访问控制列表下的文件/var/www。首先,确保启用了 ACL:/var/www必须使用该acl选项挂载所在的文件系统。有关方面的帮助,请参阅使目录中的所有新文件可供组访问。还要安装 ACL 实用程序(getfaclsetfacl)。然后向/var/www/html应该拥有它们的用户授予对树下的额外权限。您可以设置每个用户的 ACL,但将应该对文件系统的一部分具有相同权限的用户放在一个组中并为该组设置 ACL 通常更容易。例如,如果组中的用户html-writers应该对 下的树具有读写访问权限/var/www/html

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html
Run Code Online (Sandbox Code Playgroud)

  • @KajMagnus 这是不灵活的,因为 root 必须管理组,而文件只能属于一个组。ACL 允许任何用户选择谁可以访问他们拥有的文件,并且可以在 ACL 中提及多个用户和组。 (3认同)