▼Courier-IMAP + authldap で UNIXの追加グループ権限が有効にならない
Keywords: authldap, supplementary group, Courier-IMAP, Filesystem permissions-based shared folders
$Id$
仕様のようです。
▽状況
- authldap を使って、パスワード認証と uid#, gid#, $HOME を取得している
- /etc/group など、nsswitch.conf 配下のグループ情報で
グループ権限を追加している (supplementary groups)
- IMAP の共有フォルダを作っている
- 共有フォルダのアクセス制御はファイルシステムパーミッションで行っている
(全員同じuid#を使ってIMAP ACLするのではない)
IMAP 共有フォルダ を chmod・chgrp 属性で制御している場合、
通常であれば initgroups(uid,gid) にて
/etc/group での追加グループが設定されるので問題ないのですが、
authldap でとってきた uid# や gid# というのは、一般には
UNIXローカル側で意味があるわけでないためか、
initgroups() するのではなく、
setgid()とsetuid()だけ するように
なっています。
従って、authldap で認証されたユーザは追加グループが有効になりません。
authldapを使うのはUNIXアカウントがLDAP上にある場合ばかりではなく、
全ユーザ同一uid#,gid#でバーチャル郵便箱を作る場合も多いので、
この仕様はある意味正しい。
▽解決方法
- pam_ldap を使えるようにして、authpamで認証させる。
authpamにすればUNIXアカウントと認識されるので、追加グループが使えます。
-
- ソースを書き換えて、authldapで索いてきたユーザもローカルとして認識させる。
courier-imap側の修正だけでもいけると思いますが、正しくは
courier-authlibを修正、でしょう。
▽デバッグ出力
imap/imaplogin.c に パッチ
を当てて認証後の情報を見ると、UNIX (PAM) 認証と LDAP 認証での違いが出ます。
- LDAP認証 (authldap)
Jun 2 17:34:02 mail imapd: login_callback: sysusername=(null),sysuserid=1234,sysgroupid=10,homedir=/home/kabe,address=kabe,options=(null)
- UNIX認証 (authpam)
Jun 2 17:38:19 mail imapd: login_callback: sysusername=kabe,sysuserid=(null),sysgroupid=567,homedir=/home/kabe,address=kabe,options=(NULL)
auth_callback_default() で以下のような動作をするので、
LDAP認証では追加グループが使えません。
- sysusername → libmail_changeusername() → initgroups()+setuid()
- else sysuserid → libmail_changeuidgid() → setgid()+setuid()
▼凡例
- authldap, authpam
-
courier-authlib用語
- supplementary group / 追加グループ
-
/etc/passwd の書かれているプライマリグループではなく、
各ユーザに /etc/group に追加で付与するUNIXグループ。
initgroups(3) しないと権限はつかない。
- 共有フォルダ
-
IMAPには各自の「受信トレイ」("INBOX")の他に、
他ユーザの公開フォルダをアクセスできるようにする
共有フォルダ機能がある。
Courier-IMAP では "shared.user.folder"
として見える。
かべ@sra-tohoku.co.jp