手里管着好几台服务器,经常添加修改FTP,特别麻烦(我不喜欢那些什么一键包或者面板什么的,用不上的东西太多,也占资源,我喜欢用什么装什么,用不上的一律不装)
服务器ubuntu 12.04 ,FTP 装的 vsftpd 管理FTP的时候,一般要先加入用户名和密码,然后写配置文件,然后建立目录,然后生成账号加密文件。。。
太繁琐了,实在受不了,花了一天时间,简单学了一下SHELL,编写了这个脚本,大牛不要笑,本人小菜,之前也没弄过SHELL,代码写得不好看,不过用起来应该还是可以的
先看下图:
#!/bin/bash
#
# VSFTPD基本管理脚本
# Author 戴举龙
# Email daijulong@qq.com
# QQ 88622090
# 此脚本仅在ubuntu12.04下测试可用,其他linux发行版未测试,可用性未知
# 使用时执行shell为bash
# 此脚本默认服务器上已经安装并配置好VSFTPD,db5.1_util
# 前面几行配置需要根据实际情况修改后才可正常使用
# hash_account 函数中的db5.1_load 也需要修改为实际安装的版本
# 虚拟用户的相关权限配置,请在文件中查找“生成账号配置文件“,更换为自己的配置
#
#以下配置内容
#需要根据实际情况进行修改后才可使用
#用户列表文件
ftpuser_file="/root/ftpuser"
#账号加密文件
ftpuser_hash_file="/etc/vsftpd/vsftpd_login.db"
#用户配置文件目录
ftpuser_conf_dir="/etc/vsftpd/user_conf/"
#chroot用户列表文件
ftpuser_chroot_list_file="/etc/vsftpd/vsftpd.chroot_list"
#生成加密文件
hash_account(){
#测试在删除账号的情况下仅重新生成覆盖原文件时删除的账号依然能登录,虽然目录会改变
#所以先删除加密文件,再重新生成
rm -f $ftpuser_hash_file
db5.1_load -T -t hash -f $ftpuser_file $ftpuser_hash_file
}
##### 以上的内容需要根据实际配置进行修改 #####
#检查用户名,存在返回1
check_username(){
if [[ -f $ftpuser_file ]]; then #账号文件存在
i=0
while read line
do
let "i =1"
if [[ $i%2 -eq 1 ]];then #奇数行,即用户名所在行
if [[ $line = $1 ]];then
return 1
fi
else
continue
fi
done<$ftpuser_file
return 0
else #不存在文件则直接返回
return 0
fi
}
#取得用户名所在的行,如无用户名,则返回0
get_username_line_num(){
if [[ -f $ftpuser_file ]]; then #账号文件存在
j=0
while read line
do
let "j =1"
if [[ $j%2 -eq 1 ]];then #奇数行,即用户名所在行
if [[ $line = $1 ]];then
return $j
fi
else
continue
fi
done<$ftpuser_file
return 0
else #不存在文件则直接返回
return 0
fi
}
##########################################
#### 开始程序 #####
##########################################
echo "请选择要进行的操作:"
select menu in "新建FTP用户" "重新生成加密文件" "修改用户密码" "删除用户" "重启VSFTPD服务" "停止VSFTPD服务" "启动VSFTPD服务" "退出";do
break;
done
##########################################
#### 添加新用户 #####
##########################################
if [ $menu = "新建FTP用户" ];then
#用户名
echo "请输入用户名:"
read username
while [ 1 -eq 1 ];do
check_username $username
if [ $? = 1 ];then
echo "用户名已存在,请重新指定用户名:"
read username
continue
else
break
fi
done
#密码
echo "请输入密码:"
read passwd
#FTP目录
echo "请输入用户目录(绝对路径):"
read path
while [ 1 -eq 1 ];do
if [ -d $path ];then
break
else
echo "目录不存在,请选择以下操作:"
select dir_opt in "创建目录" "重新指定用户目录";do
break;
done
if [ $dir_opt = "创建目录" ];then
mkdir $path
break
else
echo "请输入用户目录(绝对路径):"
read path
fi
fi
done
#写入账号信息
echo $username>>$ftpuser_file
echo $passwd >>$ftpuser_file
#生成加密文件
hash_account
#生成账号配置文件
echo "write_enable=YES">$ftpuser_conf_dir$username
echo "anon_world_readable_only=NO">>$ftpuser_conf_dir$username
echo "anon_upload_enable=YES">>$ftpuser_conf_dir$username
echo "anon_mkdir_write_enable=YES">>$ftpuser_conf_dir$username
echo "anon_other_write_enable=YES">>$ftpuser_conf_dir$username
echo "local_root=$path">>$ftpuser_conf_dir$username
#追加chroot
echo $username>>$ftpuser_chroot_list_file
echo "您已成功增加一个FTP用户!"
##########################################
#### 修改用户密码 #####
##########################################
elif [ $menu = "修改用户密码" ];then
echo "请输入要修改密码的用户名:"
read username
passwd_line=0
while [ 1 -eq 1 ]; do
get_username_line_num $username
line=$? #用户名所在行
if [ $line = 0 ]; then
echo "用户名不存在,请选择下一步操作:"
select nx_opt in "重新输入用户名" "退出程序";do
break;
done
if [ $nx_opt = "退出程序" ];then
echo "您已退出程序!"
exit
else
echo "重新输入用户名"
read username
fi
else
let "passwd_line=$line 1"
break
fi
done
# echo "用户名所在行:" $line
# echo "密码所在行:" $passwd_line
echo "请输入新密码:"
read new_passwd
while [[ 1 -eq 1 ]]; do
if [ "$new_passwd" = "" ];then
echo "新密码不能为空,请重新输入新密码:"
read new_passwd
else
break
fi
done
sed -i $passwd_line"c\\$new_passwd" $ftpuser_file
hash_account
echo "修改密码成功!"
##########################################
#### 删除用户 #####
##########################################
elif [ $menu = "删除用户" ];then
echo "请输入要删除的用户名:"
read username
passwd_line=0
while [ 1 -eq 1 ]; do
get_username_line_num $username
line=$? #用户名所在行
if [ $line = 0 ]; then
echo "用户名不存在,请选择下一步操作:"
select nx_opt in "重新输入用户名" "退出程序";do
break;
done
if [ $nx_opt = "退出程序" ];then
echo "您已退出程序!"
exit
else
echo "重新输入要删除的用户名:"
read username
fi
else
let "passwd_line=$line 1"
break
fi
done
# echo "用户名所在行:" $line
# echo "密码所在行:" $passwd_line
echo "确定要删除吗?"
select del_opt in "确定要删除" "不删除了,退出程序";do
break;
done
if [[ $del_opt = "确定要删除" ]]; then
#删除用户名和密码的两行
sed -i $line","$passwd_line"d" $ftpuser_file
#删除用户名对应的配置文件
rm -f $ftpuser_conf_dir$username
#重新生成加密文件
hash_account
#删除用户名对应的chroot中的行
sed -i "/^"$username"$/d" $ftpuser_chroot_list_file
echo "删除用户成功!"
else
echo "您已退出程序!"
fi
##########################################
#### 重启VSFTPD服务 #####
##########################################
elif [ $menu = "重启VSFTPD服务" ];then
service vsftpd restart
##########################################
#### 停止VSFTPD服务 #####
##########################################
elif [ $menu = "停止VSFTPD服务" ];then
service vsftpd stop
##########################################
#### 停止VSFTPD服务 #####
##########################################
elif [ $menu = "启动VSFTPD服务" ];then
service vsftpd start
##########################################
#### 重新生成加密文件 #####
##########################################
elif [ $menu = "重新生成加密文件" ];then
hash_account
echo "生成账号加密文件成功"
##########################################
#### 退出程序 #####
##########################################
else
echo "您已退出程序!"
fi
-------------------------
-------------------------
-------------------------
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。