Armadilloフォーラム

root の ID とパスワードを入力せずにログインしたい

chihiro

2014年9月30日 16時32分

いつもお世話になっております。
外山と申します。

PC と Armadillo810 を USB シリアル変換アダプタを介して接続し
ATDE5 にて
LANG=C minicom --noinit --wrap --device /dev/ttyUSB0
として、アルマジロ基板に接続しますが、
通常は、この状態で root の ID とパスワードの2つを入力してログインしますが
この2つを入力せずに root としてログインする事は可能でしょうか?

https://armadillo.atmark-techno.com/forum/armadillo/755
を参考に
etc/securetty
に ttyUSB0 を追記して、ユーザーランドイメージを作成したのですが
それで boot しても
armadillo810-0 login:
と表示されてしまいます。

何か手順が間違っていますでしょうか?

以上、よろしくお願いします。

コメント

saitoh

2014年9月30日 18時07分

齊藤と申します
securettyはrootのログインを許すかどうかの設定です。ユーザ名とパスワードはどっちにしても必要です。

以下は検証はせずに推論だけの話になりますが・・・

・inittabにgettyではなく /bin/login root を登録する
・passwdファイルでrootのパスワードを 無し にする
でいけるんではないでしょうか。
ただしこれだと端末の設定がされないままになるかもしれません。
~root/.profile などで stty ほげほげ  を書かないといけないかも。

y.nakamura

2014年9月30日 18時52分

中村です。

基本的な考えは、齋藤さんの

> ・inittabにgettyではなく /bin/login root を登録する
> ・passwdファイルでrootのパスワードを 無し にする
> でいけるんではないでしょうか。

になると思います。

> ただしこれだと端末の設定がされないままになるかもしれません。
> ~root/.profile などで stty ほげほげ  を書かないといけないかも。

あと、loginコマンドは入出力の設定はしないはずなので、
STDIN,STDOUT,STDERRの設定も必要だっと思います。
Linuxでの一般的な話になりますが、
/bin/login root < /dev/ttyXXX > /dev/ttyXXX 2>&1
という感じかと・・・

Armadilloで試したことはないので、動くかどうかわかりません。

--
なかむら

y.nakamura

2014年9月30日 19時16分

中村です。

user/busybox/busybox-1.20.2/loginutils/login.cを見ると、
ソースの最初のところに

//usage:#define login_trivial_usage
//usage:       "[-p] [-h HOST] [[-f] USER]"
//usage:#define login_full_usage "\n\n"
//usage:       "Begin a new session on the system\n"
//usage:     "\n        -f      Don't authenticate (user already authenticated)"
//usage:     "\n        -h      Name of the remote host"
//usage:     "\n        -p      Preserve environment"

というコメントが書いてあって、このバージョンのloginコマンドには
"-f"というオプションがあります。
ソースコードもざっと見てみたところでは、これを付けると
パスワード認証をしないみたいなので、

> > ・passwdファイルでrootのパスワードを 無し にする
> > でいけるんではないでしょうか。

パスワード設定をナシにする(/etc/shadowのrootのパスワード部分を
空欄にする)ことなしに、パスワード入力をスキップできるのでは
ないかと思われます。

--
なかむら

chihiro

2014年10月3日 15時53分

齊藤様、中村様

いつもお世話になっております。

返信して頂いてありがとうございました。
またこちらの方での確認が遅れてしまい、すみません。

・inittab に getty の代わりに login コマンドを書く事
・login コマンドに -f を付ける事でパスワード認証がパスできる事
などを踏まえ

/etc/inittab
::respawn:/sbin/getty -L 115200 ttySC2 vt102
の部分を
::respawn:/bin/login -f root < /dev/ttySC2 > /dev/ttySC2 2>&1
とした後にイメージファイルを作成し、それを FLASH に書いて
reboot する事で、ID、パスワード無しでログインできました。

イメージファイルの一部のファイルだけの修正なので
https://armadillo.atmark-techno.com/blog/46/687
BADKNOWHOW: romfsイメージをATDE上でマウントする方法
を参考にしました。

2>&1
の部分が理解できなかったのですが
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/HowToUnix/2-1.html
を参考にしました。

