sftp替换vsftp做文件传输

Z先森 2018-10-19 PM 1878℃ 0条

前言

vsftp配置过于复杂,传输也不安全,还需要额外开服务和端口,安全方面不是很优,考虑通过sftp替换掉vsftp。

功能:

  • 通过ssh通道连接,无需多开服务和端口
  • 自带ssh2的加密传输
  • 限制用户目录跳转,只能在指定目录创建和查看
  • 无需关闭selinux,增加系统安全性
  • 通过facl控制权限,不影响目录原有属性和权限
  • 开启了日志记录功能

整理成了一键脚本如下:
需要修改的地方:

  • web="test1 test2"
  • user_dir="/home/www/"

使用方法:sh sftp.sh

#!/bin/bash
#站点目录,用户名根据站点目录生成,多个站点用空格隔开
#例web="test1 test2",生成的用户为sftp_test1 sftp_test2
web="test1 test2"
user_dir="/home/www/"
ssh_dir="/etc/ssh/sshd_config"

#配置权限,属主必须为root,权限必须为755,facl也不行
chown root.root ${user_dir}
chmod 755 ${user_dir}

#设置sebool值
setsebool ssh_chroot_full_access 1

#配置ssh,开启internal-sftp
if [[ `grep -w internal-sftp ${ssh_dir} | wc -l` -eq 0 ]];then
    sed -i "s/Subsystem/#Subsystem/g" ${ssh_dir}
    echo "Subsystem sftp internal-sftp -l INFO -f local5" >>${ssh_dir}
fi

for user in ${web};do
    if [[ `grep -w "Match user sftp_${user}" ${ssh_dir} | wc -l` -eq 0 ]];then
    cat <<EOF >>${ssh_dir}
### START ###
Match user sftp_${user}
ChrootDirectory ${user_dir}
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO
### END ###
EOF
fi

#开启sftp日志
if [[ `grep "local5." /var/log/sftp.log | wc -l` -eq 0 ]];then
    echo "auth,authpriv.*,local5.*    /var/log/sftp.log" >>/etc/rsyslog.conf
    service rsyslog restart
fi

#添加用户
if [[ `grep -w "sftp_${user}" /etc/passwd | wc -l` -eq 0 ]];then
    useradd -M -s /bin/false sftp_${user}
    read -s -t 30 -p "请在30S内输入站点${user}用户密码: " password
    echo "${password}" |passwd --stdin sftp_${user}
    echo "用户生成完毕,用户名为: sftp_${user}"

else
    echo "用户sftp_${user}已存在,请检查"
fi

#赋权对应目录给用户
cd ${user_dir}
setfacl -R -d -m u:sftp_${user}:rwx ${user_dir}${user}
setfacl -R -m u:sftp_${user}:rwx ${user_dir}${user}

#去掉不该有的目录权限,增加安全
setfacl -m u:sftp_${user}:--- `ls ${user_dir} | grep -v "${user}"`
done

#重启ssh服务
service sshd restart

#人性化输出
echo "请使用sftp进行连接,端口号:`netstat -anltp | grep LISTEN | grep sshd | grep "0.0.0.0" | awk '{print $4}' | awk -F: '{print $2}'`"
标签: none

如无特殊说明,本博所有文章均为博主原创。

评论啦~