一 前言
- 实验机器腾讯云,centos
- sftp是在ssh上支持ftp功能,相对于ftp增加了rsa等非对称加密,私密性更良好,但是传输速率上低于ftp。
- sftp基于ssh则需要客户端将公钥放置ssh的公钥信任列表。默认位置位 .ssh/authorized_keys,加入客户端公钥即可登录ssh
二 准备
# 添加用户组
groupadd 用户组名
# 删除用户组
groupdel 用户组名
# 添加用户
useradd 用户名
-g 用户组 # 用户名归于用户组
-s<shell> # 指定登录后使用的shell /bin/false 不允许登录 /bin/nologin 不允许非root登录
-m # 自动创建用户登录目录
-M # 不自动创建用户目录
-d # 指定用户登录家目录
# 删除用户
userdel 用户名
# 为已有用户添加配置
usermod 用户名
-g 用户组 # 用户名归于用户组
-s<shell> # 指定登录后使用的shell /bin/false 不允许登录 /bin/nologin 不允许非root登录
-m # 自动创建用户登录目录. /home/用户名
-M # 不自动创建用户目录
-d # 指定用户登录家目录
# 授权文件权限
chmod mode file...
-R 其和所有子目录
+ 添加权限
- 扣除权限
mode 如下图 777表示所有用户所有组有所有权限
# 授权
chown user[:group] file...
-R 其和所有子目录
user 新文件的所有者
group 新文件的所有者使用组
file root授权给user:group的文件
三 配置sftp
step1: 检查ssh版本
备份配置,以防没有后路
# ssh版本
ssh -V
#OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
# 备份sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.back
step2: 配置ssh对sftp配置
# 1.修改配置
vim /etc/ssh/sshd_config
# 注释
#Subsystem sftp /usr/libexec/openssh/sftp-server
# 末尾新增
Subsystem sftp internal-sftp # ssh子模块使用sftp
Match group sftp # 匹配用户组 sftp
ChrootDirectory %h # 指定活动目录为 %h用户家目录 %u表示用户名
X11Forwarding no # 不予许X11转发
AllowTcpForwarding no # 不允许TCP转发
ForceCommand internal-sftp # 强制执行内部sftp
# 2. 保存配置
ESC :wq ENTER
# 3. 重启sshd
service sshd restart
step3: 创建sftp组和用户
注意 此步骤非常关键,主要限制限制sftp用户不使用root权限,与配置中的配置对应。否则将会提示没有权限。
# 1.添加用户组
groupadd sftp
# 2.添加sftp用户
useradd -d /home/zyj -m -g sftp -s /bin/nologin zyj
# zyj 创建用户zyj
# -g sftp 属sftp组
# -m 创建/home/zyj
# -d 活动目录/home/zyj
# -s /bin/nologin 不使用root登录
# 3.用户sftp目录授权(此部非常重要!!!)
# sftp主目录必须是root权限,用户的子目录必须是用户权限
chown root:sftp /home/zyj
# 将/home/zyj下所有目录权赋予sftp组zyj用户
chown zyj:sftp /home/zyj/
# 将 /home/zyj 设置为zyj可读可写 sftp组可读 其他用户可读
chmod -R 744 /home/zyj
四 测试sftp
0.sftp根目录
[root@VM-20-9-centos ~]# ls -la /home/zyj
总用量 12
drwxr-xr-x. 3 root sftp 4096 12月 3 23:13 .
drwxr-xr-x. 5 root sftp 4096 12月 3 21:56 ..
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:12 untitled 2.txt
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:13 untitled 3.txt
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:13 untitled 4.txt
drwxr-xr-x. 2 zyj sftp 4096 12月 3 23:12 untitled folder
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:10 untitled.txt
1.使用客户端连接
2.使用命令行
sftp 用户名@主机ip
Connected to 主机ip.
sftp> ls
untitled 2.txt untitled 3.txt untitled 4.txt untitled folder
untitled.txt
五 常见问题
1. Connection to **** port ****: Broken pipe错误
[root@VM-20-9-centos ~]# ls -la /home/zyj
总用量 12
drwxr-xr-x. 3 root sftp 4096 12月 3 23:13 .
drwxr-xr-x. 5 root sftp 4096 12月 3 21:56 ..
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:12 untitled 2.txt //此处必须是zyj拥有权限
解决方法: step3 创建sftp组和用户
2. Connection to xxx closed by remote host错误
[root@VM-20-9-centos ~]# ls -la /home/zyj
总用量 12
drwxr-xr-x. 3 root sftp 4096 12月 3 23:13 .
drwxr-xr-x. 5 root sftp 4096 12月 3 21:56 .. //此处必须是root权限 对应 ChrootDirectory中配置的目录
-rwxr-xr-x. 1 zyj sftp 0 12月 3 23:12 untitled 2.txt
解决方法: step3 创建sftp组和用户