原创

Linux系统搭建sftp服务

因为安全方面的考虑,现在大部分文件传输服务都要求使用sftp协议来处理,sftp是基于ssh协议的文件传输协议,有较好的安全性,可以保护数据的完整性和机密性,下面记录一下sftp服务配置的过程。

一、sftp服务配置

1.创建sftp组

groupadd sftp

2.创建sftp用户账号,并添加到sftp组中

useradd -g sftp -s /bin/false sftpuser

3.创建用户sftp目录并设置属组和权限

mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

注:此处用户目录到根目录路径的所有文件夹属主必须是root,且权限为755。

4.修改ssh配置文件

vi /etc/ssh/sshd_config

注释掉原Subsystem配置

#Subsystem sftp /usr/libexec/openssh/sftp-server

添加如下配置:

Subsystem sftp internal-sftp
Match Group sftp
    ChrootDirectory /data/sftp/%u
    X11Forwarding no
    AllowTcpForwarding no
    PermitTTY no
    ForceCommand internal-sftp

注:需要将sftp配置参数放到配置文件的最下方,不然会报错。

修改前:


修改后:


5.重启sshd服务

systemctl restart sshd

到这里就可以通过sftp协议登录了:

6.创建文件传输目录

通过sftp登录后,可以看到登录后不能上传文件,提示没有权限,这是因为我们设置的sftp目录/data/sftp/sftpuser文件夹的属主是root,我们需要在该目录下新建一个文件夹,并设置属主为当前sftpuser,就可以往该目录上传文件了:

mkdir -p /data/sftp/sftpuser/filedir
chown sftpuser:sftp /data/sftp/sftpuser/filedir

如果需要创建多个sftp用户,将用户加入sftp组,并在/data/sftp/目录下新建一个和用户名相同的文件夹就可以了。

二、sftp常用命令

1.连接sftp(如果是使用默认端口22,可以省略-P参数)

sftp -P 2222 root@127.0.0.1

2.上传和下载

#上传(如果上传到当前目录,可以省略远程目录参数)
put 本地文件路径 远程目录
#下载(如果下载到当前目录,可以省略本地目录参数)
get 远程文件路径 本地目录

3.执行本地命令

在sftp命令行下,默认命令都是在远程服务器执行,可以通过在命令前加英文的!号来让命令在本地执行:

!ls #列出本地目录中文件详情
!cd #更改本地目录

4.退出sftp

exit

三、sftp和ssh服务分离

按照上面配置ssh和sftp是共用一个端口的,如果不想它们使用同一个端口,我们可以部署两套服务,一套只负责ssh,一套只负责sftp,这样就可以将sftp和ssh服务分开了。

1.复制ssh配置文件,并用sftp命名

cp /etc/ssh/sshd_config /etc/ssh/sftpd_config

sftp的配置直接按上方说明修改sftpd_config文件,然后把端口修改一下Port 2222

2.复制服务文件,并用sftp命名

cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service

3.修改sftpd.service文件的ExecStart参数

通过-f参数指定sftp的配置文件

ExecStart=/usr/sbin/sshd  -f /etc/ssh/sftpd_config

4.启动sftp

systemctl start sftpd

之后就可以通过新端口2222访问sftp服务了。


扩展说明:

1.实测ChrootDirectory配置的目录必须为root属主。

2.sftp用户上传文件默认权限为600。

正文到此结束
温馨提示:
本文最后更新于 2024年06月16日,已超过 84 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
本文目录