![向其他用户(而非所有用户)授予文件或目录的访问权限](https://linux22.com/image/868079/%E5%90%91%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7%EF%BC%88%E8%80%8C%E9%9D%9E%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%EF%BC%89%E6%8E%88%E4%BA%88%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%E7%9A%84%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.png)
问题是如何允许一个用户(但不是全部!)访问另一个用户的文件。
我有一个目录,/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
是服务的话,那服务就要重新启动!