现有会话不会更改组成员身份

时间:2012-05-16 07:35:04

标签: linux bash ubuntu permissions

我遇到了Linux权限和群组成员身份的奇怪行为让我摸不着头脑。情况如下:

  1. 我有两个用户:alice和bob

    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)
    
  2. 在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
    
  3. 我将group alice(gid = 3000)添加为bob的二级组之一

    (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)
    
  4. 我打开一个新的终端,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
    
  5. 在一个单独的终端中,作为root用户,我撤销了bob在group alice中的成员身份。

    (root)
    root@KAL:~# usermod -G 3001 bob
    root@KAL:~# id bob
    uid=3001(bob) gid=3001(bob) groups=3001(bob)
    
  6. 现在,回到我被称为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
    
  7. 如果我现在退出,并再次以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$ 
    
  8. 这是使用su的一些神器吗?组成员身份是否仅在shell的开头确定?

    (这是在运行Ubuntu Maverick 10.10 x86_64 2.6.35-32-generic并运行bash shell的机器上。)

1 个答案:

答案 0 :(得分:4)

组会员资格在会话期间保持不变,因为它们应用于流程,即您当前的shell。