Linux のアクセス許可とグループ メンバーシップに関する奇妙な動作に遭遇し、頭を悩ませています。状況は次のとおりです。
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)
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
グループ 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)
新しいターミナルを開き、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
別のターミナルで、root として、グループ alice での bob のメンバーシップを取り消します。
(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
ここで終了し、再度 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 シェルを実行しているマシン上にあります。)