Centos

允許在串列控制台上進行無密碼 root 登錄

  • October 20, 2020

我用(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 密碼。這似乎是loginLinux下程序的限制。

我還嘗試用 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. 執行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允許登錄的終端)。因此,如果這讓您感到困擾,請使用其他文件:)。

引用自:https://unix.stackexchange.com/questions/552576