Centos6

Selinux 在許可模式下,基於 ssh 密鑰的身份驗證和鎖定帳戶

  • October 6, 2013

我注意到在許可模式下基於 ssh 密鑰的登錄和 selinux 有一些奇怪的地方。

讓我向您介紹設置:伺服器是更新的 Centos 6.4 x86_64。

我們創建沒有密碼的使用者(然後使用者將被鎖定):

# useradd testuser
# passwd -S testuser
testuser LK 2013-05-03 0 99999 7 -1 (Password locked.)

然後我們設置 ssh 密鑰:

# install -d -m 700 -o testuser -g testuser /home/testuser/.ssh/
# install -m 600 -o testuser -g testuser /root/.ssh/id_rsa.pub /home/testuser/.ssh/authorized_keys

讓我們檢查一下 selinux 狀態

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

然後讓我們嘗試以 testuser 身份登錄:

# ssh testuser@localhost
Last login: Fri May  3 13:26:32 2013 from ::1
$

有用 !現在我們將 Selinux 設置為 permissive 模式

# setenforce 0
# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

我們嘗試再次登錄:

# ssh testuser@localhost
testuser@localhost's password:

SSH 不接受密鑰並要求輸入密碼!

問題:這是一個錯誤嗎?

編輯:在 restorecon -Rv /home 之後,我有

$ ls -laZ ~/.ssh/
drwx------. user wheel unconfined_u:object_r:ssh_home_t:s0 ./
drwxr-x---. user wheel unconfined_u:object_r:user_home_dir_t:s0 ../
-rw-------. user wheel system_u:object_r:ssh_home_t:s0  authorized_keys

$ getsebool -a | grep 'ssh'
allow_ssh_keysign --> off
fenced_can_ssh --> off
ssh_chroot_full_access --> off
ssh_chroot_manage_apache_content --> off
ssh_chroot_rw_homedirs --> off
ssh_sysadm_login --> off

編輯:這是 /var/log/secure 的內容

Jun 13 16:30:51 dhcp-240 sshd[13681]: User testuser not allowed because account is locked
Jun 13 16:30:51 dhcp-240 sshd[13682]: input_userauth_request: invalid user testuser

所以,我發現了問題。看來確實是配置問題。

如果 sshd_config 包含該指令UsePAM no,則 ssh 守護程序不接受使用者密鑰並要求輸入密碼。

通過UsePAM yes密鑰登錄在所有情況下都有效(SELINUX 允許或強制執行,使用者帳戶是否鎖定)

我相信這與 SELinux 無關,與將模式 644 放在您的 ~/.ssh/authorized_keys 文件中有關。~/.ssh 目錄本身的模式應該是 700,並且該目錄中的文件應該是模式 600。

根據OpenSSH 常見問題解答

3.14 - 我將我的公鑰複製到了 authorized_keys 但公鑰身份驗證仍然不起作用。

通常這是由文件權限引起的 $ HOME, $ HOME/.ssh 或 $HOME/.ssh/authorized_keys 比 sshd 預設允許的更寬鬆。

在這種情況下,可以通過在伺服器上執行以下操作來解決。

$ chmod go-w $HOME $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys
$ chown `whoami` $HOME/.ssh/authorized_keys

如果由於某種原因無法做到這一點,另一種方法是在 sshd_config 中設置 StrictModes no,但不建議這樣做。

您可能還需要執行“restorecon -Rv /root”和“restorecon -Rv /home”。使用“ls -lZ”查看目錄所有權和 SELinux 標籤。

引用自:https://serverfault.com/questions/504741