私は(CentOS / RHEL)仮想マシンを使用してローカル開発をたくさん行います。デフォルトのルートパスワードですべてを設定する代わりに(ネットワークに公開されると問題が発生する可能性があります)、シリアルコンソールでパスワードのないルートログインのみを許可するように設定します。
ExecStart
最初の試みは、次のオプションを使用して基本コマンドを[email protected]
コマンドラインに置き換えることでした--autologin
。
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear --autologin root ttyS0 $TERM
プロンプトをスキップしても、login:
ルートパスワードの入力を求められます。これはLinuxのプログラムの制限のようですlogin
。
また、デフォルトのログインプログラムを次のシェルに置き換えようとしました。
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear -n -l /bin/bash ttyS0 $TERM
しかし、これはselinuxと衝突します。シェルを手に入れましたが、bash
何もアクセスできません。
bash: /root/.bashrc: Permission denied
# ls /etc/systemd
ls: cannot open directory '/etc/systemd': Permission denied
ウェブ上の他の場所では、人々がパスワードハッシュを削除することを提案したが、/etc/{password,shadow}
これはもちろん他の問題を引き起こす。これで、すべてのユーザーがsu -
パスワードを持つことはできません。
どのように動作させるためのアイデアはありますか?
答え1
いくつかの実験を経て有用な情報を得ました。
実行し、以下を追加します。
systemctl edit [email protected]
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear --autologin root ttyS0 $TERM
これによりユーザーは
agetty
自動的にログインしますが、これroot
を変更してもルートパスワードの入力を求められます。パスワードを要求せずにコンソールで
/etc/pam.d/login
ログインを認証するように設定できます。root
上部に以下を追加します/etc/pam.d/login
。auth sufficient pam_listfile.so item=tty sense=allow file=/etc/securetty onerr=fail apply=root
これにより、PAMスタックはログインttyを確認し、
/etc/securetty
他の認証メカニズムが見つかった場合はスキップします。シリアルポートの追加
/etc/securetty
:# echo ttyS0 > /etc/securetty
これらの変更を行った後に起動すると、シリアルコンソールに次のものが表示されます。
CentOS Linux 8 (Core)
Kernel 4.18.0-80.11.2.el8_0.x86_64 on an x86_64
localhost login: root (automatic login)
Last login: Sun Nov 17 00:29:36 on ttyS0
[root@localhost ~]#
...ログアウトするとすぐにシェルプロンプトに戻ります。
/etc/securetty
ここでは、過去に実際に別の操作を行っていたファイル名を使用しています(root
ログインが許可されている端末を制御します)。したがって、これが面倒な場合は、別のファイルを使用してください:).