1 修改/etc/ssh/sshd_config
$ vim /etc/ssh/sshd_config
注释#Subsystem sftp /usr/libexec/openssh/sftp-server,下面加入一行
Subsystem sftp internal-sftp
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
文件末尾添加
Match Group sftpusers # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
X11Forwarding no # 禁止用户使用端口转发
AllowTcpForwarding no # 禁止用户使用端口转发
ChrootDirectory /home/sftp/%u # 限制用户的根目录
ForceCommand internal-sftp # 只能用于sftp登录
2 重启SSH服务
$ systemctl restart sshd
3 添加用户组
$ groupadd sftpusers
4 建立目录
$ mkdir -p /home/sftp
$ mkdir -p /u01/scripts
5 编写建立sftp用户脚本
$ cd /u01/scripts
$ vim sftpuseradd.sh
输入以下内容后:wq保存
#! /bin/bash
useradd -g sftpusers -d /home/sftp/$1 $1
chown root:sftpusers /home/sftp/$1
chmod 755 /home/sftp/$1
mkdir -p /home/sftp/$1/SEND_HOME
chmod 777 /home/sftp/$1/SEND_HOME
echo $2 | passwd --stdin $1
增加执行权限
$ chmod 755 sftpuseradd.sh
执行脚本添加sftp用户,第一个参数用户名,第二个参数密码
$ sh sftpuseradd.sh sftpuser1 111111
6.目录权限
用户的根目录的权限设定有两个要点:
目录开始一直往上到系统根目录为止的目录拥有者都只能是root
目录开始一直往上到系统根目录为止都不可以具有群组写入权限。
上述方法开启的SFTP,用户登录后,在/SEND_HOME下有读写权限,/目录写入权限,不是很合理。
/etc/ssh/sshd_config 做如下调整:
ChrootDirectory /home/sftp
sftpuseradd.sh做如下调整
#! /bin/bash
useradd -g sftpusers -d /home/sftp/$1 $1
chown $1:sftpusers /home/sftp/$1
chmod 700 /home/sftp/$1
echo $2 | passwd --stdin $1
此配置在用户登录后,会显示出所有用户的文件夹,但只能进入本用户的目录,其他文件夹无权限进入。
7.报错记录
使用命令连接sftp:
sftp -P port uname@ip
报错信息如下:
packet_write_wait: Connection to xx.xx.xx.xx port 22: Broken pipe
根据第6点权限的要求,从/home路径开始排查权限,由于/home被集成商挂载到nas上时修改了权限为777,而sftp不允许有群组写入权限,将/home权限改为755后问题解决。