如何允许一个用户(但不是全部)访问 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 )和(用户的当前权限)显示了不同的结果: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
所以我不得不关闭 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
),那么该服务将被重新启动!