SElinux type 引起的SSH认证免密登陆失败总结

本文介绍了解决从一台客户机通过SSH免密登录到另一台服务器的问题过程。问题出现在服务器端,由于SElinux的安全策略导致无法正确读取公钥文件。通过对SElinux标签的调整,最终实现了免密登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,环境描述
       服务器机器A:
       Red Hat Enterprise Linux Server release 6.3 (Santiago)
       Linux crmapp-t 2.6.32-279.el6.x86_64 #1 SMP
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)

客户机器B: 
CentOS release 6.5 (Final)
Linux hk5-tmp-ocs1 2.6.32-431.el6.x86_64 #1 SMP
gcc version 4.7.4 (GCC) 

二,问题现象描述
        1,计划从 客户B ssh免密登陆 服务器A;
2,做好配置文件并重启服务器A的ssh服务之后,依然提示需要输入密码,无法实现免密登陆,
  通过下一节排查中的方法1,2,3,4都没有解决问题,直到方法5解决了问题;
  

三,排查

        1,测试问题是否出在服务器上,
  
       检查配置文件
  /etc/ssh/sshd_config
  PubkeyAuthentication yes
  RSAAuthentication yes
  AuthorizedKeysFile .ssh/authorized_keys
  StrictModes yes
  客户B 跟 服务器A 的配置相同;
  
  用相同的操作步骤,可以实现从 服务器A 到 客户B 的ssh免密登陆,
  从而确定问题出在服务器A上;
  
2,免密登陆失败,最常见的原因在于StrictModes yes并且相关文件对非授权用户给的权限过高,
  排查后发现符合要求,没有问题:
  目录/inter                      权限700
  目录/inter/.ssh                 权限700
  文件/inter/.ssh/authorized_keys 权限600
  
  tail -n 20 /var/log/secure 也没有发现关于权限的报错,
  如果权限有问题,会出现 bad ownership or modes for directory 的日志
  
3,从客户B 可以 ssh输入密码登陆 服务器A,所以不是服务器A防火墙的问题;

4,日志调试
  在服务器A上执行命令 ssh -vvv inter@192.168.10.103
      摘取部分日志如下
      debug1: Next authentication method: publickey
      debug1: Trying private key: /inter/.ssh/identity
      debug3: no such identity: /inter/.ssh/identity
      debug1: Trying private key: /inter/.ssh/id_rsa
      debug3: no such identity: /inter/.ssh/id_rsa
      debug1: Offering public key: /inter/.ssh/id_dsa
      debug3: send_pubkey_test
      debug2: we sent a publickey packet, wait for reply
      debug3: Wrote 528 bytes for a total of 1637
      debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
      debug2: we did not send a packet, disable method
      debug3: authmethod_lookup password
      debug3: remaining preferred: ,password
      debug3: authmethod_is_enabled password
      debug1: Next authentication method: password
      inter@192.168.10.103's password: 
  
      发现debug2: we sent a publickey packet, wait for reply之后,没有服务器的响应,
  初步估计是服务器A读取不到authorized_keys文件,最终跳到方法5,解决问题
  
    5, cd /inter/.ssh
   ls -laZ

--->
-rw-------. inter inter unconfined_u:object_r:default_t:s0 authorized_keys

   cat /etc/selinux/config

--->
SELINUX=enforcing

   估计着似乎找到问题了
   SElinux 的类型标签:
   default_t:文件或目录的selinux属性与file-context配置文件定义的模式不匹配
   file_t:文件没有selinux属性
   这两种的类型的文件或目录,受限制的域的程序均不能访问

   尝试修复:
   chcon -R -t ssh_home_t /inter/.ssh

   免密登陆成功

四,总结
          4.1 /etc/selinux/config 中 SELINUX=enforcing 则表示SElinux安全子模块开启,
         如果文件的SElinux 的类型标签是default_t,则应用进程没有权限读取该文件;
         修改文件的SElinux 类型标签为相应进程的类型域即可,本例即修改为ssh_home_t;

  4.2 如果新建用户不是挂载在/home目录下而是直接挂载在根目录下,

         会出现该用户$HOME/.ssh的SElinux的类型标签是default_t,产生这种情况的机制还没弄清楚。



如有错误,恳请指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值