[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 メーリングリストの案内