将文件或目录的访问权限授予Ubuntu中的其他用户,但不是所有用户


4

如何在Ubuntu中允许一个用户(但不是全部)访问另一用户的文件?

我有一个目录/home/alice/dir所拥有alice

$ cd /home/alice
$ ls -l
drwxr-x---  2 alice alice       4096 Feb 10 21:24 dir

即,所有者alice和组alice具有读取/执行访问权限。当然,/home并且/home/alice对于所有(drwxr-xr-x)都是可读/可执行的,这是Ubuntu的默认配置。

我想允许用户bob访问此目录,但其他任何用户eve都不能访问。

到目前为止,我所做的是:

$ sudo adduser bob alice

现在

$ getent group alice
alice:x:1001:bob

所以现在bob就在小组里alice

但是,仍然bob无法访问目录:

$ whoami
bob
$ cd /home/alice
$ pwd
/home/alice
$ ls -l
drwxr-x---  2 alice alice       4096 Feb 10 21:24 dir
$ groups bob
bob : bob alice
$ cd dir
bash: cd: test: Permission denied

怎么了?

用户创建于

sudo adduser alice
sudo adduser bob
sudo adduser eve

Ubuntu 14.04。我认为未使用ACL,并且我不想使用它们-我认为没有ACL,我想要的东西应该可以完全实现。

Answers:


3

问题中描述的方法是正确的:

$ sudo adduser bob alice

但是,您不会立即看到更改:必须重新启动所有当前运行的进程和服务,才能看到更改。

这是因为当您更新组时,当前正在运行的进程和服务(包括您的Shell)的权限不会被更新。因此,在我的情况下groups(当前的shell bob在更改组之前启动)和groups bob(用户的当前权限bob)显示了不同的结果:

$ whoami
bob
$ groups bob # current membership of bob
bob alice
$ groups     # shell run by bob BEFORE the groups changed
bob
$ cd /home/alice/dir
bash: cd: test: Permission denied

所以我不得不关闭外壳,甚至关闭隧道(我通过SSH隧道连接到Ubuntu盒子)并打开一个新的外壳(在我再次连接到SSH之后),然后我看到了

$ whoami
bob
$ groups bob
bob alice
$ groups     # current shell run by bob AFTER the groups changed
bob alice
$ cd /home/alice/dir
$ pwd
/home/alice/dir

如果bob是服务,例如apache2(在user下运行www-data),则该服务将重新启动!


由于您的回答很好,我想建议您添加所有上述目录(/ home / alice)也应该是组可读的并且也是(?)可执行文件,否则仍无法访问/ home / alice / dir。
agtoever,

谢谢!我在问题(不回答)的顶部添加了此内容。
亚历山大·盖布赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.