VSFTPD一键安装脚本

#!/bin/bash
# ubuntu vsftpd install

ftp_install(){

FtpPackageList=( vsftpd db-util )
for i in ${FtpPackageList[*]}
do
    FtpPackage=`sudo apt list --installed | grep $i ` 
    if [ ${#FtpPackage} -lt 10 ] 
    then 
        # 更新切换apt 源
        sudo dpkg --configure -a ; sudo apt --fix-broken install -y
        # 解决无法安装软件
        sudo apt install $i -y
    else
        echo "[ok] $i 已经安装"
    fi
done
}

ftp_home(){
sudo touch  /etc/vsftpd.user_list
# 解决 500 


if [ -d /var/ftp ];then
    mkdir -p /var/ftp
fi

CreateUser=`ls -alh /var/ftp | awk -F" " 'NR==2{print $3}'`
if [ "$CreateUser" == "ftpvload" ]
then
    echo "[ok] ftp 用户已经创建!"
else
    sudo mkdir -p /var/ftp                                  # -p 自动创建父目录文件夹:
    sudo useradd vsftpd -M -s /sbin/nologin                 # 创建 vsftpd 用户: ,如果此目录不存在,则同时使用-m选项,可以创建主目录。
                                                        # -s Shell文件 指定用户的登录Shell。

    sudo mkdir /etc/vsftpd/ ; sudo chmod 700 /etc/vsftpd
    sudo touch /etc/vsftpd.user_list 

    sudo useradd ftpvload -d /var/ftp/ -s /sbin/nologin     # -d 目录 指定用户主目录
    sudo chown -R ftpvload.ftpvload /var/ftp/               # -R 目录拥有者ftpvload:ftpvload  其中 . 可以换成 
fi
}

ftp_conf(){
    # 修改ftp主配置文件
    userConfig="/etc/vsftpd/vconf"
    file="/etc/vsftpd.conf"

    sudo chown -R root:root $userConfig
    # 重点 ftp 子用户配置目录必须是 root 用户所有; 否则:500 OOPS: config file not owned by correct user, or not a file

    if [ ! -e $file.bak ];then 
        sudo cp $file $file.bak ; sudo chmod 777 $file
    fi
    sudo chmod 777 $file

    echo "
    pasv_promiscuous=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    chown_uploads=NO
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    async_abor_enable=no
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Welcome to FTP Server
    chroot_local_user=YES
    ls_recurse_enable=NO
    listen=YES
    hide_ids=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=NO
    guest_enable=YES
    guest_username=ftpvload
    virtual_use_local_privs=YES
    user_config_dir=$userConfig
    pasv_enable=YES
    pasv_min_port=10050
    pasv_max_port=10070
    " > $file
}


ftp_user_so(){
    # 开启虚拟用户功能
    pamfile="/etc/pam.d/vsftpd" 
    sudo cp $pamfile $pamfile.bak  ; sudo chmod 777 $pamfile 
    echo "注意: 重要子用户配置文件:$pamfile   只需要保留两行, 否则添加子用户无法登陆
    auth    sufficient      /usr/lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/virtusers
    account sufficient      /usr/lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/virtusers
    当前库文件路径:"
    sudo find / -name pam_userdb.so | grep -v "snap" | grep "/usr/lib"

    buff=`cat $pamfile | grep /usr/lib/x86_64-linux-gnu/security/pam_userdb.so ` ;  buffLength=${#buff}
    if [ $buffLength -lt 100 ]
    then 
        if [ ! -e $pamfile.bak ]
        then
            sudo cp $pamfile $pamfile.bak
        fi
        sudo chmod 777 $pamfile
        sudo sed -i "s/^/#/g" $pamfile         # 在开头添加 # 号全部注释

        #  sudo find / -name pam_userdb.so  | grep lib | grep -v snap
        sudo echo "auth    sufficient      /usr/lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/virtusers
        account sufficient      /usr/lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/virtusers" > $pamfile

        userfile="/etc/vsftpd"
        sudo touch /var/log/vsftpd.log
        sudo chown vsftpd.vsftpd /var/log/vsftpd.log
        sudo mkdir $userfile ; sudo chmod 777 $userfile ; sudo mkdir -p $userfile/vconf/ 

    else
        pamfile="/etc/pam.d/vsftpd"
        echo "[ok] vsftpd 用户新增配置功能已经设置,设置文件: $pamfile"
    fi
}

ftp_user_add(){
    ftp_conf ; userConfig=$userConfig
    # 执行函数,获取ftp 子用户配置目录
    userFile="/data/ftp"
    # 配置用户的家目录

    sudo touch /etc/vsftpd/vsftpd.user_list
    sudo chmod 777 -R /etc/vsftpd

    echo ""
    echo "创建 ftp 登陆子用户,请输入 ftp 用户和密码,空格个开: "
    read -p "输入:" userRead
    buff=($userRead) ; echo "[ok] 正在创建信息为: ${buff[*]}   家目录自动分配到:$userFile/${buff[0]}"

    if [ ${#buff[*]} == 2 ]
    then
        if [ ! -e $userFile/${buff[0]} ]
        then
            sudo mkdir $userFile/${buff[0]}
            sudo chown -R ftpvload.ftpvload $userFile/${buff[0]}
        else
            echo "[error] 用户存在,请重新输入!  当前存在的路径:$userFile/${buff[0]} "
            exit
        fi
    else
        echo "[error] 输入的参数错误,需要输入两个参数,用户 和 密码,如:  eisc  123456"
        exit
    fi

    sudo touch /etc/vsftpd/virtusers
    sudo chmod 777 /etc/vsftpd/virtusers
    echo -e "${buff[0]}\n${buff[1]}" >> /etc/vsftpd/virtusers
    sudo chown -R $USER:$USER /etc/vsftpd/virtusers
    sudo db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
    # 使用库,对新增用户生效
    sudo chmod 777 $userConfig
    sudo mkdir -p $userFile/${buff[0]} ; sudo chmod 777 $userFile/${buff[0]}

    echo "
    # 允许可写
    allow_writeable_chroot=YES
    #设定支持ASCII模式的上传和下载功能
    ascii_upload_enable=YES
    ascii_download_enable=YES
    local_root=$userFile/${buff[0]}
    #指定虚拟用户的具体主路径
    anonymous_enable=NO
    #设定不允许匿名用户访问
    write_enable=YES
    #设定允许写操作
    local_umask=022
    #设定上传文件权限掩码
    anon_upload_enable=NO
    #设定不允许匿名用户上传
    anon_mkdir_write_enable=NO
    #设定不允许匿名用户建立目录
    idle_session_timeout=600
    #设定空闲连接超时时间
    data_connection_timeout=120
    #设定单次连续传输最大时间
    max_clients=10
    #设定并发客户端访问个数
    max_per_ip=5
    #设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
    #local_max_rate=50000
    #设定该用户的最大传输速率,单位b/s" >> $userConfig/${buff[0]}

    sudo systemctl restart vsftpd

}


ftp_drop(){
read -p "清输入用户:" readu
sudo rm -rf /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db  /eisc/ftp/* /etc/vsftpd/vconf/*

}

main(){
ftp_install ; ftp_home ; ftp_conf ; ftp_user_so ; ftp_user_add

sudo chown -R root:root $userConfig
# 子用户配置文件目录,需要归 root 用户所有
}
main

You May Also Like

More From Author

+ There are no comments

Add yours