教你如何配置linux用户实现禁止ssh登陆机器但可用sftp登录!

想和目标

最近有个这样的诉求:基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,如直接修改代码、系统配置,并且也直接连上mysql。因此希望能限制开发人员ssh登录机器,但是通过ftp/sftp上传代码文件。
在网上找个各种各样的方法,经过试验做个汇总:

方法一

https://segmentfault.com/q/1010000000722462

这篇帖子的方法是搜索到的最通用的方法,方法是否可能呢,直接做个测试。

创建禁止登陆的用户:

useradd test -M -s /sbin/nologin

试试ssh登陆:登陆失败

 
  1. [root@localhost app]# ssh [email protected]

  2. [email protected]'s password:

  3. Last login: Tue Oct 11 15:28:07 2016 from 172.18.135.185

  4. This account is currently not available.

    扫描二维码关注公众号,回复: 2377270 查看本文章
  5. Connection to 172.19.194.30 closed.

试试sftp登陆:同样也提示登陆失败!!!

 
  1. [root@localhost app]# sftp [email protected]

  2. [email protected]'s password:

  3. Received message too long 1416128883

  4. [root@localhost app]#

可以看到,方法一,虽然限制了ssh登陆,但是同时也限制了sftp的连接,结论是此方法行不通。

方法二

http://jin771998569.blog.51cto.com/2147853/1067247

  1. 首先修改sshd的配置文件:
#vim /etc/ssh/sshd_config
 
  1. #该行(上面这行)注释掉

  2. #Subsystem sftp /usr/lib/openssh/sftp-server

  3.  
  4. # 添加以下几行

  5. Subsystem sftp internal-sftp

  6. Match group sftp

  7. #Match user test

  8. #匹配sftp组,如为单个用户可用:Match user 用户名; 设置此用户登陆时的shell设为/bin/false,这样它就不能用ssh只能用sftp

  9. ChrootDirectory /home/test

  10. #指定用户被锁定到的那个目录,为了能够chroot成功,该目录必须属主是root,并且其他用户或组不能写

  11. X11Forwarding no

  12. AllowTcpForwarding no

  13. ForceCommand internal-sftp

  1. 添加用户组和用户

#添加用户组
groupadd sftp

#添加用户
useradd -d /home/test -m -s /bin/false -g sftp test

#修改密码
passwd test

  1. 重启SSH服务

service sshd restart

或者

/etc/init.d/ssh reload

  1. 测试ssh
 
  1. [root@localhost etc]# ssh [email protected]

  2. [email protected]'s password:

  3. Write failed: Broken pipe

登陆失败,提示Write failed: Broken pipe错误

  1. 再测试sftp
 
  1. [root@localhost etc]# sftp [email protected]

  2. [email protected]'s password:

  3. Write failed: Broken pipe

  4. Couldn't read packet: Connection reset by peer

同样提示Write failed: Broken pipe

  1. 按理说此方法应该是靠谱的为什么会提示失败呢,通过查找发现是目录权限配置导致的:

https://my.oschina.net/davehe/blog/100280

目录权限设置上要遵循2点:
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755。

修改/home/test 目录权限为755

chmod 755 /home/test -R

  1. 再次测试
 
  1. [root@localhost etc]# ssh [email protected]

  2. [email protected]'s password:

  3. Could not chdir to home directory /home/test: No such file or directory

  4. This service allows sftp connections only.

  5. Connection to 172.19.194.30 closed.

和预期一致:ssh尝试连接失败。

 
  1. [root@localhost etc]# sftp [email protected]

  2. [email protected]'s password:

  3. Connected to 172.19.194.30.

  4. sftp> ls

  5. a a.log authorized_keys mysql.sh

  6. sftp>

sftp测试连接成功!

总结

这个东西虽然没有太大的技术含量,但是通过网上查找的大多是雷同且行不通的,又或者是不完整的,过程中耽误和浪费了不少时间,希望写这篇博客做个验证和汇总的作用。

参考:

猜你喜欢

转载自blog.csdn.net/thy822/article/details/81204181
今日推荐