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日,已超过 158 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
- 本文标签: Linux
- 本文链接: https://blog.eyyyye.com/article/90
- 版权声明: 本文由比特原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权