- 检测是否已安装 vsftpd
# 未安装 ,进入步骤 2
[root@iZbp1hduhk14ug5p2lvazwZ ~]# vsftpd -v
-bash: vsftpd: command not found
# 已安装, 进入步骤 3
[root@iZbp1hduhk14ug5p2lvazwZ ~]# vsftpd -v
vsftpd: version 3.0.2
- 安装 vsftp
yum -y install vsftpd
# 设置开机自启动
systemctl enable vsftpd.service
# 开放内核权限
setsebool -P ftp_home_dir=1
- 为虚拟用户创建一个本地用户
vsftp 虚拟用户想要创建文件夹或者上传文件,还需要依赖一个本地用户。
此处创建一个无法使用终端登录的 用户 vsftpd
# 添加用户并指定主目录和权限
useradd vsftpd -d /home/vsftpd -s /bin/false
# 更改主目录所有权至 vsftpd
chown vsftpd:vsftpd /home/vsftpd
- 修改 vsftp 配置文件 , 默认在 /etc/vsftpd/ 目录下
vim vsftpd.conf
增加下面配置
# pasv
pasv_enable=yes
pasv_min_port=10020
pasv_max_port=10040
# This directive allow virtual user to login
guest_enable=YES
guest_username=vsftpd
# This dirctive specifies the user permissions configuration directory
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# Allow , or will 500 error
chroot_local_user=YES
allow_writeable_chroot=YES
# This directive specifies the PAM file
pam_service_name=vsftpd.vu
# 使得创建的文件或者文件夹其他用户有执行和读的权限
anon_umask=0062
验证方式有很多种 , 常用的为本地数据文件方式和 mysql 方式
- 本地数据文件方式
a. 创建文件 /etc/pam.d/vsftpd.vu , 添加下面两行 , vsftpd_login 表示数据文件
auth sufficient pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient pam_userdb.so db=/etc/vsftpd/vsftpd_login
b. 在 /etc/vsftpd/ 目录下创建文件夹
mkdir /etc/vsftpd/vsftpd_user_conf
# 此文件夹下文件名为虚拟用户名,可配置虚拟用户主目录和权限
c. 自定义脚本,自动创建配置文件
cd /etc/vsftpd/vsftpd_user_conf
# 进入文件夹,在文件夹下创建对应的脚本
vim create_bash_config.sh
脚本内容
#!/bin/bash
username=$1;
rm -f /etc/vsftpd/vsftpd_user_conf/$username;
touch /etc/vsftpd/vsftpd_user_conf/$username;
echo "local_root=/home/vsftpd/$username
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_world_readable_only=no
">>/etc/vsftpd/vsftpd_user_conf/$username;
d. 进入到配置目录,添加脚本 adduser.sh
cd /etc/vsftpd/
# 进入文件夹,在文件夹下创建对应的脚本
touch login.txt
vim adduser.sh
脚本内容
#!/bin/bash
echo -n "please input username:";
read username;
if [ ! $username ]
then
echo "username can not empty";
exit;
fi
echo -n "pelase input password:";
read passwd;
if [ ! $passwd ]
then
echo "username can not empty";
exit;
fi
#echo "username: $username";
#echo "password: $passwd";
#echo $username>>login.txt;
#echo $passwd>>login.txt;
echo -n "save to db? y/n: ";
read re;
if [[ $re = "y" || $re = "Y" ]]
then
echo $username>>login.txt;
echo $passwd>>login.txt;
db_load -T -t hash -f login.txt vsftpd_login.db;
mkdir /home/vsftpd/$username;
chown vsftpd:vsftpd /home/vsftpd/$username;
sh /etc/vsftpd/vsftpd_user_conf/create_bash_config.sh $username;
echo "save sucess!!!";
else
echo "do not save";
exit;
fi
echo "show users";
cat login.txt;
e. 设置 adduser.sh 可执行,并启动 ftp
chmod +x adduser.sh
systemctl start vsftpd.service
# 添加用户
./adduser.sh
- 如果是 mysql 验证方式
a. 创建文件 /etc/pam.d/vsftpd.vu , 添加下面两行 ,简单的来说,就是在mysql 中创建一个数据库 vftpuser,并将 此数据库下的 user 表的查询权限给到用户 vftpuser (数据库名、用户名、表名没有特殊要求,因为都需要指定)
auth required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=user usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=user usercolumn=name passwdcolumn=passwd crypt=0
# crypt=0:表示口令使用明文方式保存在数据库中
# crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
# crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
# crypt=3:表示口令使用MD5散列值的方式保存在数据库中
b. 安装 mysql_pam 模块 (http://sourceforge.net/projects/pam-mysql)
下载 pam_mysql-0.7RC1.tar.gz
tar zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
make
make install
c. 在 /etc/vsftpd/ 目录下创建文件夹,并启动 vsftpd
# 此文件夹下文件名为虚拟用户名,可配置虚拟用户主目录和权限
mkdir /etc/vsftpd/vsftpd_user_conf
systemctl start vsftpd.service
- 总结
mysql 验证效果和 login.db 的作用一样。 /etc/vsftpd/vsftpd_user_conf 需要自己创建