[Armadillo:07292] Re: Armadillo-420でのパスワード変更

Masahiro Iino email@hidden
2011年 5月 27日 (金) 18:14:27 JST


飯野です

自己レスです。
getspnumのソースはbusybox内のlibpwdgrp/pwd_grp.cでした。
ここにデバッグ文をいれて再コンパイルした所、どうやら/etc/shadowが
ちゃんと読めていないということがわかりました。
そこでchmod 644 /etc/shadowとしてあげるとOld password:は通過するように
なりました。(いいのかそれで?)
しかし、最終的にはsetuid(0)でエラーとなり、Cannot change ID to root.と
なってしまいます。
busyboxには+sをつけているので、出来そうなものなのですが。
#というか/etc/shadowはsetuidしてから読まないから、上記で644にしないと
#読めないわけで、順番がおかしいんじゃないだろうか?・・・

とりあえず、これさえなんとかなれば、ユーザでのパスワード変更が
出来そうです。
何故setuidが上手く行かないのか、ご教授願えればと思います。

(2011/05/27 13:46), Masahiro Iino wrote:
> 飯野です。
> 
> ご返答、ありがとうございます。
> また、色々な方からのご助言ありがとうございます。
> 
> user/busybox/libbb/messages.cの
> #define SHADOW_FILE        "/etc/shadow"
>> #define SHADOW_FILE        "/etc/config/shadow"
> に変更して動かしてみました。
> rootでは、passwd変更が上手く行くようになりました。
> /etc/config/shadowが変更され、shadow-も/etc/configの下に出来ています。
> しかし、一般ユーザーでは、最初のOld password:入力時点で、
> Incorrect password.となって弾かれます。
> デバッグ文を入れたりして実験しました所、どうやら、
> passwd_main内のgetspnumでnullが返ってきてしまう為、pwd_to_spwdを
> 呼び出し、/etc/passwdでshadowである事を定義しているxがそのままパスワード
> として扱われ、その為に、入力パスワードと不一致だと言っているようです。
> 
> もしかしてと思い、デフォルトのイメージにて、guestでログインして、
> パスワード変更を試みましたが、同じ様に失敗します。
> rootであればOKです。
> rootであればOKな理由は、旧パスワードを尋ねないからです。
> つまりgetspnumが元凶なようですが、今はgetspnumのソースはどこだ?
> と探している所です。
> 
> 何か情報あればご助言下さい。
> 
> (2011/05/26 19:24), Takenoshita Koyo wrote:
>> 竹之下です。
>>
>>> コマンドにてパスワードを変更すると、リンクが消され、/etc/shadowに
>>> 実体が新たに作られてしまいます。
>> これは、一度/etc/shadow-というファイルを更新して、
>> それを/etc/shadowにrename()するという処理をしているから
>> のようです。
>> atmark-dist/user/busybox/loginutils/passwd.c::update_passwd() 参照
>>
>> 対処法としては、
>> 1. update_passwd() を変更して、リネームしないようにする
>> 2. /etc/shadowの代わりに、常に/etc/config/shadowを使うようにする
>> といった方法が思いつきます。
>>
>> 後者は、
>> user/busybox/libbb/messages.c
>>>> #define SHADOW_FILE        "/etc/shadow"
>> という行を書き換えて、ビルドしなおしてあげれば良いのではないかと思います。
>>
>> ただ、busybox全体でこの定義を流用しているので、busyboxの他の
>> コマンドも/etc/config/shadowを参照しにいくようになる気がします。
>> この影響がどこまで及ぶかは、分かりません。
>>
>> Masahiro Iino さんは書きました:
>>> 飯野と申します。
>>>
>>> Armadillo-420にてパスワードを変更出来る様にしたいと思い、
>>> /etc/config/shadowに実体を置き、/etcからリンクを貼りました。
>>> これでもパスワード認証は問題なく出来るのですが、passwd
>>> コマンドにてパスワードを変更すると、リンクが消され、/etc/shadowに
>>> 実体が新たに作られてしまいます。
>>> これだと、flatfsdで保存しても保存されないのですが、何か良い方法は
>>> ありませんでしょうか?
>>> #勿論、出来た/etc/shadowを/etc/configにコピーすればいいのはわかって
>>> #いますが、ユーザにそれをやれというのも酷な気がするので・・・
>>>
>>> ご教授頂けると幸いです。
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>
>>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 



armadillo メーリングリストの案内