thb*_*thb 32 permissions hard-link
两个 setuid 程序/usr/bin/bar
和/usr/bin/baz
,共享一个配置文件foo
。配置文件的模式是0640
,因为它包含敏感信息。一个程序运行为bar:bar
(即作为用户栏,组栏);另一个作为baz:baz
. 更改用户不是一种选择,甚至更改组也不可取。
我希望将单个配置文件硬链接为/etc/bar/foo
和/etc/baz/foo
。但是,这失败了,因为据我所知,该文件必须属于root:bar
或root:baz
.
可能的解决方案:创建一个新组,barbaz
其成员为bar
和baz
。让foo
属于root:barbaz
。
这对我来说似乎是一个非常严厉的解决方案。有没有更简洁、更简单的方法来foo
在两个程序之间共享配置文件?
目前,我正在维护该文件的两个相同副本。这有效,但显然是错误的。什么是正确的?
有关信息:我对 Unix 组几乎没有经验,对 setgid(2) 没有任何经验。
Ste*_*ris 50
您可以使用 ACL,以便两个组中的人都可以读取该文件。
chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file
Run Code Online (Sandbox Code Playgroud)
现在bar
和baz
组都可以读取文件。
例如,这是 bin:bin 拥有的文件,模式为 640。
$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo
Run Code Online (Sandbox Code Playgroud)
这+
意味着有一个 ACL 集,所以让我们来看看它。
$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---
Run Code Online (Sandbox Code Playgroud)
我们可以看到一行group:sweh:r--
:这意味着组中的人sweh
可以阅读它。
嘿,就是我!
$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)
Run Code Online (Sandbox Code Playgroud)
是的,我可以读取文件。
$ cat foo
data
Run Code Online (Sandbox Code Playgroud)
use*_*999 23
您可能需要重新考虑这些陈述:
可能的解决方案:创建一个新组 barbaz,其成员为
bar
和baz
。让foo
属于root:barbaz
。这对我来说似乎是一个非常严厉的解决方案。有没有更简洁、更简单的方法来
foo
在两个程序之间共享配置文件?
为什么创建一个新组很笨拙?与 ACL 相比,这样做具有以下优势:
/usr/bin/bar
和的假设/usr/bin/baz
,但这两个程序可以共享一个配置文件是相关的。这表明这些程序是自然相关的。为他们创建一个新组似乎描述了一种实际存在的关系,应该触发行为(例如读取公共配置文件的权限)。我个人认为 ACL 是这里的严厉解决方案,而组是更简单的传统 Unix 方式。
Baa*_*rud 16
我认为这将是 Access?Control?Lists (ACL) 的典型用途。将两个用户(或组)添加到配置文件的 ACL 中:
/etc/foo root:root rw------- # Traditional Unix ownership and permission for foo
Run Code Online (Sandbox Code Playgroud)
$ setfacl -m user:bar:rw- /etc/foo # 允许用户 bar 读写 foo $ setfacl -m user:baz:rw- /etc/foo # 也允许用户 baz 读写 foo
您可能必须先安装 acl-package。
归档时间: |
|
查看次数: |
2461 次 |
最近记录: |