我用(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 密码。这似乎是login
Linux下程序的限制。
我还尝试用 shell 替换默认登录程序,如下所示:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear -n -l /bin/bash ttyS0 $TERM
但这与 selinux 相冲突:当我得到一个bash
shell 时,它无法访问任何东西:
bash: /root/.bashrc: Permission denied
# ls /etc/systemd
ls: cannot open directory '/etc/systemd': Permission denied
在网络的其他地方,人们建议只从 中删除密码哈希/etc/{password,shadow}
,但这当然会导致一系列不同的问题:现在任何用户都可以su -
没有密码。
关于如何使其正常工作的任何想法?
经过一些实验,我得到了一些有用的东西:
运行
systemctl edit [email protected]
,并添加以下内容:这将导致
agetty
用户自动登录root
,但仅通过此更改,系统仍会提示您输入 root 密码。我们可以配置为在没有密码的情况下在控制台上
/etc/pam.d/login
验证登录。root
将以下内容添加到顶部/etc/pam.d/login
:这将导致 PAM 堆栈检查登录 tty
/etc/securetty
,如果找到则跳过其他身份验证机制。将串口添加到
/etc/securetty
:进行这些更改后,您将在启动时在串行控制台上看到以下内容:
...如果您注销,您将立即回到 shell 提示符处。
请注意,我在
/etc/securetty
这里使用了文件名,在过去的日子里,它实际上做了其他事情(它控制了root
允许登录的终端)。因此,如果这让您感到困扰,请使用其他文件:)。