vsftpd自动安装-虚拟用户模式

#!/bin/bash
vsdir=/etc/vsftpd
guestuser=ftp
vspid=`ps -ef |grep vsftpd|grep vsftpd.conf |grep -v "grep"|wc -l`
if [ ! -f /usr/bin/lsb_release ];then
	yum install -y redhat-lsb-core >> /dev/null 2>&1
	if [ $? -ne 0 ];then
		echo "yum无法使用,请检查网络配置或yum源"
		exit 1
	fi
fi

function install_mes() {
if (( $vspid >= "1" ));then
	echo "已有vsftpd进程在运行,安装退出"
	exit 0
else
	echo "即将安装vsfptd"
	read -p "输入ftp用户名(使用系统用户名将无法登陆): " username
	read -p "输入ftp密码: " password
	read -p "输入ftp端口(默认21): " port
	read -p "输入ftp目录(默认/data/FTP): " FTP
	echo "vsftpd 安装中..."
	yum -y install db4-utils vsftpd >> /dev/null 2>&1
	if [ $? -eq 0 ];then
		echo "vsftpd安装完成"
	else
		echo "vsftpd安装失败,脚本停止!!!"
		exit 1
	fi
fi
}

function adduser_mes() {
authfile=/etc/vsftpd/user.txt
guestuser=$(cat /etc/vsftpd/vsftpd.conf|grep guest_username|awk -F"=" '{print $2}')

if [ ! -f $authfile ];then
	echo "未找到用户密码文件,请手动添加,操作退出..."
	exit 1
fi
echo "即将添加vsftpd虚拟用户..."
read -p "ftp用户: " username
read -p "ftp密码: " password
read -p "ftp目录(默认 /data/FTP): " FTP
}


function config() {
vsdir=/etc/vsftpd
cd $vsdir
cp vsftpd.conf vsftpd.conf.bak
sed -i "s/anonymous_enable=.*$/anonymous_enable=NO/g" /etc/vsftpd/vsftpd.conf
sed -i "/connect_from_port_20=YES/ a \listen_port=21" /etc/vsftpd/vsftpd.conf
sed -i "s/^.*chroot_local_user=.*$/chroot_local_user=YES/g" /etc/vsftpd/vsftpd.conf
sed -i "s/^.*chroot_list_enable=.*$/chroot_list_enable=NO/g" /etc/vsftpd/vsftpd.conf
sed -i "s:^.*xferlog_file=.*$:xferlog_file=/var/log/vsftpd.log:g" /etc/vsftpd/vsftpd.conf
sed -i "/^.*listen_ipv6=.*$/ a \guest_enable=YES" /etc/vsftpd/vsftpd.conf
sed -i "/^.*guest_enable=YES.*$/ a \guest_username=ftp" /etc/vsftpd/vsftpd.conf
sed -i "/^.*guest_username=ftp.*$/ a \user_config_dir=/etc/vsftpd/conf.d" /etc/vsftpd/vsftpd.conf
echo -e """\npasv_enable=YES\npasv_min_port=50000\npasv_max_port=50100" >> /etc/vsftpd/vsftpd.conf
echo "reverse_lookup_enable=NO" >> /etc/vsftpd/vsftpd.conf
sysver=$(lsb_release -a |grep Release|awk '{print $2}'|awk -F"." '{print $1}')
if (( "$sysver" == "7" ));then
    echo -e """\nallow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
fi

if [ -n "$port" ];then
	sed -i "s/listen_port=21/listen_port=${port}/g" /etc/vsftpd/vsftpd.conf
else
	port=21
fi

mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
cat > /etc/pam.d/vsftpd << END
auth   required    /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account   required    /lib64/security/pam_userdb.so db=/etc/vsftpd/user
END
}

function adduser() {
vsdir=/etc/vsftpd
function up_down() {
cat << END
local_root=
write_enable=YES
download_enable=Yes
local_umask=022
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
END
}

if [ ! -d ${vsdir}/conf.d ];then
	mkdir $vsdir/conf.d
fi
cd $vsdir/conf.d
touch $username
up_down >> $username
if [ -n "$FTP" ];then
	echo "创建FTP目录: $FTP"
		if [ -d "$FTP" ];then 
		echo "目录已存在"
		chown $guestuser.$guestuser $FTP -R
	else
		mkdir -p $FTP >> /dev/null 2>&1
		chown $guestuser.$guestuser $FTP -R
		echo "创建成功"
	fi
	sed -i "s:local_root=.*$:local_root=$FTP:g" ${vsdir}/conf.d/${username}
else
	FTP=/data/FTP
	echo "创建FTP目录: $FTP"
		if [ -d "$FTP" ];then 
		echo "目录已存在"
		chown $guestuser.$guestuser $FTP -R
	else
		mkdir -p $FTP >> /dev/null 2>&1
		chown $guestuser.$guestuser $FTP -R
		echo "创建成功"
	fi
	sed -i "s:local_root=.*$:local_root=/data/FTP:g" ${vsdir}/conf.d/${username}
fi

cat > $vsdir/user.txt <<END
$username
$password
END
db_load -T -t hash -f $vsdir/user.txt $vsdir/user.db
}

function start_vsftpd () { 
echo "启动Vsftpd"
#/etc/init.d/vsftpd restart
service vsftpd restart
if [ $? -eq 0 ];then
	echo -e "\033[32m vsftpd 启动成功 \033[0m"
	echo -e "\033[31m 账号: $username \033[0m"
	echo -e "\033[31m 密码: $password \033[0m"
	echo -e "\033[31m 端口: $(grep -e "listen_port=.*$" /etc/vsftpd/vsftpd.conf|awk -F"=" '{print $2}')  \033[0m"
	echo -e "\033[31m 目录: $FTP  \033[0m"
	echo -e "\033[31m 如无法登录,请检查防火墙和SElinux配置  \033[0m"
else
	echo "vsftpd 启动失败,请手动检查配置"
fi
}


if [ "$1" == "adduser" ];then
	adduser_mes
	adduser
	start_vsftpd
else
	install_mes
	config
	adduser
	start_vsftpd
fi

猜你喜欢

转载自blog.csdn.net/wangshui898/article/details/80289561