搭建一个简易的 sftp 服务器

Posted by Yun on Mon, Sep 9, 2019

本文将基于 Linux 系统,搭建基于 open-ssh-sftp-server 的 sftp 服务器。

Step 1. 安装依赖包

对于 Ubuntu 系统而言:

1sudo apt-get install openssh-client openssh-server openssh-sftp-server

对于 CentOS 系统而言:

1sudo yum install openssh-client openssh-server openssh-sftp-server

Step 2. 添加 sftp 用户

首先创建用户组:

1groupadd sftp

之后创建用户(并限制其不可登录):

1sudo useradd -g sftp -s /sbin/nologin -M sftp_user

修改此新建用户的密码:

1sudo passwd sftp_user

Step 3. 创建 sftp 的目录

首先我们在 home 下创建文件夹:

1cd /home/
2sudo mkdir sftp

更改权限:

1sudo chown root:sftp sftp/
2sudo chmod 755 sftp/

创建 sftp_user 可读写的目录:

1cd sftp/
2sudo mkdir shared
3sudo chown sftp_user:sftp shared/

注意:这里的权限设定必须十分严格,必须要求 sftp/ 目录的权限属于 root:sftp 且为 755,并且 shared/ 的所属为 sftp_user:sftp 才能够正常使用。

Step 4. 修改 ssh 配置文件

修改文件:

1sudo vim /etc/ssh/sshd_config

修改 Subsystem 所在行:

1#Subsystem      sftp    /usr/libexec/openssh/sftp-server  
2Subsystem       sftp    internal-sftp

在文件末尾添加匹配用户 sftp_user 的规则:

1Match User sftp_user
2        X11Forwarding no
3        AllowTcpForwarding no
4        ForceCommand internal-sftp
5        ChrootDirectory /home/sftp

要注意 ChrootDirectory 的目录,不要设置错了

Step 5. 重启 sshd 服务

重启服务:

1sudo service sshd restart

ALL DONE

可用本地 sftp 连接验证是否搭建成功:

1sftp sftp_user@127.0.0.1

P.S. 对于某些 CentOS 系统

按照上述配置完成后,某些 CentOS 系统虽然可以执行 sftp 连接,但是 sftp 连接后 ls 等指令没有权限,此时需要多执行下面两条指令:

1setsebool -P ssh_chroot_rw_homedirs on
2restorecon -R /home/sftp

参考连接


版权声明:本文遵循 CC BY-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

Copyright statement: This article follows the CC BY-SA 4.0 copyright agreement. For reprinting, please attach the original source link and this statement.