ユーザをグループに追加

subversion」用ユーザ「svn」でリポジトリを作成して、通常の作業は管理ユーザ「xxx」でやろうとすると、Permission deniedエラーがでる。だったら、管理ユーザを「svn」グループに追加しておいてあげればいいんじゃない? 以下、大はまりした記録。

ユーザの状況確認

xxx:~$ id ← 管理ユーザの確認
uid=1000(xxx) gid=1000(xxx) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),104(scanner),111(lpadmin),112(admin),1000(xxx)

svnグループへ管理ユーザを追加(間違った手順)

ググると「usermod -G subgroup user」としてサブグループを登録する場合は、いま所属しているサブグループをすべて登録しないとサブグループが消えてしまうので「/etc/group」を直接編集する方が楽、とあったのでそうする。

xxx:~$ e /etc/group ← /etc/groupの編集

svn:x:1001:xxx    ← 管理ユーザをsvnグループへ追加
xxx:~$ id      ← 管理ユーザの確認
uid=1000(xxx) gid=1000(xxx) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),104(scanner),111(lpadmin),112(admin),1000(xxx)

追加されない。なんでだ?

xxx:~$ sudo id xxx  ← sudoで管理ユーザの確認
uid=1000(xxx) gid=1000(xxx) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),104(scanner),111(lpadmin),112(admin),1000(xxx),1001(svn)

sudoで見ると追加されてる。これでいいのか?
ちょっと確認してみる。

xxx:~$ su svn       ← svnでログイン
svn:/home/xxx$ cd ~    ← svnのhomeへ
svn:~$ mkdir test     ← testディレクトリ作成
svn:~$ ls -al       ← 属性確認
drwxr-xr-x  5 svn  svn  4096 2008-04-27 02:19 test
svn:~$ chmod -R 775 test ← svnグループにWriteを追加
svn:~$ ls -al       ← 属性確認
drwxrwxr-x  5 svn  svn  4096 2008-04-27 02:19 test
svn:~$ exit        ← ログアウト

svnグループに所属していたら誰でも「test」ディレクトリ配下を操作できるようにしてみた。はたしてそうなるか?

xxx:/home/svnsvn$ mkdir test/t1 ← test/t1ディレクトリ作成
mkdir: cannot create directory `test/t1': Permission denied

がーん、やっぱりダメだ。グループがちゃんと追加できているかどうか確認しよう。

xxx:/home/svnsvn$ cd ~
xxx:~$ sudo grpck ← グループ確認
'xxx' is a member of the 'svn' group in /etc/group but not in /etc/gshadow

なんだ、「/etc/gshadow」へも追加しないといけないんじゃないか。

svnグループへ管理ユーザを追加(正しい手順)

ユーザを追加するときは「/etc/group」と「/etc/gshadow」の両方へ追加する。

xxx:~$ e /etc/group  ← /etc/groupの編集

svn:x:1001:xxx     ← 管理ユーザをsvnグループへ追加
xxx:~$ e /etc/gshadow ← /etc/gshadowの編集

svn:!::xxx       ← 管理ユーザをsvnグループへ追加

再度確認。

xxx:~$ sudo grpck ← グループ確認
xxx:~$ 

今度はOKだ。確認、確認。

xxx:~$ id ← 管理ユーザの確認
uid=1000(xxx) gid=1000(xxx) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),104(scanner),111(lpadmin),112(admin),1000(xxx)

追加されてない。がーん。
結論から言うと、これでちゃんと追加されてます。一度ログアウトしないと追加されたグループは有効にならないようです。

xxx:~$ exit ← ログアウト
xxx:~$ id ← 管理ユーザの確認
uid=1000(xxx) gid=1000(xxx) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),104(scanner),111(lpadmin),112(admin),1000(xxx),1001(svn)

OK。OK。

xxx:~$ cd /home/svn ← /home/svnへ
xxx:/home/svnsvn:~$ mkdir test/t1 ← test/t1ディレクトリ作成

OK。OK。こうやって「mkdir」や「touch」するとユーザとグループが「xxx」になってしまうので、グループは「svn」にしたいよな、というようなことはまた別途。