[Armadillo:07293] Re: Armadillo-420でのパスワード変更
Takenoshita Koyo
email@hidden
2011年 5月 27日 (金) 19:45:36 JST
Masahiro Iino さんは書きました:
> 飯野です
>
> 自己レスです。
> getspnumの
getspnam ですよね?(uじゃなくてa)
普段は、glibcで定義されているライブラリ関数を使用していると思います。
> ソースはbusybox内のlibpwdgrp/pwd_grp.cでした。
http://linux.die.net/man/1/busybox の Libc Nss の部分に書いてあるように、
CONFIG_USE_BB_PWD_GRP=yでないと、busybox/libpwdgrp/pwd_grp.cはコンパイル
されないはずです。
[ATDE ~]$ cd atmark-dist/user/busybox/
[ATDE ~/atmark-dist/user/busybox/]$ make menuconfig
として、以下のオプションを選択してあげると、glibcではなく
busybox内で定義したgetspnam()を使うようになってくれると思います。
BusyBox Configuration
Login/Password Management Utilities
[*] Use internal password and group functions rather than system functions
--- Common options for adduser, deluser, login, su
[*] Support for shadow passwords
[*] Use busybox shadow password functions
コンフィギュレーションを変更してビルドしなおした後は、
以下のように中間ファイルがたくさん生成されます。
[ATDE ~/atmark-dist/user/busybox/]$ ls libpwdgrp/
Makefile __pgsreader.o fgetspent.o getgrgid_r.o getpwent_r.o getspent.o libpwdgrp.a sgetspent.o
Makefile.in fgetgrent.o fgetspent_r.o getgrnam.o getpwnam.o getspent_r.o putgrent.o sgetspent_r.o
__parsegrent.o fgetgrent_r.o getgrent.o getgrnam_r.o getpwnam_r.o getspnam.o putpwent.o
__parsepwent.o fgetpwent.o getgrent_r.o getpw.o getpwuid.o getspnam_r.o putspent.o
__parsespent.o fgetpwent_r.o getgrgid.o getpwent.o getpwuid_r.o initgroups.o pwd_grp.c
libpwdgrp/ 内の関数は、内部でshadowファイルへのパスを持っているので、
以下のように変更してビルドしてみました。
--- a/user/busybox/libpwdgrp/pwd_grp.c
+++ b/user/busybox/libpwdgrp/pwd_grp.c
@@ -44,13 +44,13 @@
#include "shadow_.h"
#ifndef _PATH_SHADOW
-#define _PATH_SHADOW "/etc/shadow"
+#define _PATH_SHADOW "/etc/config/shadow"
#endif
#ifndef _PATH_PASSWD
-#define _PATH_PASSWD "/etc/passwd"
+#define _PATH_PASSWD "/etc/config/passwd"
#endif
#ifndef _PATH_GROUP
-#define _PATH_GROUP "/etc/group"
+#define _PATH_GROUP "/etc/config/group"
#endif
が、挙動は変わらないですね。。。
> ここにデバッグ文をいれて再コンパイルした所、どうやら/etc/shadowが
> ちゃんと読めていないということがわかりました。
デバッグ文を入れて、挙動が変わるということは、上記の設定はしているの
でしょうか?
> そこでchmod 644 /etc/shadowとしてあげるとOld password:は通過するように
> なりました。(いいのかそれで?)
otherユーザーが読めてしまったら、shadowの意味が無くなっちゃいますね。
> busyboxには+sをつけているので、出来そうなものなのですが。
そうですね。
> #というか/etc/shadowはsetuidしてから読まないから、上記で644にしないと
> #読めないわけで、順番がおかしいんじゃないだろうか?・・・
うーん。
> 何故setuidが上手く行かないのか、ご教授願えればと思います。
失敗したときのerrnoは何になっていますか?
--
Koyo Takenoshita
armadillo メーリングリストの案内