我需要授予用户修改一些只有只读访问的sudo文件。
例如,我想授予用户' hosteditor '修改' / etc / hosts '文件。 我添加到sudoers下面的行:
hosteditor ALL=(root) /usr/bin/vim /etc/hosts
现在,用户hosteditor只能使用vim来修改/ etc / hosts文件。 但是如果这些用户在修改文件的时候input!/ bin / sh,他将得到授权执行所有具有root权限的命令。
我应该做什么来授予用户修改只有特定的文件没有可能性黑客系统。
经过一些研究这个问题,我发现解决这个问题的第三个变种。
通过编辑sudoers,我们可以授予用户运行sudoedit的权限。 这是修改纯根文件的安全方式,没有破解的可能性。 所以答案是
hosteditor ALL=(root) sudoedit /etc/hosts
不要为此使用SUDO。 而是将hosteditor添加到组中,然后使用POSIX File ACL委派对该组的写入访问权限。 查看http://linux.die.net/man/1/setfacl获取pipe理访问控制列表的命令,并在http://linux.die.net/man/5/acl上进行实际写入Linux下的ACL。 当然,这是假定您正在使用支持POSIX文件访问控制列表的文件系统和身份validation系统。 为确保权限保持不变,您可能需要将ACL的应用程序委托给configurationpipe理工具。 木偶可以做POSIX ACL(请参阅https://github.com/dobbymoodge/puppet-acl )。 CFEngine可以做到这一点(请参阅https://auth.cfengine.com/archive/manuals/cf-manuals/cf2-Reference#acl ),我相信厨师也可以。
另一个select是提供一个命令或服务,托pipe人可以使用它来从数据库/电子表格和模板生成/ etc / hosts文件。 这将增加灵活性,并使您能够将控件放入命令或服务中。
我相信还有其他一些很好的方法可以解决这个问题,包括一个单独的DNS实例(如果使用BIND9,甚至是一个单独的DNS视图),并给予托pipe帐户使用NSUPDATE命令添加和删除logging的function(请参阅http://linux.die.net/man/8/nsupdate )
祝你好运。
任何命令都可以从vi运行,包括一个shell,所以允许用户通过sudo运行vi是不安全的。 一个更安全的select是设置权限,因为以前的答案build议。 如果你不能这样做,configurationsudo允许复制到文件:
Cmnd_Alias CP_ETC_HOSTS = / bin / cp -v ./hosts / etc / hosts
他们可以编辑该文件的副本,并将其修改后的版本复制到/ etc / hosts。