#!/usr/bin/env bash
#######################################################################
#
# 用途:此脚本用于新建sftp服务和账户
# 版本:v1.0
# 作者:weiman3389@126.com
# 最近修改:2019-08-26
#
#######################################################################
Ip=$(ip a|grep global|awk '{print$2}'|awk -F "/" '{print$1}')
#如果没有sftp组的话,建立sftp组
[[ $(grep sftp /etc/group|wc -l) -ge 1 ]] || groupadd sftp
#新建用户名
echo -e "
-------------$(date +%Y-%m-%d" "%H:%M:%S)----------------------------
"
read -p "请输入新建sftp用户名:" FtpUser
if [[ $(grep ${FtpUser} /etc/passwd|wc -l) -ge 1 ]];then
echo -e "已存在 ${FtpUser} 账号,请知悉。"
exit 1
else
#useradd -g sftp -s /bin/false ${FtpUser}
useradd -g sftp ${FtpUser}
fi
#为用户生成随机密码并保存到文件
PassWd=$(strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 12 | tr -d "
";echo)
echo -e "${PassWd}"|passwd --stdin ${FtpUser} 2>&1 >/dev/null
echo -e "${FtpUser} ${PassWd}" >> ~/.Secret.db
#建立SFTP目录
if [ ! -d /data/sftp ];then
mkdir -p /data/sftp
chown root:root /data/sftp && chmod 755 /data/sftp
fi
#建立SFTP用户登入后可写入的目录
mkdir -p /data/sftp/${FtpUser} && chown root:sftp /data/sftp/${FtpUser}
usermod -d /data/sftp/${FtpUser} ${FtpUser}
mkdir -p /data/sftp/${FtpUser}/upload && chown -R ${FtpUser}:sftp /data/sftp/${FtpUser}/upload
chmod 755 /data/sftp/${FtpUser}/upload
#修改/etc/ssh/sshd_config文件
if [[ $(grep "^#Subsystem" /etc/ssh/sshd_config|wc -l) -ge 1 ]];then
echo
else
sed -i 's/^Subsystem/#Subsystem/g' /etc/ssh/sshd_config
echo -e "
Subsystem sftp internal-sftp -l INFO -f AUTH #这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp #这行用来匹配用户组
ChrootDirectory /data/sftp/%u #用chroot将用户的根目录指定到/data/sftp ,这样用户就只能在/data/sftp下活动
AllowTcpForwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
ForceCommand internal-sftp -l INFO -f AUTH #指定sftp命令
" >> /etc/ssh/sshd_config
service sshd restart
fi
#关闭selinux
if [ $(grep "^SELINUX=" /etc/sysconfig/selinux|awk -F "=" '{print$2}') != 'disabled' ];then
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
fi
#报告sftp部署结果
echo -e "账户信息交付方式:"
echo -e "