使用此脚本需要满足使用VSFTP虚拟用户及使用ACL控制访问列表功能才可用!纯粹自己用~~如想使用请自行修改~
Vsftp服务安装搭建,虚拟用户配置 参见://kinggoo.com/app-installvsftpdconf.htm
Acl(Access Control List)访问控制列表 参见://kinggoo.com/geren-acl.htm
注意:使用此脚本必须要你的计算机上支持ACL 此脚本为文章库存~~~
ftpAddUser.sh 脚本
@功能: 针对使用vsftp添加虚拟用户
@格式参数: sh ftpAddUser.sh 虚拟用户名 虚拟密码
@@介绍:使用此脚本时,必须含有setACL_ftpWeb.sh
脚本内容如下:
#!/bin/bash
## @auth: Tscccn
## @blog: //kinggoo.com
## @功能: 针对使用vsftp添加虚拟用户
## @格式参数: sh ftpAddUser.sh 虚拟用户名 虚拟密码
##
# _Home 新添加的ftp用户所要能被访问的根目录
# 比如ftp用户家目录为/home/abc,那_Home设置为/home/即可
_Home="/var/www/html/"
# _vsftpdConfig :vsftpd服务所设置用来保存虚拟用户配置文
# 件的目录。
# 即你在vsftpd服务配置文件内所设置的user_config_dir的属性
_vsftpdConfig="/etc/vsftpd/vsftpd_config/"
# 回显信息
__outMsg(){
echo "------------------------"
echo "- 请输入编号并回车 -"
echo "------------------------"
echo "( 1 ) 添加vsftp虚拟用户 "
echo "( 2 ) 删除vsftp虚拟用户 "
echo "( 3 ) 查看已存在虚拟用户信息 "
echo -e -n " \033[31m \033[05m 请输入数字并回车\033[0m:"&& read num
}
# 测试用户是否存在,存在将变量_funTestUser置为1不存在为0
__testUser(){
vU=$1
i=`awk -F':' '{print $1}' /etc/passwd|grep -o "${vU}" |wc -l`
if (( $i == 0 ));then
_funTestUser=0
else
_funTestUser=1
fi
}
# 创建用户
__userAdd(){
_vsftpdConfig=$4
_Home=$3
_aclPath=${_Home}
_home=${_Home%?}
_ftpUser=$1
_ftpPasswd=$2
useradd -d ${_home} -s /sbin/nologin ftp.${_ftpUser} > /dev/null 2>&1 && _temp="成功" || _temp="失败"
echo "添加关联系统ftp用户 ...... [${_temp}]"
echo "创建虚拟ftp存放文件夹 & 创建配置文件等信息"
mkdir -p ${_Home}${_ftpUser} && _temp="成功" || _temp="失败"
echo "创建 ${_Home}${_ftpUser} ...... [${_temp}]"
cat>${_vsftpdConfig}${_ftpUser}<> `dirname ${_vsftpdConfig}`/virtual_login
echo "${_ftpPasswd}" >> `dirname ${_vsftpdConfig}`/virtual_login
# 限制在配置文件内执行的目录下
echo "${_ftpUser}" >> `dirname ${_vsftpdConfig}`/chroot_list
db_load -T -t hash -f `dirname ${_vsftpdConfig}`/virtual_login `dirname ${_vsftpdConfig}`/virtual_login.db && _temp="成功" || _temp="失败"
echo "更新虚拟用户账户 ...... [${_temp}]"
sh ${_Home}setACL_ftpWeb.sh ftp.${_ftpUser} ${_Home} && _temp="成功" || _temp="失败"
echo "处理acl权限 ...... [${_temp}]"
#/etc/init.d/vsftpd restart
service vsftpd restart
}
# 删除用户
__userDel(){
_vsftpdConfig=$3
_Home=$2
_aclPath=${_Home}
_home=${_Home%?}
_ftpUser=$1
echo -n "准备删除系统用户ftp.${_ftpUser} ... "
userdel ftp.${_ftpUser} > /dev/null 2>&1 && _temp="成功" || _temp="失败"
sleep 1
echo "... [${_temp}]"
echo "备份相关文件 ... "
yes|cp `dirname ${_vsftpdConfig}`/virtual_login `dirname ${_vsftpdConfig}`/virtual_login.ts > /dev/null 2>&1 && _temp1="成功" || _temp1="失败"
echo "[`dirname ${_vsftpdConfig}`/virtual_login.ts] ... [${_temp1}]"
# 清除虚拟文件此帐号密码
sed -i '/^'${_ftpUser}$'/{N; d}' `dirname ${_vsftpdConfig}`/virtual_login
yes|cp `dirname ${_vsftpdConfig}`/chroot_list `dirname ${_vsftpdConfig}`/chroot_list.ts > /dev/null 2>&1 && _temp2="成功" || _temp2="失败"
echo "[`dirname ${_vsftpdConfig}`/chroot_list.ts] ... [${_temp2}]"
# 清除限制目录切换
sed -i '/^'${_ftpUser}\$'/d' `dirname ${_vsftpdConfig}`/chroot_list
echo -n "准备删除文件 ${_vsftpdConfig}${_ftpUser} 按任意键继续"&& read
rm -rf ${_vsftpdConfig}${_ftpUser} > /dev/null 2>&1 && _temp="成功" || _temp="失败"
echo "删除 ...... ${_temp}"
db_load -T -t hash -f `dirname ${_vsftpdConfig}`/virtual_login `dirname ${_vsftpdConfig}`/virtual_login.db && _temp="成功" || _temp="失败"
echo "更新虚拟用户账户 ...... [${_temp}]"
echo "请手动删除 ${_Home}${_ftpUser} "
service vsftpd restart
}
# main Top
__outMsg
# 处理交互数据
case $num in
1)
echo -e -n "\033[31m 请输入vsftp虚拟用户用户名\033[0m:"&& read _vUser
if [[ $(echo "${_vUser}"|wc -c) > 1 && ${_vUser/ /} == ${_vUser} ]];then
__testUser ${_vUser}
if [[ ${_funTestUser} == 0 ]];then
echo "--->> 在系统内没有发现这个用户。"
echo -n "--->> 是否立即创建(${_vUser})?[y/n]"&& read _isOk
if [[ ${_isOk} == "Y" || ${_isOk} == "y" ]];then
echo -n "--->> 请输入虚拟用户 ${_vUser} 的ftp密码 "&& read _vPasswd
_ftpUser=${_vUser}
_ftpPasswd=${_vPasswd}
__userAdd ${_ftpUser} ${_ftpPasswd} ${_Home} ${_vsftpdConfig}
else
clear
__outMsg
fi
else
echo "--->> 此用户已存在。"
echo "..... 马上跳转 ....."
sleep 2
clear
__outMsg
fi
else
#用户名输入格式不标准
clear
__outMsg
fi
;;
2)
echo -e -n "\033[31m 请输入要删除的 vsftp 虚拟用户用户名\033[0m:"&& read _vUser
if [[ $(echo "${_vUser}"|wc -c) > 1 && ${_vUser/ /} == ${_vUser} ]];then
__testUser ftp.${_vUser}
if [[ ${_funTestUser} == 1 ]];then
echo "--->> 在系统用户文件内检测到关联帐号 ftp.${_vUser} "
echo -n "--->> 是否删除与(${_vUser})关联帐号?[y/n]"&& read _isOk
if [[ ${_isOk} == "y" || ${_isOk} == "Y" ]];then
_ftpUser=${_vUser}
__userDel ${_ftpUser} ${_Home} ${_vsftpdConfig}
else
clear
exit
fi
else
echo "--->> 无法删除,系统内查找不到此用户信息"
echo "按任意键退出!"
read
clear
exit
fi
else
#用户名输入格式不标准
clear
echo "输入格式不符合标准 ... 退出"
exit
fi
;;
3)
_userArr=( $( sed -n '1~2p' `dirname ${_vsftpdConfig}`/virtual_login ) )
_passwdArr=( $( sed -n '0~2p' `dirname ${_vsftpdConfig}`/virtual_login ) )
echo "有如下虚拟用户"
echo " ___________________________________"
printf "| 用户名\t| 密码\t|\n"
echo "|_______________ ___________________|"
for (( i=0 ;i<${#_userArr[@]};i++))
do
# echo $i | awk '{ print length, $0}' - | sort -n -t $'\t' || sed 's/.* //'
printf "| ${_userArr[$i]}\t| ${_passwdArr[$i]}\n"
done
;;
exit|EXIT)
exit ;;
*)
exit
;;
esac
setACL_ftpWeb.sh 脚本
@功能: 设置虚拟FTP用户对web用户的访问
@格式参数: sh setACL_ftpWeb.sh ftp的虚拟用户 nginx进程用户 需要设置的路径
@@介绍:在单独使用的时候,请在设置时将需要设置的路径最好是web的根目录,比如你的a、b、c三个Web站点放在“/var/www/html/”下,则需要将设置的路径改为"/var/www/html"
脚本内容如下:
#!/bin/bash ## @auth: Tscccn ## @blog: //kinggoo.com ## @功能: 设置虚拟FTP用户可以访问对应WEB目录 ## @格式参数: sh setACL_ftpWeb.sh ftp用户 nginx进程用户 需要设置的路径 # $1: ftp用户 # $2: nginx进程用户 # $3: 需要设置的路径,需要手动创建 setfacl -R -m u:$1:rwx $3; setfacl -R -m u:$2:rwx $3; setfacl -d -R -m u:$1:rw- $3; setfacl -d -R -m u:$2:rwx $3; setfacl -R -m g:$1:--- $3; setfacl -R -m g:$2:--- $3; setfacl -d -R -m g:$1:--- $3; setfacl -d -R -m g:$2:--- $3; setfacl -R -m o::--- $3; setfacl -d -R -m o::--- $3; setfacl -R -m m::rwx $3; setfacl -d -R -m m::rw- $3;
OK.
如果你觉得好,请大家到公众号给个红心支持一下!!


玩趣儿

又来看你了
呵呵 刷存在
不错的博客,支持一下!