Last active
December 23, 2019 16:27
-
-
Save gotnix/4d6b7606c03495df82fb to your computer and use it in GitHub Desktop.
增、删、查 vsftpd 虚拟用户(基于Berkeley DB)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # | |
| # add Vsfptd Virtual User via Berkeley DB | |
| # | |
| vu_home='/data/ftp/' | |
| #vu_home='/tmp/ftp/' | |
| conf_dir='/etc/vsftpd/' | |
| #conf_dir='/tmp/vsftpd/' | |
| vu_conf="${conf_dir}vsftpd_user_conf/" | |
| bdb_dir="${conf_dir}bdb/" | |
| ################################################################ | |
| # DEFINE FUNCTIONS HERE | |
| ################################################################ | |
| usage () { | |
| cat << EOF | |
| Usage: $(basename ${0}) -<a|d|i> <user_name> | |
| -a Add a user. | |
| -d Delete a user. | |
| -i Query user information. | |
| EOF | |
| exit 1 | |
| } | |
| query_user () { | |
| local name=${1} | |
| if db_dump -p ${bdb_dir}vsftpd_login.db \ | |
| | grep -E "\<${name}\>$" 2>&1 > /dev/null ; then | |
| return 0 | |
| else | |
| return 1 | |
| fi | |
| } | |
| user_info () { | |
| local name=${1} | |
| if query_user ${name} ; then | |
| echo -e "The information about user <${name}> : " | |
| db_dump -p ${bdb_dir}vsftpd_login.db | /bin/grep -A 1 -E "\<${name}\>" | |
| #db_dump -p ${bdb_dir}vsftpd_login.db | sed -n "/\<"${name}"\>/{n;s/\ //;p;}" | |
| awk -F '=' '{print " "$2}' "${vu_conf}""${name}" | |
| else | |
| echo 'User is not exists.' | |
| fi | |
| } | |
| del_user () { | |
| local name=${1} | |
| local pw_rand=$(tr -dc '[:alnum:]' < /dev/urandom | head --bytes=4) | |
| # 删除用户 | |
| if query_user ${name}; then | |
| sed -i'_bak' "/^"${name}"$/{N;d}" ${bdb_dir}vsftpd_login.txt \ | |
| && mv ${bdb_dir}vsftpd_login.db{,_bak} \ | |
| && db_load -T -t hash -f ${bdb_dir}vsftpd_login.txt ${bdb_dir}vsftpd_login.db | |
| else | |
| echo "User is not exists." | |
| fi | |
| # 删除配置文件 | |
| if [[ -f "${vu_conf}${name}" ]]; then | |
| mv "${vu_conf}${name}"{,_bak} | |
| else | |
| echo "${vu_conf}${name} is not exists." | |
| fi | |
| # 删除目录 | |
| if [[ -d "${vu_home}${name}/" ]]; then | |
| mv "${vu_home}${name}"{,_bak}/ | |
| else | |
| echo "${vu_home}${name}/ is not exists." | |
| fi | |
| } | |
| add_user () { | |
| local name=${1} | |
| local pw_rand=$(tr -dc '[:alnum:]' < /dev/urandom | head --bytes=4) | |
| # 创建目录 | |
| if [[ -d "${vu_home}${name}/" ]]; then | |
| echo "Home_dir is exists." | |
| user_info "${name}" | |
| exit 4 | |
| else | |
| mkdir -p "${vu_home}${name}/image/" && chown -R daemon. "${vu_home}${name}/" | |
| fi | |
| # 创建配置文件 | |
| if [[ -f "${vu_conf}${name}" ]]; then | |
| echo "User is exists." | |
| user_info "${name}" | |
| exit 5 | |
| else | |
| echo "local_root=${vu_home}${name}/" > "${vu_conf}""${name}" | |
| fi | |
| # 添加用户 | |
| if ! query_user ${name} ; then | |
| cp -f "${bdb_dir}"vsftpd_login.txt{,_bak} \ | |
| && echo -ne "${name}\n${name}-${pw_rand}\n" >> ${bdb_dir}vsftpd_login.txt | |
| mv "${bdb_dir}"vsftpd_login.db{,_bak} \ | |
| && db_load -T -t hash -f ${bdb_dir}vsftpd_login.txt ${bdb_dir}vsftpd_login.db | |
| fi | |
| user_info "${name}" | |
| } | |
| ################################################################ | |
| # BEGINNING OF MAIN | |
| ################################################################ | |
| while getopts "a:d:i:h?" opt ; do | |
| case ${opt} in | |
| "|+") | |
| ;; | |
| a|+a) | |
| add_user "${OPTARG}" | |
| ;; | |
| d|+d) | |
| del_user "${OPTARG}" | |
| ;; | |
| i|+i) | |
| user_info "${OPTARG}" | |
| ;; | |
| "|+") | |
| ;; | |
| h|?|*) | |
| usage | |
| ;; | |
| esac | |
| done | |
| shift `expr $OPTIND - 1` | |
| OPTIND=1 | |
| exit $? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment