ユーザをグループに追加
「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」にしたいよな、というようなことはまた別途。