Selinux 处于宽容模式,基于 ssh 密钥的身份验证和锁定帐户

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 设置为宽容模式

# 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。

根据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 标签。

相关内容