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

一,环境描述
       服务器机器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目录下而是直接挂载在根目录下

 

 

转载自:

https://blog.csdn.net/neigedg/article/details/77451854

posted @ 2018-08-17 10:43  yJken的博客  阅读(77)  评论(0)    收藏  举报