Selinux 在許可模式下,基於 ssh 密鑰的身份驗證和鎖定帳戶
我注意到在許可模式下基於 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。
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 標籤。