linux下ssh配置之开放sftp文件传输但限制ssh登录配置过程

linux下ssh配置之开放sftp文件传输但限制ssh登录配置过程

  • ssh配置之开放sftp文件传输但限制ssh和其他shell登录的配置过程
    • 配置前背景
    • 配置步骤
    • 总结

ssh配置之开放sftp文件传输但限制ssh和其他shell登录的配置过程

最近,我司部门最近和翼支付结算的对账文件传输协议需要从ftp协议更换为sftp协议,变更过程中需要限制账号不能ssh登录服务器进行shell操作。

具体需求如下:

  1. 用户sftpuser只能使用sftp登录,拒绝ssh、ftp、telnet等方式登录
  2. 用户登录默认根目录为/sftpdata/sftpuser01,其父层目录不可见。
  3. 登录后子目录download内所有文件与子目录,仅允许下载,不允许上传和修改。
  4. 登录后子目录can_any内所有文件与子目录,可允许下载、上传和修改操作。

账号都是操作系统创建的账号,结合网上查找的资料在测试服务器完成需求过程如下:

配置前背景

操作系统:

1
2
3
4
5
6
[root@zxkf1 ~]# lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.5 (Final)
Release:        6.5
Codename:       Final

ssh版本:

1
2
[root@zxkf1 ~]# ssh -V
OpenSSH_8.2p1, OpenSSL 1.0.2t  10 Sep 2019

配置步骤

  1. 创建相关目录

    1
     [root@zxkf1 ~]# mkdir /sftpdata
  2. 创建用户

    1
    2
    3
    4
    5
    6
    7
     [root@zxkf1 ~]# useradd -d /sftpdata/sftpuser01  -s /sbin/nologin  sftpuser  //创建用户
     [root@zxkf1 ~]# passwd sftpuser    //修改密码
     Changing password for user sftpuser.
     New password:
     BAD PASSWORD: it is based on a dictionary word
     Retype new password:
     passwd: all authentication tokens updated successfully.

    通过网上查看资料,新建用户的/etc/passwd用户的配置里/bin/false是最严格的禁止login选项,一切服务都不能用,/sbin/nologin只是不允许系统login,可以使用其他ftp等服务,nologin在这里符合使用场景,不允许用户进行登录shell操作,设置nologin合理

  3. 设置sftp的账号权限

    配置sftp账号的权限需要对ssh配置文件进行修改,修改配置文件内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
     [root@zxkf1 ~]# vi /etc/ssh/sshd_config
     # override default of no subsystems
     #Subsystem       sftp    /usr/libexec/openssh/sftp-server #注释掉此行并添加以下行
     Subsystem sftp internal-sftp        
     Match User sftpuser                     #此处设置控制的用户,也可以设置为组
        ChrootDirectory /sftpdata/sftpuser01
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

    配置完成后重启ssh服务

    1
    2
    3
     [root@zxkf1 sftpdata]# service  sshd restart
     Stopping sshd:                                             [  OK  ]
     Starting sshd:                                             [  OK  ]

    尝试使用软件登录过程中发现以下错误
    登录过程

    登录错误

  4. 设置sftp的账号目录权限

    1
    2
    3
    4
    5
    6
     [root@zxkf1 ~]# cd /sftpdata/   //进入家目录
     [root@zxkf1 sftpdata]# ll
     total 4
     drwx------. 4 sftpuser sftpuser 4096 Apr  3 09:49 sftpuser01
     [root@zxkf1 sftpdata]# chown root:root sftpuser01/   //设置家目录宿主
     [root@zxkf1 sftpdata]# chmod 755 sftpuser01/    //设置读写执行为755/
  5. 关闭selinux(非常重要,踩坑时间最久的问题)

    重新设置权限等后登录时还是会出现以下报错:

    错误: Unknown eventType 37
    错误: 读取目录列表失败
    登录失败
    后查询各种资料,最后发现是linux上的selinu没有关闭导致的。

    1
    2
    3
    4
    5
     [root@zxkf1 ~]# getenforce    //查看selinu状态 显示开启
     Enforcing
     [root@zxkf1 ~]# setenforce 0   //临时关闭selinu,永久关闭
     [root@zxkf1 ~]# getenforce
     Permissive

    关闭后尝试登录显示正常
    登录成功

  6. 删除隐藏的文件和文件夹并创建相关业务目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     [root@zxkf1 ~]# cd /sftpdata/sftpuser01/
     [root@zxkf1 sftpuser01]# ls -la
     total 32
     drwxr-xr-x. 4 root     root     4096 Apr  3 09:49 .
     drwxr-xr-x. 3 root     root     4096 Apr  3 09:49 ..
     -rw-r--r--. 1 sftpuser sftpuser   18 Jul 18  2013 .bash_logout
     -rw-r--r--. 1 sftpuser sftpuser  176 Jul 18  2013 .bash_profile
     -rw-r--r--. 1 sftpuser sftpuser  124 Jul 18  2013 .bashrc
     -rw-r--r--. 1 sftpuser sftpuser  500 May  7  2013 .emacs
     drwxr-xr-x. 2 sftpuser sftpuser 4096 Nov 12  2010 .gnome2
     drwxr-xr-x. 4 sftpuser sftpuser 4096 Oct 26  2017 .mozilla
     [root@zxkf1 sftpuser01]# rm -rf .bash_logout
     [root@zxkf1 sftpuser01]# rm -rf .bash_profile
     [root@zxkf1 sftpuser01]# rm -rf .bashrc
     [root@zxkf1 sftpuser01]# rm -rf .emacs
     [root@zxkf1 sftpuser01]# rm -rf .gnome2
     [root@zxkf1 sftpuser01]# rm -rf .mozilla
     [root@zxkf1 sftpuser01]# mkdir download    //新建只能下载目录
     [root@zxkf1 sftpuser01]# ll
     total 4
     drwxr-xr-x. 2 root root 4096 Apr  7 11:59 download
     [root@zxkf1 sftpuser01]# cd download/
     [root@zxkf1 download]# vi test.txt   //创建测试下载账号
     111
     222
     333
     444
     [root@zxkf1 sftpuser01]# mkdir can_any   //新建上传下载修改目录
     [root@zxkf1 sftpuser01]# chown sftpuser:sftpuser can_any/
     [root@zxkf1 sftpuser01]# ll
     total 8
     drwxr-xr-x. 2 sftpuser sftpuser 4096 Apr  7 17:00 can_any
     drwxr-xr-x. 2 root     root     4096 Apr  7 15:36 download
  7. 目录传输测试

    以下是download测试内容
    登录成功

    传输文件到本地显示正常

    ![登录失败](https://img-blog.csdnimg.cn/20200407164543933.png)
    传输到服务器文件测试失败

    以下是can_any测试内容
    新建文件
    此目录新建文件正常
    成功
    上传和下载文件都成功

总结

本次试验是单个用户,后续将测试已组为用户的Sftp限制登录试验