目录
Background
- 安装记录,方便以后自己使用。
- vsftpd是“very secure TTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件,在Linux发行版中最受推崇的ftp服务器程序,小巧轻快,安全易用,支持虚拟用户,支持带宽限制等功能。
1、安装
#安装
yum install -y vsftpd
#设置开机启动
systemctl enable vsftpd.service
#启动
systemctl start vsftpd.service
#停止
systemctl stop vsftpd.service
#查看状态
systemctl status vsftpd.service
2、修改配置 /etc/vsftpd/vsftpd.conf
# 12 行
anonymous_enable=NO
# 33 行
anon_mkdir_write_enable=YES
# 48行
chown_uploads=YES
# 72行
async_abor_enable=YES
# 83行
ascii_upload_enable=YES
# 84行
ascii_download_enable=YES
# 87行
ftpd_banner=Welcome to blah FTP service.
# 101行
chroot_local_user=YES
# 最末尾添加下列内容
pam_service_name=/etc/pam.d/vsftpd
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
local_enable=YES
3、配置虚拟用户文件 /etc/vsftpd/virtusers
奇数行为用户名,偶数行为密码。不能使用root作为用户名
tee -a /etc/vsftpd/virtusers <<-'EOF'
wlf
12345
EOF
4、生成用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600 /etc/vsftpd/virtusers.db
5、修改配置文件 /etc/pam.d/vsftpd
如果系统为32位,下面动态库的目录改为
lib
# 修改前先备份
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# 先将配置文件中原有的 auth 及 account 的所有配置行均注释掉,再添加下面两行
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
6、新建系统用户vsftpd
,配置用户目录
# 用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /home/vsftpd
7、新建虚拟用户 wlf
配置文件
# 创建虚拟用户配置存放目录
mkdir /etc/vsftpd/vconf
#这里建立虚拟用户wlf配置文件
cd /etc/vsftpd/vconf
touch wlf
#编辑wlf用户配置文件,添加内容如下,其他用户类似
local_root=/home/vsftpd/wlf/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
8、配置用户 wlf
根目录
mkdir -p /home/vsftpd/wlf/
chown -R vsftpd:vsftpd /home/vsftpd
9、重启vsftpd
服务器
systemctl restart vsftpd.service
10、使用ftp工具连接测试
11、增添用户等自动化脚本
该脚本实现了用户的添加、删除、查看已有用户和查看用户密码等功能。
#!/bin/bash
# 输入参数:操作、用户名和密码
operate=$1
username=$2
password=$3
# 用户配置
user_home_dir=/home/vsftpd/$username/
user_conf_file=/etc/vsftpd/vconf/$username
user_pwd_file=/etc/vsftpd/virtusers
# 提示信息
s1="If query user, please input param 【list】"
s2="\n If query user password, please input param 【secret <username>】"
s3="\n If create user, please input param 【add <username> <password>】"
s4="\n If delete user, please input param 【del <username>】"
msg="$s1$s2$s3$s4"
function custom_print(){
echo -e "\033[5;34m ***** \033[0m"
echo -e "\033[32m $@ ! \033[0m"
echo -e "\033[5;34m ***** \033[0m"
}
# 查看已有用户
function list_user(){
cat -n $user_pwd_file | awk '{if($1%2==1){print $2}}'
}
# 查看用户密码
function secret_user(){
n0=`cat -n $user_pwd_file | grep $username | awk '{print $1}'`
let n1=n0+1
cat -n $user_pwd_file | awk -v num=$n1 '{if($1==num){print $2}}'
}
# 添加用户
function add_user(){
# 1、在用户文件中添加用户名和密码
cat <<EOF >> /etc/vsftpd/virtusers
$username
$password
EOF
# 2、更新用户数据
db_load -T -t hash -f $user_pwd_file /etc/vsftpd/virtusers.db
# 3、建立用户个人配置文件
cp /etc/vsftpd/vconf/default $user_conf_file
sed -i "s/default/$username/" $user_conf_file
# 4、建立用户根目录
mkdir -p $user_home_dir
chown -R vsftpd:vsftpd /home/vsftpd
# 5、重启vsftpd服务器
systemctl restart vsftpd.service
msg="User 【$username】 created successfully"
custom_print $msg
}
# 删除用户
function del_user(){
rm -rf $user_home_dir
rm -rf $user_conf_file
# 获取用户所在配置文件的行号
n1=$(cat -n $user_pwd_file | grep $username | awk '{print $1}')
let n2=$n1+1
# 删除那一行和下面的一行,用户名和密码
sed -i "${n1},${n2}d" $user_pwd_file
# 更新用户数据
db_load -T -t hash -f $user_pwd_file /etc/vsftpd/virtusers.db
msg="User 【$username】 deleted successfully"
custom_print $msg
}
# 判断输入参数
if [[ -z $operate || $operate = "help" ]]; then
custom_print $msg
elif [[ $operate = "add" ]]; then
if [[ -z $password || -z $username ]]; then
msg="Please input the username and password"
custom_print $msg
else
add_user
fi
elif [[ $operate = "del" ]]; then
if [[ -z $username ]]; then
msg="Please input the username"
custom_print $msg
else
del_user
fi
elif [[ $operate = "list" ]]; then
list_user
elif [[ $operate = "secret" ]]; then
if [[ -z $username ]]; then
msg="Please input the username"
custom_print $msg
else
secret_user
fi
else
custom_print $msg
fi