使用此脚本需要满足使用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
脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
#!/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}<<EOF guest_enable=yes guest_username=ftp.${_ftpUser} local_root=${_Home}${_ftpUser} anon_umask=022 idle_session_timeout=600 data_connection_timeout=120 max_clients=5 max_per_ip=5 local_max_rate=0 EOF echo "${_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"
脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/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 -
又来看你了
呵呵 刷存在
不错的博客,支持一下!