# 登陆目标主机:
$ssh user@ip
# 切到root权限 或直接用root 用户
sudo -i
# 创建用户组,便于后续管理:
groupadd sftp
#添加用户:
# useradd -g sftp -s /sbin/nologin -M sftpuser
( -g 加入到sftp组 -s 禁止登录 -M 不要自动建立用户的登入目录)
5.设置密码:
# passwd sftpuser
6.创建SFTP文件根目录:
# mkdir -p /data/sftp
7.修改权限:
# chown -R root:root /data/sftp
# chmod 755 /data/sftp
8.创建用户文件目录:
# mkdir -p /data/sftp/sftpuser
9.修改拥有者:
# chown root:sftp /data/sftp/sftpuser
10.修改权限:
# chmod 755 /data/sftp/sftpuser
11.修改配置文件:
# vim /etc/ssh/sshd_config
PasswordAuthentication yes (一定要改成yes,不然可能直接登陆时被拒绝)
注释掉:Subsystem sftp /usr/libexec/openssh/sftp-server
在 文件最后添加以下配置,否则可能导致sshd服务无法启动
Subsystem sftp internal-sftp
UsePAM yes
Match Group sftp 这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割 匹配用户的话用 Match User sftpuser
ChrootDirectory /data/sftp/%u 用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动
ForceCommand internal-sftp 指定sftp命令
AllowTcpForwarding no 以下这两行,限制该用户使用端口转发
X11Forwarding no
12.重启服务验证:# systemctl restart sshd.service
注意:这样配置用户可以读文件,但无法上传文件,如果要上传文件,需要在目录下创建一个新目录,然后授予账号读写权限
新增用户步骤繁多,所以添加脚本如下:
#!/bin/bash
# date 2019-07-31
# 新增sftp用户
bashPath="/home/dachuizichan/sftpShare"
work_path=$(dirname $0)
#执行脚本后加用户名,空格隔开
user_list="$@"
group="sftp"
msg=44
if [ -z "$1" ];then #对输入的参数做判断,如果未输入参数则返回脚本的用法并退出,退出值${msg}
echo "Usage:$0 + 参数!"
exit $msg
fi
# create pwd if not exists
if [ ! -d "${bashPath}" ];then
mkdir ${bashPath} -p
fi
#create group if not exists
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ];then
groupadd $group
fi
for user in ${user_list}
do
useradd -g sftp -s /sbin/nologin -M ${user}
pwd=`openssl rand -base64 8` #随机生成8位密码
echo "${pwd}" | passwd --stdin ${user} #标准输入修改密码
mkdir ${bashPath}/${user}/upload -p
chown root:sftp ${bashPath}/${user}
chmod 755 ${bashPath}/${user}
chmod 777 ${bashPath}/${user}/upload
#记录新增用户信息到日志文件
echo -e "$(date +"%Y%m%d %H:%M%S")\t用户名:${user}\t密码:${pwd}\n上传路径:${bashPath}/${user}/upload\n" >> ${work_path}/add_sftpUser_$(date +"%Y%m%d").log
echo "-*-"*50
#mail 需要发送邮件的,可以增加
done