centos vsftp虚拟用户实现

来源:互联网 发布:淘宝什么推广效果好 编辑:程序博客网 时间:2024/06/06 09:33

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.30Connected to 192.168.10.30 (192.168.10.30).220 “welcome to mage ftp server"Name (192.168.10.30:root): wang331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls227 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 wangwendang226 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=2account 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=usernamepasswdcolumn=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 创建系统用户vuserchmod 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 malocal_root=/ftproot/ma/anon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES[root@Centos6.9 vusers.d]#cat wanglocal_root=/ftproot/wang/anon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES

五、启动vsftpd服务并关闭selinux
service vsftpd start
systemctl enable vsftpd 设为开机启动

查看端口开启情况
netstat -tnlp |grep :21

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果
本人用的是 winscp ,选择新建会话,分别用 wang 和ma 登录,会看到不同的文件

原创粉丝点击