5

Linux のアクセス許可とグループ メンバーシップに関する奇妙な動作に遭遇し、頭を悩ませています。状況は次のとおりです。

  1. Alice と Bob の 2 人のユーザーがいます。

    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. グループ alice (gid=3000) をボブの二次グループの 1 つとして追加します

    (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. 新しいターミナルを開き、bob として su し、アリスのホーム ディレクトリで権限をテストします。

    (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 として、グループ alice での bob のメンバーシップを取り消します。

    (root)
    root@KAL:~# usermod -G 3001 bob
    root@KAL:~# id bob
    uid=3001(bob) gid=3001(bob) groups=3001(bob)
    
  6. さて、私がボブとして訴えられたターミナルに戻ると、メンバーシップの取り消しは認識されているが、尊重されていないことは明らかです。

    (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. ここで終了し、再度 bob として su すると、グループ メンバーシップの変更が尊重されるようになります。

    (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 シェルを実行しているマシン上にあります。)

4

1 に答える 1

4

グループ メンバーシップは、プロセス (現在のシェル) に適用されるため、セッション中も維持されます。

于 2012-05-16T07:52:33.567 に答える