#!/bin/bash
#write by ddcw
#使用说明:参数:-d 指定vsftpd分享目录; -s 简单的vsftpd,即匿名vsftpd; -u filename.txt 指定用户密码为filename.txt
#注意事项:若要有-d 选项, -d 必须为第一个选项 若无-d 则默认vsftpd_share_dir="/tpftp/" -i 表示安装vsftpd
#userlist.txt 单行为用户名,双行为密码
#例子: vsftp_install.sh -i -d /ftp -u userlist.txt
# vsftp_install.sh -i -s
vsftpd_conf_dir="/etc/vsftpd/"
vsftpd_share_dir="/tpftp/"
usage_vsftpd(){
echo "$0 -s install anonymous can login whith RW"
echo "$0 -u userlist.txt while create virtual user by userlist.txt"
echo "$0 -d ftpshare_directory set ftp share directory;if set,this is first must"
exit;
}
intall_vsftpd(){
rpm -qa | grep "vsftpd"
vsftpd_state=$?
if [ "${vsftpd_state}" -eq 0 ]
then
echo "vsftpd is install"
else
yum install vsftpd -y || echo "yum is error,you can run yum install vsftpd by yourself or hehe"
fi
}
simple_vsftpd(){
chmod -R 777 ${vsftpd_share_dir}
bak_config
sed -i "/anonymous_enable/canonymous_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/anon_mkdir_write_enable/canon_mkdir_write_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/anon_mkdir_write_enable/aanon_other_write_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/anon_upload_enable/canon_upload_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
chmod 777 /var/vsftpd/pub
}
dbuser(){
db_load -T -t hash -f $1 ${vsftpd_conf_dir}vuser.db || usage_vsftpd
chmod 600 ${vsftpd_conf_dir}vuser.db
}
set_vsftpd(){
[ -f /etc/pam.d/vsftpd.vu ] || touch /etc/pam.d/vsftpd.vu
echo -e "auth required pam_userdb.so db=/etc/vsftpd/vuser\naccount required pam_userdb.so db=/etc/vsftpd/vuser" > /etc/pam.d/vsftpd.vu
grep superftp /etc/passwd || useradd -s /sbin/nologin superftp
bak_config
sed -i "/anonymous_enable/canonymous_enable=NO" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/local_enable/clocal_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/pam_service_name/cpam_service_name=vsftpd.vu" ${vsftpd_conf_dir}vsftpd.conf 2>&1
sed -i "/userlist_enable/cuserlist_enable=YES" ${vsftpd_conf_dir}vsftpd.conf 2>&1
grep "user_config_dir" ${vsftpd_conf_dir}vsftpd.conf && sed -i "/user_config_dir/cuser_config_dir=${vsftpd_conf_dir}vuser_dir" ${vsftpd_conf_dir}vsftpd.conf 2>&1 || sed -i "/userlist_enable/auser_config_dir=${vsftpd_conf_dir}vuser_dir" ${vsftpd_conf_dir}vsftpd.conf 2>&1
[ -d /etc/vsftpd/vuser_dir ] || mkdir /etc/vsftpd/vuser_di
for userdir in `cat ${userlist} | awk 'NR%2'`
do
[ -f /etc/vsftpd/vuser_dir/${userdir} ] || touch /etc/vsftpd/vuser_dir/${userdir}
[ -d ${vsftpd_share_dir}${userdir} ] || mkdir ${vsftpd_share_dir}${userdir}
echo -e "guest_enable=YES\nguest_username=superftp\nlocal_root=${vsftpd_share_dir}${userdir}\nwrite_enable=yes\npam_service_name=vsftpd.vu\nanon_umask=022\nanon_world_readable_only=YES\nanon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES" > /etc/vsftpd/vuser_dir/${userdir}
done
chmod -R 755 ${vsftpd_share_dir}
chown -R superftp:superftp ${vsftpd_share_dir}
}
bak_config(){
[ -d ${vsftpd_conf_dir}bak_config ] || mkdir ${vsftpd_conf_dir}bak_config
cp ${vsftpd_conf_dir}vsftpd.conf ${vsftpd_conf_dir}bak_config/`date "+%s"`
}
#echo "this shell is beging;options is" $@
option_vsftpd=$@
option_shuzu=($option_vsftpd)
n=0
export flag=0
[ $# -eq 0 ] && usage_vsftpd || echo "this shell is begining...."
[ -f ${vsftpd_conf_dir}vsftpd.conf.bak ] || cp -nf ${vsftpd_conf_dir}vsftpd.conf ${vsftpd_conf_dir}vsftpd.conf.bak
for i in ${option_vsftpd}
do
n=$((n+1))
[ ${flag} -eq 1 ] && export flag=0 && continue
case $i in
-s|s)
simple_vsftpd;;
-u|u)
export userlist=${option_shuzu[n]}
echo $userlist
dbuser ${option_shuzu[n]}
set_vsftpd
export flag=1;;
-d|d)
[ -d ${option_shuzu[n]} ] || mkdir ${option_shuzu[n]}
strt=${option_shuzu[n]}
[ ${strt:${#strt}-1} == "/" ] || strt=${strt}"/"
echo "${strt}"
export vsftpd_share_dir=${strt}
export flag=1;;
-i|i)
intall_vsftpd;;
*)
usage_vsftpd;;
esac
done
service vsftpd restart
echo "successful!"
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。