使用此脚本需要满足使用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.
- THE END -
又来看你了
呵呵 刷存在
不错的博客,支持一下!