如何授予用户通过 sudo 仅修改特定受保护文件的权利

如何授予用户通过 sudo 仅修改特定受保护文件的权利

我需要授予用户通过 sudo 修改一些仅具有只读访问权限的文件的权限。

例如,我想授予用户'主持编辑' 调整 '/etc/hosts'文件。我在 sudoers 中添加了以下行:

hosteditor ALL=(root) /usr/bin/vim /etc/hosts

现在,用户主持编辑只能使用 vim 来修改 /etc/hosts 文件。但是如果这些用户在修改文件时输入/bin/sh 复制代码他将获得以 root 权限执行所有命令的授权。

我应该怎么做才能允许用户仅修改特定文件而不会导致系统被黑客入侵。

答案1

经过对这个问题的一些研究,我找到了解决这个问题的第三种方法。

通过编辑 sudoers,我们可以授予用户运行的权限sudo编辑。这是修改 root 权限文件的安全方式,不存在黑客入侵的可能性。所以答案是

hosteditor ALL=(root) sudoedit /etc/hosts

答案2

不要为此使用 SUDO。相反,将 hostingitor 添加到一个组中,并使用 POSIX 文件 ACL 将写入权限委托给该组。查找http://linux.die.net/man/1/setfacl用于管理访问控制列表的命令,以及http://linux.die.net/man/5/acl有关 Linux 下 ACL 的实际说明。当然,这假设您使用的文件系统和身份验证系统支持 POSIX 文件访问控制列表。为了确保权限保持应用,您可能希望将 ACL 的应用委托给配置管理工具。Puppet 可以执行 POSIX ACL(请参阅https://github.com/dobbymoodge/puppet-acl)。CFEngine 可以做到这一点(参见https://auth.cfengine.com/archive/manuals/cf-manuals/cf2-Reference#acl),我相信 Chef 也能做到。

另一个选项是提供一个命令或服务,托管编辑器可以使用该命令或服务从数据库/电子表格和模板生成 /etc/hosts 文件。这将增加灵活性,并使您能够将控件放入命令或服务中。

我相信还有其他好方法可以解决这个问题,包括使用单独的 DNS 实例(如果使用 BIND9,甚至可以使用单独的 DNS 视图),并让 hostingitor 帐户能够使用 NSUPDATE 命令添加和删除记录(请参阅http://linux.die.net/man/8/nsupdate

祝你好运。

答案3

任何命令都可以从 vi 运行,包括 shell,因此允许用户通过 sudo 运行 vi 并不安全。更安全的选择是按照上一个答案的建议设置权限。如果您无法做到这一点,请配置 sudo 以允许复制到文件:

Cmnd_Alias CP_ETC_HOSTS = /bin/cp -v ./hosts /etc/hosts

他们可以编辑文件的副本并将其修改后的版本复制到 /etc/hosts。

相关内容