天天看点

sftp服务器搭建

 注:本文搭建sftp的系统为CentOS 7 以上

sftp服务器两种搭建方式

  1、直接在系统上新建一个用户即可,此种方式最简单,但最不安全,用户sftp登陆之后可以随意切换目录,切用户可以ssh登陆到系统,很不安全,生产环境中没这么干的,故不详细介绍了。

  • 首先新建sftp登陆用户

useradd stp-u

echo sftp-u | passwd --stdin sftp-u

  • 配置/etc/ssh/sshd_config

注释掉

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

添加如下

Subsystem sftp internal-sftp

Match User sftp-u

ChrootDirectory /opt/upload

ForceCommand internal-sftp

  AllowTcpForwarding no

  X11Forwarding no

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755

但如目录权限由于实际环境的原因不能修改权限的话,也可以通过软连接实现,但最底层的目录的属主任然为root,权限最大任然是755

修改目录权限

chown root.sftp-u test/

重启服务

service sshd reload

service sshd restart

登陆

sftp -P 22 ​​[email protected].​​xxx

显示本地目录

sftp> lls

1.json 2.json 3.json ls.txt put.sh

显示远程目录

stp> ls

1.json

上传

从本地上传文件到远程,本地不指定目录默认当前目录,远程不指定目录就是上传到根目录下

sftp> put 1.json

Uploading 1.json to /1.json

remote open("/1.json"): Permission denied

提示操作远程权限失败,因为这是往远程写,所以检查远程操作的目录是否有写权限,发现sftp-u用户对远程默认目录没有写权限

于是给sftp-u用户指定的根目录加上写权限,service sshd restart 发现还是不能上传。

发现需要在根目录下新建一个子目录,并且给上sftp-u用户写权限,才可以上传

chown root.sftp-u /root/upload/

mkdir /root/upload/file

chown sftp-u:sftp-u /root/upload/file

chmod 775 /root/upload/file

下载

总结

#file server

useradd sftp-u

echo sftp-u | passwd --stdin sftp-u

mkdir -p /root/upload/

chown root.sftp-u /root/upload/

mkdir /root/upload/file

chown sftp-u:sftp-u /root/upload/file

chmod 775 /root/upload/file

sed -i 's/Subsystem\tsftp\t\/usr\/libexec\/openssh\/sftp-server/#Subsystem\tsftp\t\/usr\/libexec\/openssh\/sftp-server/g' /etc/ssh/sshd_config

echo -e 'Subsystem sftp internal-sftp

Match User sftp-u

\tChrootDirectory /root/upload

\tForceCommand internal-sftp

\tAllowTcpForwarding no

\tX11Forwarding no' >> /etc/ssh/sshd_config