いろいろと教えて頂いてありがとうございました。

> 中村です。
>
> user/busybox/busybox-1.20.2/loginutils/login.cを見ると、
> ソースの最初のところに
>

> //usage:#define login_trivial_usage
> //usage:       "[-p] [-h HOST] [[-f] USER]"
> //usage:#define login_full_usage "\n\n"
> //usage:       "Begin a new session on the system\n"
> //usage:     "\n        -f      Don't authenticate (user already authenticated)"
> //usage:     "\n        -h      Name of the remote host"
> //usage:     "\n        -p      Preserve environment"
> 

> というコメントが書いてあって、このバージョンのloginコマンドには
> "-f"というオプションがあります。
> ソースコードもざっと見てみたところでは、これを付けると
> パスワード認証をしないみたいなので、
>
> > > ・passwdファイルでrootのパスワードを 無し にする
> > > でいけるんではないでしょうか。
>
> パスワード設定をナシにする(/etc/shadowのrootのパスワード部分を
> 空欄にする)ことなしに、パスワード入力をスキップできるのでは
> ないかと思われます。
>
> --
> なかむら
>

y.nakamura

2014年10月3日 19時52分

中村です。

うまくいったようでよかったです。

> イメージファイルの一部のファイルだけの修正なので
> https://armadillo.atmark-techno.com/blog/46/687
> BADKNOWHOW: romfsイメージをATDE上でマウントする方法
> を参考にしました。

Armadilloのinitはrcが全部終わった後(rcから起動されるrc.localも)に
inittabのrespawnをチェックしますので、イメージファイルを書き換えずに、
/etc/config/rc.localでも実現できます。

ちょうど今やっている仕事でもrootでの自動ログインができると
作業が少し楽になるので、Armadillo-4x0で次のように試してみました。

/etc/config/rc.local

#!/bin/sh
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin
 
# rootのパスワードを「なし」にする
sed -i -e 's|^\(root:\)[^:]*\(:.*\)$|\1\2|' /etc/shadow
 
# inittabのgettyをloginに変更
sed -i /etc/inittab \
    -e 's|^::respawn:/sbin/getty.*$|::respawn:/bin/login root < /dev/ttymxc1 > /dev/ttymxc1 2>\&1|'

inittabにはgettyは1つしかないものとしています。
また、Armadillo-4x0のloginは"-f"オプションがないので、
/etc/shadowのrootのパスワードをナシに書き換えてます。

Armadillo-810の場合は↓こういうのでいけると思います。
/etc/config/rc.local

#!/bin/sh
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin
 
# inittabのgettyをloginに変更
sed -i /etc/inittab \
    -e 's|^::respawn:/sbin/getty.*$|::respawn:/bin/login -f root < /dev/ttySC2 > /dev/ttySC2 2>\&1|'

respawnを書き換えるsedの最後の"&1"の"&"の前には
バックスラッシュ"\\"を入れてください。

--
なかむら

chihiro

2014年10月7日 11時57分

中村様

いつもお世話になっております。

/etc/config/rc.local の方で sed を使って inittab の中の文字列を置換する事で
login コマンドを実行する方法
を教えて頂いてありがとうございます。

こちらの方法であればコンフィグ領域の修正だけで済むので
良い方法だと思います。

ただ、教えていただいた方法を試してみたのですが、うまく動作しませんでした。
armadillo810-0 login:
と表示され、ID、パスワードを求められてしまいます。
ログインした後に
/etc/config/rc.local

/etc/inittab
を確認すると、ちゃんと想定通りになっているのですが…

何か確認すべき点などがあれば、教えて頂きたいです。
よろしくお願いします。

---------------------------------------------------------
● /etc/config/rc.local 変更後

#!/bin/sh
 
. /etc/init.d/functions
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin
 
sed -i /etc/inittab \
    -e 's|^::respawn:/sbin/getty.*$|::respawn:/bin/login -f root < /dev/ttySC2 > /dev/ttySC2 2>\&1|'
 
