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:
と表示されてしまいます。
何か手順が間違っていますでしょうか?
以上、よろしくお願いします。
コメント
y.nakamura
中村です。
基本的な考えは、齋藤さんの
> ・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
中村です。
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
齊藤様、中村様
いつもお世話になっております。
返信して頂いてありがとうございました。
またこちらの方での確認が遅れてしまい、すみません。
・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
中村です。
うまくいったようでよかったです。
> イメージファイルの一部のファイルだけの修正なので
> 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
中村様
いつもお世話になっております。
/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
中村です。
> こちらの方法であればコンフィグ領域の修正だけで済むので
> 良い方法だと思います。
>
> ただ、教えていただいた方法を試してみたのですが、うまく動作しませんでした。
> 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
y.nakamura
中村です。
> 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
y.nakamura
中村です。
少し前の自動ログインに関する投稿の訂正です。
> また、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|'
--
なかむら
saitoh
2014年9月30日 18時07分
齊藤と申します
securettyはrootのログインを許すかどうかの設定です。ユーザ名とパスワードはどっちにしても必要です。
以下は検証はせずに推論だけの話になりますが・・・
・inittabにgettyではなく /bin/login root を登録する
・passwdファイルでrootのパスワードを 無し にする
でいけるんではないでしょうか。
ただしこれだと端末の設定がされないままになるかもしれません。
~root/.profile などで stty ほげほげ を書かないといけないかも。