允許在串列控制台上進行無密碼 root 登錄
我用(CentOS/RHEL)虛擬機做了很多本地開發工作。而不是用預設的root密碼配置所有東西——如果暴露在網路上,可能會出現問題——我想將它們配置為只允許在串列控制台上進行無密碼root登錄。
我的第一次嘗試是使用以下選項簡單地用命令行替換預設
ExecStart
命令 :serial-getty@.service``--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 serial-getty@ttyS0.service
,並添加以下內容:[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
允許登錄的終端)。因此,如果這讓您感到困擾,請使用其他文件:)。