环境为CentOS7,我是用两台,也可以放在一台做实验
10.10.6.187 ----FTP服务器
10.10.6.189 ----MySQL服务器
FTP是网络协议之一,为系统系统提供了通过网络与远程服务器进行传输的简单方法。vsftpd 是支持FTP协议的程序。选择vsftpd主要是因为可以进行权限的控制,每个vsftpd账户都可以进行对应的配置。
vsftp提供的三种登陆方式:
1.匿名登录
2.本地用户登录
3.虚拟用户登录
首先配置MySQL服务
准备库
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> use vsftpd;
准备表
MariaDB [vsftpd]> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL );
MariaDB [vsftpd]> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| users |
+------------------+
1 row in set (0.00 sec)
准备虚拟用户
MariaDB [vsftpd]> insert users (name,password) value('ftpuser1',password('123123'));
MariaDB [vsftpd]> insert users (name,password) value('ftpuser2',password('123123'));
MariaDB [vsftpd]> select * from users;
+----+----------+-------------------------------------------+
| id | name | password |
+----+----------+-------------------------------------------+
| 1 | ftpuser1 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
| 2 | ftpuser2 | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
+----+----------+-------------------------------------------+
2 rows in set (0.00 sec)
授权
MariaDB [vsftpd]> grant select on vsftpd.users to vsftpd@'10.10.6.%' identified by '123123';
MariaDB [vsftpd]> flush privileges;
然后配置FTP服务
pam_mysql需要编译安装,且需要其他依赖包
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@localhost src]# tar -zxvf pam_mysql-0.7RC1.tar.gz
[root@localhost data]# cd /data/pam_mysql-0.7RC1/
[root@localhost pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security/
[root@localhost pam_mysql-0.7RC1]# make && make install
建立pam认证所需文件
[root@localhost ~]#vi /etc/pam.d/vsftpd.mysql
auth required /data/pam_mysql-0.7RC1/.libs/pam_mysql.so user=vsftpd passwd=123123 host=10.10.6.187 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /data/pam_mysql-0.7RC1/.libs/pam_mysql.so user=vsftpd passwd=123123 host=10.10.6.187 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
建立虚拟用户映射的系统用户及对应的目录
[root@localhost pam.d]#useradd -d /data/ftproot -s /sbin/nologin vuser
[root@localhost pam.d]#chmod 555 /data/ftproot/
[root@localhost pam.d]#mkdir /data/ftproot/upload
[root@localhost pam.d]#setfacl -m u:vuser:rwx /data/ftproot/upload/
安装vsftpd
yum -y install vsftpd
修改vsftpd配置文件
[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #修改或取消注释
local_enable=YES #修改或取消注释
write_enable=YES #修改或取消注释
anon_upload_enable=NO #修改或取消注释
anon_mkdir_write_enable=NO #修改或取消注释
chroot_local_user=YES #修改或取消注释
pam_service_name=vsftpd.mysql #修改
guest_enable=YES #添加
guest_username=vuser #添加
allow_writeable_chroot=YES #添加
重启服务,查看21端口已经在监听
[root@localhost ~]#systemctl restart vsftpd
[root@localhost ~]#ss -lntp
LISTEN 0 32 [::]:21 [::]:* users:(("vsftpd",pid=9304,fd=4))
测试使用虚拟用户登录验证
首先安装ftp客户端,或者filezila等客户端都可以
[root@localhost ~]#ftp 10.10.6.189
Connected to 10.10.6.189 (10.10.6.189).
220 (vsFTPd 3.0.2)
Name (10.10.6.189:root): ftpuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,10,6,189,76,191).
150 Here comes the directory listing.
drwxrwxr-x 2 0 0 6 Jan 26 16:18 upload
226 Directory send OK.
ftp>
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。可以通过虚拟用户的配置文件自定义选项精确控制
[root@localhost ~]# mkdir /etc/vsftpd/vuser_config
[root@localhost ~]# touch /etc/vsftpd/vuser_config/ftpser{1,2}
[root@localhost ~]# vim /etc/vsftpd/vuser_config/ftpser1
local_root=/data/ftproot
write_enable=YES
download_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022