在 Ubuntu 中向其他用户(而非所有用户)授予文件或目录的访问权限

在 Ubuntu 中向其他用户(而非所有用户)授予文件或目录的访问权限

如何允许一个用户(但不是全部)访问 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 的情况下完全实现。

答案1

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

$ sudo adduser bob alice

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

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

$ 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

所以我不得不关闭 shell,甚至关闭隧道(我通过 SSH 隧道连接到 Ubuntu 机器)并打开一个新 shell(在我再次连接到 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(在用户下运行www-data),那么该服务将被重新启动!

相关内容