查看SSH版本
确保openssh版本大于4.8p1。
ssh -V
创建用户登入目录
mkdir -p /opt/file/sftpuser
创建SFTP用户组
groupadd sftp
创建SFTP用户
# -g 指定用户所属群组
# -d 指定用户登入目录
# -s 禁止用户登入系统
# -M 不建立登入目录
useradd -g sftp -d /opt/file/sftpuser -s /sbin/nologin -M sftpuser
设置用户密码
passwd sftpuser
echo "userpass" | passwd --stdin sftpuser
修改SSH配置文件
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
# 限制用户认证时限
LoginGraceTime 2m
# 是否连接前权限检查
StrictModes yes
# 最大认证次数
MaxAuthTries 6
# 最大保持连接
MaxSessions 10
# 最大保持未认证连接
MaxStartups 10:30:100
# Subsystem sftp /usr/libexec/openssh/sftp-server
# 外部子系统
Subsystem sftp internal-sftp
# 条件块
Match Group sftp
# 是否进行X11转发
X11Forwarding no
# 是否允许TCP转发
AllowTcpForwarding no
# 指定Chroot认证路径
ChrootDirectory %h
# 强制执行指定命令
ForceCommand internal-sftp
重启SSH服务
systemctl restart sshd
设置目录权限
chown root:sftp /opt/file
chmod 750 /opt/file
chown root:sftp /opt/file/sftpuser
chmod 750 /opt/file/sftpuser
其它
若系统做过加固,可能需对如下文件解保护。
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
若登入目录存在子目录,权限将如下设置。
chown sftpuser:sftp /opt/file/sftpuser/upload
chmod 500 /opt/file/sftpuser/upload
注意
ChrootDirectory目录所有者必须为root用户,且只有其具备w权限。