我注意到有关基于 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 设置为宽容模式
# 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
答案1
于是,我找到了问题所在。看来确实是配置问题。
如果 sshd_config 包含该指令UsePAM no
,则 ssh 守护进程不会接受用户密钥并要求输入密码。
在所有情况下,通过UsePAM yes
密钥登录均可行(SELINUX 允许或强制,用户帐户是否锁定)
答案2
通过 root 使用
passwd -uf "username"
解决了我的问题
答案3
我认为这与 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 标签。