#
# for USB Gadget "UVC Composite with ACM and RNDIS"
#   - activate UVC
#
USB_GADGET_IS_UVC_COMPOSITE=y
if [ "${USB_GADGET_IS_UVC_COMPOSITE}" = "y" ]; then
   /etc/init.d/uvc-gadget
fi

---------------------------------------------------------
● /etc/inittab (ログイン後に確認)

::sysinit:/etc/init.d/rc
 
::respawn:/bin/login -f root < /dev/ttySC2 > /dev/ttySC2 2>&1
 
::shutdown:/etc/init.d/reboot
::ctrlaltdel:/sbin/reboot

---------------------------------------------------------

y.nakamura

2014年10月7日 14時53分

中村です。

> こちらの方法であればコンフィグ領域の修正だけで済むので
> 良い方法だと思います。
>
> ただ、教えていただいた方法を試してみたのですが、うまく動作しませんでした。
> armadillo810-0 login:
> と表示され、ID、パスワードを求められてしまいます。

ごめんなさい。
Armadill-800シリーズで使っているbusyboxの実装を確認せずに書いてました。
今busyboxのソースをチェックしたところ、400シリーズで使っている
busybox-1.00.rc3のinitはrc終了後にinittabを読み直しているのですが、
800シリーズで使っているbusybox-1.20.2はそういう機能が入っていませんでした。

SIGHUPを受け付けるのはrcが全部終わった後みたいなので、
rc.localでinitへのシグナル送信による再読み込み指示も無理そうです。

ついでに・・・・
busybox-1.00.rc3のinitは/etc/config/inittabも読み込んでいるのですけど、
busybox-1.20.2にはそれもありませんでした。

--
なかむら

chihiro

2014年10月7日 15時47分

中村様

いつもお世話になっております。

busybox のバージョンにより挙動が異なる、との事で了解しました。

何か1つの事を実現するのに、いくつかのやり方があると言う事も
勉強になりました。
ありがとうございました。

y.nakamura

2014年10月7日 18時07分

中村です。

> busybox のバージョンにより挙動が異なる、との事で了解しました。

先ほどの3時ころの投稿は出先でちょっと時間ができた合間に
急いでbusyboxのソースを見て・・・でしたので、読み不足がありました。

その投稿での次の部分を訂正します。
> SIGHUPを受け付けるのはrcが全部終わった後みたいなので、

400シリーズのbusybox-1.00.rc3はこのとおりなのですが、
busybox-1.20.2は順番が逆になってました。
具体的には次の部分です。

int init_main(int argc UNUSED_PARAM, char **argv)
{
   ...
        /* Set up "reread /etc/inittab" handler.
         * Handler is set up without SA_RESTART, it will interrupt syscalls.
         */
        if (!DEBUG_INIT && ENABLE_FEATURE_USE_INITTAB)
                bb_signals_recursive_norestart((1 << SIGHUP), record_signo);
 
        /* Now run everything that needs to be run */
        /* First run the sysinit command */
        run_actions(SYSINIT);
        check_delayed_sigs();
    ...
}

そこで、/etc/config/rc.localの最後に
init -q
を入れてみたところ、Armadillo-810でもrootでの
自動ログインを実現できました。
(Armadillo-810で実際にやってみました)

--
なかむら

chihiro

2014年10月8日 9時31分

中村様

いつもお世話になっております。

/etc/config/rc.local の最後に
init -q
を追記する事で、こちらでも ID, パスワード無しでログインできる事を
確認しました。
何度も教えて頂いて、本当にありがとうございました。

y.nakamura

2014年10月12日 14時49分

中村です。

少し前の自動ログインに関する投稿の訂正です。

> また、Armadillo-4x0のloginは"-f"オプションがないので、

と書きましたが、Armadillo-4x0のloginにも"-f"オプションがありました。

よって、
> /etc/shadowのrootのパスワードをナシに書き換えてます。
は必要ないので、Armadillo-4x0の場合は/etc/config/rc.localには
/etc/inittabの修正だけを記述すればよいことになります。

# inittabのgettyをloginに変更
sed -i /etc/inittab \
    -e 's|^::respawn:/sbin/getty.*$|::respawn:/bin/login -f root < /dev/ttymxc1 > /dev/ttymxc1 2>\&1|'

--
なかむら