Ssh
SELinux 通過公鑰阻止 ssh
我有一個使用者
$USER
,它是一個具有授權使用者文件的系統使用者帳戶。當我啟用 SELinux 時,我無法使用公鑰 ssh 進入伺服器。如果我setenabled 0
,$USER
現在可以登錄。在不完全禁用 SELinux 的情況下,我應該更改什麼 SELinux bool/policy 來糾正這種行為?
值得注意的是,
$USER
可以在此預設 SELinux 配置下使用密碼登錄,我希望了解這裡發生的事情以及 SELinux 沒有阻止它的原因。(解決此問題後,我將完全禁用密碼身份驗證,因此更高興知道這個問題)
假設文件系統權限在 ~/.ssh/* 上是正確的,然後檢查輸出
sealert -a /var/log/audit/audit.log
那裡的 AVC 條目中應該有一個線索。解決方案很可能歸結為執行:
restorecon -R -v ~/.ssh
如果
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 沒有簡明扼要地說明如何解決問題,但通過查看
scontext
andtcontext
,該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”相關的問題,但即使在 or 生成的 AVC 中指示了不同的文件或上下文,解決方案也可以遵循此
sealert
模型audit2allow
。