我在 Linux 权限和组成员身份方面遇到了一种奇怪的行为,这让我摸不着头脑。 情况如下:
-
我有两个用户:爱丽丝和鲍勃
alice@KAL:~$ id alice uid=3000(alice) gid=3000(alice) groups=3000(alice) alice@KAL:~$ id bob uid=3001(bob) gid=3001(bob) groups=3001(bob)
-
在 Alice 的主目录中,有一个子目录,我想授予 bob 写入权限。
(as alice) alice@KAL:~$ mkdir shared alice@KAL:~$ chmod g+w shared alice@KAL:~$ ls -l total 4 drwxrwxr-x 2 alice alice 4096 2012-05-15 23:56 shared
-
我添加组爱丽丝(gid=3000(作为鲍勃的次要组之一
(as root) root@KAL:~# id bob uid=3001(bob) gid=3001(bob) groups=3001(bob) root@KAL:~# usermod -G 3000 bob root@KAL:~# id bob uid=3001(bob) gid=3001(bob) groups=3001(bob),3000(alice)
-
我打开一个新终端,su 作为 bob,并在 Alice 的主目录中测试我的权限。
(initially as kp, su'ing as bob) kp@KAL:~$ sudo su bob bob@KAL:/home/kp$ cd /home/alice bob@KAL:/home/alice$ ls -l total 4 drwxrwxr-x 2 alice alice 4096 2012-05-15 23:56 shared bob@KAL:/home/alice$ touch test touch: cannot touch `test': Permission denied <-- fails as expected bob@KAL:/home/alice$ cd shared bob@KAL:/home/alice/shared$ touch test <-- succeeds as expected bob@KAL:/home/alice/shared$ ls -l total 0 -rw-r--r-- 1 bob bob 0 2012-05-16 00:02 test
-
在一个单独的终端中,作为root,我撤销了鲍勃在爱丽丝组中的成员资格。
(root) root@KAL:~# usermod -G 3001 bob root@KAL:~# id bob uid=3001(bob) gid=3001(bob) groups=3001(bob)
-
现在,回到我被起诉为鲍勃的终端,很明显,会员资格撤销得到了承认,但没有得到尊重。
(as bob) bob@KAL:/home/alice/shared$ id bob uid=3001(bob) gid=3001(bob) groups=3001(bob) <-- group 3000 no longer secondary group bob@KAL:/home/alice/shared$ touch test2 <-- should fail bob@KAL:/home/alice/shared$ ls -l total 0 -rw-r--r-- 1 bob bob 0 2012-05-16 00:02 test -rw-r--r-- 1 bob bob 0 2012-05-16 00:20 test2 bob@KAL:/home/alice/shared$ rm test <-- this should also fail bob@KAL:/home/alice/shared$ ls -l total 0 -rw-r--r-- 1 bob bob 0 2012-05-16 00:20 test2
-
如果我现在退出,并且 su 再次作为 bob,则更改是现在尊重组成员资格。
(as bob) bob@KAL:/home/alice/shared$ exit exit kp@KAL:~$ sudo su bob bob@KAL:/home/kp$ cd /home/alice/shared bob@KAL:/home/alice/shared$ ls -l total 0 -rw-r--r-- 1 bob bob 0 2012-05-16 00:20 test2 bob@KAL:/home/alice/shared$ touch test3 touch: cannot touch `test3': Permission denied <-- now fails as expected bob@KAL:/home/alice/shared$ id bob uid=3001(bob) gid=3001(bob) groups=3001(bob) bob@KAL:/home/alice/shared$
这是使用su的神器吗? 组成员身份是否仅在命令行管理程序开始时确定?
(这是在运行 Ubuntu Maverick 10.10 x86_64 2.6.35-32-generic 并运行 bash shell 的机器上。
组成员身份在应用于进程(即当前 shell(时在会话期间持续存在。