ftp常用的登录方式有如下三种:
匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous,密码为空;
本地用户登录:使用系统用户登录,用户信息保存在/etc/passwd中;
虚拟用户登录:FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全,本文将展示如何在centos 上实现基于文件验证和基于数据库验证的虚拟用户登录和授权。
实现基于文件验证的vsftpd虚拟用户
一、创建用户数据库文件 (奇数行为用户名,偶数行为密码 )
vim /etc/vsftpd/vusers.txt
wang
wangpass
xiaoming
xiaoming
cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db #生成db 文件
chmod 600 vusers.db 出于安全考虑改权限,不让别人看用户名
二、创建系统用户和访问FTP 目录
useradd -d /var/ftproot -s /sbin/nologin vuser
chmod +rx /var/ftproot/
centos7 还需要执行以下操作:
chmod -w /var/ftproot/ centos7有写权限是登录不成功的,这点要注意!
mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload
三、指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser 之前创建的系统账号
pam_service_name=vsftpd.db
四、创建pam配置文件
vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers (就是db_load -T -t hash -f vusers.txt vusers.db 生成的)
account required pam_userdb.so db=/etc/vsftpd/vusers
五、SELinux设置:
禁用SELinux
六、虚拟用户建立独立的配置文件
mkdir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 进入此目录
允许wang用户可读写
vim wang 创建各用户自已的配置文件
anon_upload_enable=YES 允许上传
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim xiaoming 创建各用户自已的配置文件
local_root=/ftproot/xiaoming 登录目录改变至指定的目录
验证:
客户端通过 ftp xxx 或者利用ftp 软件,如winscp 等工具登录既可。
[root@centos7 ~]#ftp 192.168.10.30
Connected to 192.168.10.30 (192.168.10.30).
220 “welcome to mage ftp server"
Name (192.168.10.30:root): wang
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 (192,168,10,30,20,14).
150 Here comes the directory listing.
drwx------ 3 4015 4017 4096 Sep 27 21:16 1674008317
-rw------- 1 4015 4017 41 Sep 27 21:38 f11.ftp
-rw-r--r-- 1 0 0 14 Sep 27 19:47 wangwendang
226 Directory send OK.
ftp> get wangwendang 只能下载属性全部是r 的文件
实现基于MYSQL验证的vsftpd虚拟用户
说明:本实验在两台CentOS主机上实现,一台centos6 做为FTP服务器,一台centos 7做数据库服务器
一、安装所需要包和包组:
在数据库服务器上安装包:
• Centos7:在数据库服务器上安装
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
• Centos6: 在FTP服务器上安装vsftpd和pam_mysql包
centos6 pam_mysql由epel6的源中提供 , centos 7 的pam_mysql 则需要手动编译。
yum install vsftpd pam_mysql
二、在数据库服务器上创建虚拟用户账号
1.建立存储虚拟用户数据库和连接的数据库
mysql> CREATE DATABASE vsftpdb;
mysql> SHOW DATABASES;
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.%.%' IDENTIFIED BY 'centos'; '授权vsftpd用户从192.168. 登录和查询'
2 创建数据库并创建表
mysql> USE vsftpdb;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL );
mysql>DESC users;
3.添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> USE vsftpd;
mysql> DESC users;
mysql> INSERT INTO users(name,password)values('wang',password('wangpass'));
mysql> INSERT INTO users(name,password)values('ma',password('mapass'));
mysql> SELECT * FROM users;
'查询表和表中的用户信息:'
MariaDB [vsftpdb]> desc users;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(50) | NO | | NULL | |
| password | char(48) | NO | | NULL | |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.17 sec)
MariaDB [vsftpd]> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| users |
+------------------+
1 row in set (0.08 sec)
MariaDB [vsftpd]> select * from users;
+----+------+-------------------------------------------+
| id | name | password |
+----+------+-------------------------------------------+
| 1 | wang | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
| 2 | ma | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+----+------+-------------------------------------------+
三、在FTP服务器上配置vsftpd服务
1.在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下两行 填连接数据的用户名和密码
auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.10.33 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=192.168.10.33 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
注意:参考README文档,,centos 在 /usr/share/doc/pam_mysql-0.7/README 。
user=vsftpd passwd=centos host=192.168.10.33
'表示登录数据库 192.168.10.33的用户名和密码'
db=vsftpd table=users usercolumn=username
passwdcolumn=password
'分别表示db 的名称 表的名称 用户名名称和密码的名称 ,要和数据库里面的信息对上,否则认证肯定不会成功,重要!'
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密
2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser 创建系统用户vuser
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
添加下面两项
guest_enable=YES 添加虚拟用户的映射
guest_username=vuser
pam_service_name=vsftpd.mysql '上一步骤编辑pam_mysql 的文件名称'
四 在FTP服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以
定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用
户的用户名。配置文件目录可以是任意未使用目录,只需要在
vsftpd.conf指定其路径及名称即可
• 1、配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
• 2、创建所需要目录,并为虚拟用户提供配置文件,但是虚拟用户配置文件要和用户名同名!
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang ma
• 3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关
指令进行的。如果需要让用户wang具有上传文件的权限,可以
修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下
选项并设置为YES即可,只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限
[root@Centos6.9 vusers.d]#cat ma
local_root=/ftproot/ma/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@Centos6.9 vusers.d]#cat wang
local_root=/ftproot/wang/
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
五、启动vsftpd服务并关闭selinux
service vsftpd start
systemctl enable vsftpd 设为开机启动
查看端口开启情况
netstat -tnlp |grep :21
六、测试:利用FTP客户端工具,以虚拟用户登录验证结果
本人用的是 winscp ,选择新建会话,分别用 wang 和ma 登录,会看到不同的文件