问题是如何允许一个用户(但不是全部!)访问另一个用户的文件。
我有一个目录,/home/alice/dir
其所有者为alice
:
$ cd /home/alice
$ ls -l
drwxr-x--- 2 alice alice 4096 Feb 10 21:24 dir
即,所有者alice
和组alice
具有读取/执行访问权限。
我想允许用户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
$ getent group alice
alice:x:1001:bob
$ cd dir
bash: cd: test: Permission denied
怎么了?
用户创建时
sudo adduser alice
sudo adduser bob
sudo adduser eve
答案1
问题中描述的做法是正确的。
但是,当您更新组时,当前进程,包括您的 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
是服务的话,那服务就要重新启动!