sftp使用遇到的坑

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

sftp另个一好处是不用安装另外的软件

1、创建sftp数据存放目录

# mkdir -p /data/sftp

2、创建sftp组

# groupadd sftp

3、创建用户并加入组

# useradd -m sftp1 -g sftp -s /sbin/nologin -d /data/sftp/sftp1
# passwd sftp1

4、修改配置文件

# vim /etc/ssh/sshd_config
Subsystem      sftp    /usr/libexec/openssh/sftp-server      注释掉这一行
添加如下行
Subsystem sftp internal-sftp       # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp                   # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
ChrootDirectory /data/sftp/%u      # 限制用户的根目录,%u代表匹配到的用户名。sftp登陆后用户只能在此目录下活动
ForceCommand internal-sftp         # 只能用于sftp登录
AllowTcpForwarding no              # 禁止用户使用端口转发
X11Forwarding no                   # 禁止用户使用端口转发

 5、重启sshd

# systemctl restart sshd

 6、测试

# sftp sftp1@127.0.0.1

 

 

 出现报错。

这是因为

ChrootDirectory /data/sftp/%u  

这个参数导致的。ChrootDirectory设置的目录/data/sftp/sftp1的所有者必须是root,并且该目录的上级目录//data/sftp的所有者也必须是root. 
而且只有所有者拥有写权限,也就是说他们的权限最大设置只能是755。

修改/data/sftp/sftp1的所有者和权限

# chown -R root:sftp /data/sftp/sftp1
# chmod -R 755 /data/sftp/sftp1

重新登陆成功。但是这里还是有一个坑。由于之前我们给/data/sftp/sftp1设置的权限是755,所以不能写入文件。

其实这里之前配置文件应该换一种配置

ChrootDirectory /data/sftp/          # 写到用户家目录上一层目录即可
ForceCommand internal-sftp -d/%u        

改回/data/sftp/sftp1所有者



续:
新版sftp 用户上传文件权限为600
更改用户上传文件默认权限方法为:
ForceCommand internal-sftp -u 022

  

posted @ 2021-09-02 15:39  slena  阅读(3130)  评论(0)    收藏  举报
/*鼠标跟随效果*/