搭建ftp和vsftp虚拟用户的脚本

  • A+
所属分类:Linux基础
#!/bin/bash
#说明:21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口。
#### 关闭SELINUX

cat << EOF
***********************************
      THE FLLOWING IS OPTIONS
***********************************
    1)增加ftp用户

    2)增加ftp虚拟用户

    3)安装ftp服务增加用户

    4)安装ftp服务增加虚拟用户

    *)
***********************************
EOF
read -p "please enter your chioce:" option
echo '正在关闭SELINUX'
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
iptables -F
echo '当前SELINUX状态为:'
getenforce


ftp(){

            groupadd vsftp
            #安装vsftpd
            yum install -y vsftpd
            systemctl start vsftpd
            systemctl enable vsftpd

            #配置vsftpd.conf文件
            cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
            echo -e "anonymous_enable=NO\nlocal_enable=YES\nallow_writeable_chroot=YES\nwrite_enable=YES\nlocal_umask=022\ndirmessage_enable=YES\nxferlog_enable=YES\nconnect_from_port_20=YES\nxferlog_std_format=YES\nchroot_local_user=YES\nlisten=NO\nlisten_ipv6=YES\npam_service_name=vsftpd\nuserlist_enable=YES\ntcp_wrappers=YES" > /etc/vsftpd/vsftpd.conf

}


ftpvhost() {
            echo '开始安装vsftpd'
            yum install -y vsftpd

            echo '开始安装vsftpd虚拟用户配置依赖包'
            yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI

            echo '安装结束,开始配置vsftp服务'
            systemctl start vsftpd.service
            echo '服务启动成功'
            systemctl enable vsftpd.service
            echo '已将服务设置为开机启动\n
            -----在修改vsftp配置文件----'

            echo '正在修改vsftp配置文件...'

            cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak
            echo'备份配置文件'
                    #执行以下命令进行设置
            sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
            sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'
            echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nallow_writeable_chroot=YES\nidle_session_timeout=300\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES\npasv_min_port=10060\npasv_max_port=10090\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf

            echo '主配置文件修改完成'

            #### 五、建立虚拟用户名单文件
            echo '虚拟用户配置创建中...'
            touch /etc/vsftpd/virtusers

            #### 七、在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)

            #修改前先备份
            cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak

            echo -e "#%PAM-1.0\nauth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers\naccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers">/etc/pam.d/vsftpd
                    #注意:如果系统为32位,上面改为lib,否则配置失败
            #### 八、新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)

            useradd vsftpd -d /home/ftp -s /bin/false
            #chown vsftpd:vsftpd /home/ftp -R

                    #如果虚拟用户的宿主用户为www,需要这样设置。
                    #[root@localhost ~]# chown www:www /home/wwwroot -R
            mkdir /etc/vsftpd/vconf
            }

add() {
                        #用户名
            #以交互方式建立vsftp用户,使其属于vsftp组
            read -p "Please enter the username:" USER
            useradd -G vsftp -s /sbin/nologin $USER
            #创建上传目录
            chown $USER:vsftp /home/$user
            #chgrp -R sftp /home/$user
            chmod -R 755 /home/$USER
            #为用户创建sftp登录密码
            PASSWD=`echo $RANDOM | md5sum |cut -c 1-8`
            echo "PASSWD" | passwd --stdin $USER
        }

addvhostuser() {
            read -p "请输入用户名:" USER

            PASSWD=`echo $RANDOM | md5sum |cut -c 1-8`
            echo "随机8位密码口令为:$PASSWD"
            #编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)
            echo -e "$USER\n$PASSWD\n" >/etc/vsftpd/virtusers
            echo '虚拟用户创建完成'

            #### 六、生成虚拟用户数据文件       
            db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
            #设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
            chmod 600 /etc/vsftpd/virtusers.db
            echo '虚拟用户配置结束'

            #### 九、建立虚拟用户个人vsftp的配置文件


            cd /etc/vsftpd/vconf

            #这里创建二个虚拟用户配置文件
            touch $USER
            mkdir -pv /home/ftp/$USER/pub/

            chmod 777 /home/ftp/$USER/pub
            chown vsftpd:vsftpd /home/ftp -R

                    #编辑用户web1配置文件,其他的跟这个配置文件类似
            echo -e "local_root=/home/ftp/$USER/\nwrite_enable=YES\nanon_world_readable_only=NO\nanon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES\n">>$USER

            echo '虚拟用户目录创建结束'
            }
restartftp() {
            #### 十、最后重启vsftpd服务器
            systemctl restart vsftpd.service
            echo '配置结束,初始化中...'
            sleep 5
            }
showadduser(){
                    echo -e "ftp用户创建完成\n
                            用户名:$USER\n
                            密码:$PASSWD\n" 
                }

case  "$option" in
    add|1)
        add     
        restartftp
        showadduser
        ;;
    addvhostuser|2)
        addvhostuser
        restartftp
        showadduser
        ;;
    ftp|3)
        ftp
        add
        restartftp
        showadduser
        ;;
    ftpvhost|4)
        ftpvhost
        addvhostuser
        restartftp
        ;;

    *)
    echo '参数错误,请确认!!!'
        ;;
esac
        #备注:
        #guest_username=vsftpd #指定虚拟用户的宿主用户(就是我们前面新建的用户)
        #guest_username=www #如果ftp目录是指向网站根目录,用来上传网站程序,可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题



avatar

发表评论

您必须登录才能发表评论!