centos vsftp虚拟用户实现

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 登录,会看到不同的文件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值