シリアルコンソールでパスワードのないルートログインを許可する

シリアルコンソールでパスワードのないルートログインを許可する

私は(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

いくつかの実験を経て有用な情報を得ました。

  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を変更してもルートパスワードの入力を求められます。

  2. パスワードを要求せずにコンソールで/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他の認証メカニズムが見つかった場合はスキップします。

  3. シリアルポートの追加/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ログインが許可されている端末を制御します)。したがって、これが面倒な場合は、別のファイルを使用してください:).

関連情報