IQA*_*eas 12 root permissions access-control
我有一个用户对系统的访问权限有限(也就是说,他不是 sudoer);我们叫他鲍勃吧。
我有一个脚本或二进制文件,我,系统管理员,信任它,并且以 root 身份运行它不会有任何问题;让我们调用脚本get-todays-passphrase.sh
。此脚本的工作是从位于 中的“私有”(由 Bob 以外的用户/组甚至 root 用户/组拥有)文件中读取数据/srv/daily-passphrases
,并仅输出文件中的特定行:与今天的日期对应的行.
像鲍勃用户不容许知道明天的密码,即使它的文件中列出。出于这个原因,该文件/srv/daily-passphrases
是由Unix许可保护的,所以非root用户喜欢鲍勃没有允许直接访问文件。但是,它们可以随时运行get-todays-passphrase.sh
脚本,从而返回“过滤后的”数据。
总结一下(TL;DR版本):
是否可以在 Unix 文件权限内执行此操作?或者,如果 Bob 启动了一个脚本,该脚本是否总是注定要以与 Bob 相同的权限运行?
Ben*_*ack 14
这实际上很常见,也很简单。 sudo
允许您限制用户可以调用的特定应用程序。换句话说,您不必给它们全部 root 或什么都不给;您可以授予他们运行特定命令的sudo
权限。这正是您想要的,并且对于允许用户通过 SSH 等推送 Git 存储库之类的事情来说,这是非常常见的做法。
要做到这一点,你所要做的就是添加一行/etc/sudoers
看起来像
bob ALL=(root) NOPASSWD: /path/to/command/you/trust
Run Code Online (Sandbox Code Playgroud)
(该NOPASSWD:
部分不是必需的,但在这种情况下很常见。)此时,bob
可以/path/to/command/you/trust
通过 sudo调用,但没有其他方法。
也就是说,给予某人根 - 我们在这里所做的 - 可能并不完全是您想要的。值得注意的是,如果您的脚本中有任何缺陷,您就有可能让您的盒子扎根。出于这个原因,您可能更喜欢创建一个专门拥有特殊文件的用户 - 例如,specialuser
- 然后chown
将文件交给他们,并让/etc/sudoers
makebob
成为该特殊用户。在这种情况下,您添加的sudoers
行将只是
bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust
Run Code Online (Sandbox Code Playgroud)
正如评论中指出的那样,出于本答案中解释的原因,Linux 内核在处理脚本时会忽略setuid / setguid位。我不会复制本杰明的答案,而是用executabe替换脚本以使我的答案正确。
简短回答:使用setgid
详细步骤:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
这样,您的可执行文件将以所属组的权限运行,从而能够读取文件。
归档时间: |
|
查看次数: |
3070 次 |
最近记录: |