环境说明
CentOS Linux release 7.8.2003
1. 创建sftp用户的脚本
#! /bin/bash
# 创建 sftp 用户组
groupadd sftp
# 创建sftp用户的根目录和属主.属组,修改权限(755)
rootdir=/opt/boxdata/data/sftp
if [ ! -d $rootdir ]
then
mkdir -p $rootdir
fi
chown root:root $rootdir
chmod 755 $rootdir
cd $rootdir
# 创建32个sftp用户
for i in {1..32};
do
# 添加sftp用户
useradd -g sftp -s /sbin/nologin -M sftp_user$i
# 设置用户密码
echo "sz@123456" | passwd --stdin sftp_user$i
# 在sftp的目录中创建可写入的目录
#dir=/opt/boxdata/data/sftp_user$i
if [ ! -d sftp_user$i ]
then
mkdir -p sftp_user$i
else
echo "sftp_user$i directory already exists"
fi
chown sftp_user$i:sftp sftp_user$i
chmod 755 sftp_user$i
done
2. 修改配置文件 sshd_config:vi /etc/ssh/sshd_config
注释掉下面这一行:
Subsystem sftp /usr/libexec/openssh/sftp-server
在sshd_config最后加入下面这几行:
Subsystem sftp internal-sftp
# Group / User 这个组的用户或者用户才能访问这个根目录
Match Group sftp
ChrootDirectory /opt/boxdata/data/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
注:
-
这里要注意一下,上面这些代码务必放在最后,因为必须要“UseDNS no”后面。
-
不同组不同用户匹配不同目录,可以添加多个匹配。
Match User sftp ChrootDirectory /opt/boxdata/data1/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp Match User sftp ChrootDirectory /opt/boxdata/data2/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
3. 重启sshd:
systemctl restart sshd
4. sftp 环境测试
sftp sftp_user1@IP
备注:
参考网址:https://blog.csdn.net/dx01259/article/details/88428839