SELinux 通过公钥阻止 ssh

SELinux 通过公钥阻止 ssh

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

我应该更改什么 SELinux bool/policy 来纠正此行为而不完全禁用 SELinux?

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

答案1

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

sealert -a /var/log/audit/audit.log

AVC 条目中应该有线索。解决方案很可能归结为运行:

restorecon -R -v ~/.ssh

答案2

如果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.

分解 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.

尽管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

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

相关内容