允许在串行控制台上进行无密码 root 登录

允许在串行控制台上进行无密码 root 登录

我使用 (CentOS/RHEL) 虚拟机进行大量本地开发工作。我不想用默认 root 密码配置所有内容(如果暴露到网络,可能会出现问题),而是将它们配置为仅允许在串行控制台上进行无密码 root 登录。

ExecStart我的第一次尝试是简单地使用以下选项将默认命令 替换[email protected]为命令行--autologin

ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear --autologin root ttyS0 $TERM

虽然这会跳过login:提示,但它仍然提示输入 root 密码。这似乎是 Linux 下程序的限制login

我还尝试用 shell 替换默认登录程序,如下所示:

ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear -n -l /bin/bash ttyS0 $TERM

但这与 selinux 发生冲突:虽然我得到了一个bashshell,但它无法访问任何内容:

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,但仅进行此更改,系统仍会提示您输入 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 ~]#

...如果您注销,您将立即返回 shell 提示符。

请注意,我在这里使用了文件名/etc/securetty,在过去,它实际上做了其他事情(它控制root允许登录的终端)。因此,如果这让您烦恼,请使用不同的文件:)。

相关内容