こんにちは、倉谷です。
原田さんお返事ありがとうございました。
教えていただいたようにソースを修正し、
再び実験してみましたところ、
ログには以下のように出力されました。
/home/foo ディレクトリを作成できる権限がないというメッセージですかね。
-----------------------------------------------------------
日時 ホスト PAM-mkhomedir[5640]: unable to create home diretory /home/foo: error Permission denied
日時 ホスト su(pam_unix)[5640]: session opened for user foo by hoge(uid=0)
-----------------------------------------------------------
/home ディレクトリのアクセス権設定は次のようになっております。
drwxr-xr-x root root home/
ユーザー foo に /home への書き込み権限がないからだめなのでしょうか。
そこで、/home を chmod 777 にして、もう一度実験してみましたところ、
以前と同様に以下のメッセージが出ましたが、
-----------------------------------------------------------
su: warning: cannot change directory to /home/foo: No such file or directory
Creating home directory '/home/foo'.
could not open session
-----------------------------------------------------------
しかし、/home/foo は作成されました。
drwxr-xr-x foo root foo/
とりあえず原因は突き止めることができました。
原田さんありがとうございました。
ですが、以前として次の問題があります。
(1) /home をアクセス権 777 に設定したくない。
(2) ホームディレクトリが存在しない場合、一回目の su でホームディレクトリを
作成してくれるが、su 自体は失敗する。したがって2回目の su で初めて成功する。
(1) の問題を回避するには PAM モジュールの中で root 権限を取得しないと
いけないのでしょうね。PAM モジュールの書き方を知らないのですが、
一度勉強してみようと思います。
(2) については、"su: warning: cannot change directory to..." という警告を
出しているモジュールによって失敗させられているように思いますので、
そのモジュールが何であるかをまず突き止めてみないといけませんね。
以上の事柄について、調べてみることにします。
このようなバグが解決されていないのは、
pam_mkhomedir を使う人があんまりいないからでしょうかね。
もし完全なソースが作成できたら、有益なフィードバックになりそうなので、
ご報告したいと思います。
> 原田です。
>
(中略)
>
> うーん…検索してみましたが、同じ現象に遭遇した方が何人かいるのに、解決策はどこ
> にもないみたいですね。
> とりあえず、下のパッチをmodules/pam_mkhomedir/pam_mkhomedir.cに当てて再コンパ
> イルすれば、何かわかる…かもしれません。
> あと、実際のユーザ名は何なんでしょうか?
>
> **************************切り取り線**************************
> --- pam_mkhomedir.c_ORIG Wed Dec 12 03:10:06 2001
> +++ pam_mkhomedir.c Wed Dec 12 03:11:09 2001
> @@ -39,6 +39,8 @@
> #include <stdio.h>
> #include <string.h>
> #include <dirent.h>
> +#include <errno.h>
> +
>
> /*
> * here, we make a definition for the externally accessible function
> @@ -198,8 +200,8 @@
> /* Crete the home directory */
> if (mkdir(pwd->pw_dir,0700) != 0)
> {
> + _log_err(LOG_DEBUG, "unable to create home directory %s: error %s",pwd->pw_dir,strerror(errno));
> free(remark);
> - _log_err(LOG_DEBUG, "unable to create home directory %s",pwd->pw_dir);
> return PAM_PERM_DENIED;
> }
> if (chmod(pwd->pw_dir,0777 & (~UMask)) != 0 ||
> **************************切り取り線**************************
>
>