SELinux 通过公钥阻止 ssh

Col*_*ton 8 ssh selinux centos

我有一个用户$USER,它是一个具有授权用户文件的系统用户帐户。启用 SELinux 后,我无法使用公钥 ssh 进入服务器。如果我setenabled 0$USER现在可以登录。

在不完全禁用 SELinux 的情况下,我应该更改什么 SELinux bool/policy 以纠正此行为?

值得注意的是,$USER可以在此默认 SELinux 配置下使用密码登录,我很想了解这里发生的情况,以及为什么 SELinux 没有阻止它。(解决此问题后,我将完全禁用密码身份验证,因此这个问题更值得了解)

dar*_*onw 11

假设 ~/.ssh/* 上的文件系统权限是正确的,然后检查输出

sealert -a /var/log/audit/audit.log
Run Code Online (Sandbox Code Playgroud)

那里的 AVC 条目中应该有线索。最有可能的解决方案将归结为运行:

restorecon -R -v ~/.ssh
Run Code Online (Sandbox Code Playgroud)


kbu*_*ien 6

如果sealert系统上缺少该文件,就像我最近遇到的系统上一样,也有可能audit2allow

$ sudo audit2allow -w -a
type=AVC msg=audit(1548909218.552:1037): avc:  denied  { read } for  pid=13996 comm="sshd" name="authorized_keys" dev="dm-0" ino=4663556 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:admin_home_t:s0 tclass=file
    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.
Run Code Online (Sandbox Code Playgroud)

分解 AVC:

avc: denied { read } for pid=13996 comm="sshd" name="authorized_keys" dev="dm-0" ino=4663556
    "sshd" was denied read on a file resource named "authorized_keys".
scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023
    SELinux context of the sshd process that attempted the denied action.
tcontext=system_u:object_r:admin_home_t:s0 tclass=file
    SELinux context of the authorized_keys file.
Run Code Online (Sandbox Code Playgroud)

虽然audit2allow没有简明地告诉如何解决问题,但通过查看scontexttcontext,该scontext值指示所需的上下文,同时tcontext显示不令人满意的“authorized_keys”文件上下文。

在这种情况下,restorecon -R -v ~/.ssh它本身不起作用,但应用所需的上下文可以:

$ sudo semanage fcontext --add -t ssh_home_t "/path/to/my/.ssh(/.*)?"; \
$ sudo restorecon -FRv /path/to/my/.ssh
Run Code Online (Sandbox Code Playgroud)

根据需要,根据 AVC 中看到的内容更改资源名称和/或上下文。此答案中的精确细节是为了解决与“authorized_keys”相关的问题而构建的,但是即使 或 生成的 AVC 中指示了不同的文件或上下文,解决方案也可以遵循此sealert模型audit2allow