实现基于MYSQL验证的vsftpd虚拟用户

马哥教育面授21期 运维 vsftpd MySQL


说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器

一、安装所需要包和包组:

  • 在数据库服务器上安装包:

    yum –y install mariadb-server mariadb-devel 
    systemctl start mariadb.service 
    systemctl enable mariadb

  • 在FTP服务器上安装包pam_mysql 
    centos7:无对应rpm包,需手动编译安装 
    •yum -y groupinstall "Development Tools" 
    •yum -y install mariadb-devel pam-devel vsftpd 
    •下载pam_mysql-0.7RC1.tar.gz 
    ftp://172.16.0.1/pub/Sources/sources/pam/ 
    •tar xvfpam_mysql-0.7RC1.tar.gz 
    •cd pam_mysql-0.7RC1/ 
    •./configure –with-mysql=/usr –with-pam=/usr –with-pam-mods-dir=/lib64/security 
    •make 
    •make install

二、在数据库服务器上创建虚拟用户账号

  • 1.建立存储虚拟用户的数据库,示例创建为vsftpd数据库 
    mysql> CREATE DATABASE vsftpd; 
    mysql> SHOW DATABASES; 
    ftp服务和mysql不在同一主机: 
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu'; 
    ftp服务和mysql在同一主机: 
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@localhost IDENTIFIED BY 'magedu'; 
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu'; 
    mysql> FLUSH PRIVILEGES;

  • 2.准备相关表 
    mysql> USE vsftpd; 
    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; 
    #mysql -uvsftpd -h 172.16.200.200 -pmagedu 
    mysql> SHOW DATABASES;

  • 3.添加测试的虚拟用户 
    根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储 
    mysql>DESC users; 
    mysql> INSERT INTO users(name,password) values(‘wang',password('magedu')); 
    mysql> INSERT INTO users(name,password) values(‘mage',password('magedu')); 
    mysql> SELECT * FROM users;

三、在FTP服务器上配置vsftpd服务

  • 1.在FTP服务器上建立pam认证所需文件 
    #vi /etc/pam.d/vsftpd.mysql 
    添加如下两行 
    auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
    account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
    注意:参考README文档,选择正确的加密方式crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密 
    配置字段说明 
    •auth 表示认证 
    •account 验证账号密码正常使用 
    •required 表示认证要通过 
    •pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数 
    •user=vsftpd为登录mysql的用户 
    •passwd=mageedu 登录mysql的的密码 
    •host=localhost 在mysql中定义的允许连接的主机名或ip地址 
    •db=vsftpd 连接msyql的哪一个库 
    •table=users 连接库里的哪一个表 
    •usercolumn=name 当做用户名的字段 
    •passwdcolumn=password 当做用户名字段的密码 
    •crypt=2 密码的加密方式为mysql password()函数加密

  • 2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证 
    建立虚拟用户映射的系统用户及对应的目录 
    useradd -s /sbin/nologin -d /var/ftproot 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

四、启动vsftpd服务

service vsftpd start;systemctl start vsftpd 
chkconfig vsftpd on;systemctl enable vsftpd 
查看端口开启情况 
netstat -tnlp |grep :21

五、Selinux相关设置:在FTP服务器上执行

•restorecon -R /lib64/security 
•setsebool -P ftpd_connect_db 1 
•setsebool -P ftp_home_dir 1 
•chcon -R -t public_content_rw_t /var/ftproot/

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果

•tail /var/log/secure

七、在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 wangmage

  • 3、配置虚拟用户的访问权限 
    虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO 
    注意:需确保对应的映射用户对于文件系统有写权限 
    anon_upload_enable={YES|NO} 
    anon_mkdir_write_enable={YES|NO} 
    anon_other_write_enable={YES|NO}

总结:本次实验出现最多的问题是敲错字和漏做了步骤……

原创文章,作者:wangshuai,如若转载,请注明出处:http://www.178linux.com/64385

(0)
wangshuaiwangshuai
上一篇 2016-12-21
下一篇 2016-12-21

相关推荐

  • 小白学习Linux系统一周总结

         告别平凡,安定而又没什么前途的工作,我选择了报了门热门的计算机课程--python运维开发。我不知道为什么一开始就学Linux系统,我早预料到这是一个艰难的开始,还好我不是完全没有基础,以前有学过iOS开发。看到着终端中的“\”表示根目录,我轻微有点亲切感,不像第一次看到终端时的恐惧。我总结这周的学习感受,希…

    Linux干货 2017-09-04
  • Centos启动过程

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。 启动第二步--读取MBR 众所周知,硬盘上第0磁道第一…

    Linux干货 2017-03-30
  • 网络基础总结

    这周南老师出差了,由王老师给我们代课,这周我们主要学习了网络基础,相比着之前,主要是理论加理解。下面我总结一下。 处于21世纪的我们,互联网时代,网络在我们身边的各个角落,覆盖了我们的衣食住行,带来 很多方便;首先什么是网络, 家庭办公室,移动用户,总部,分支机构。。。都在用互联网相连着,省去了许多麻烦,时间,加快了办公效率; 资源共享的功能和优点:数据和应…

    2017-09-02
  • iptables

    一、前言 什么是iptables?当我们启动iptables时,使用service命令可以启动iptables。但是并非使用service启动的iptables就能说明其是一个服务。Iptables是一个便以我们写规则的工具,真正起作用的是内核中的netfilter一个框架。Netfilter内置了5个hook函数,当一个数据包交由此机器时,经过这5个hoo…

    Linux干货 2015-10-27
  • 你会用Python写洗脑神曲吗?

    Python实战班-学员学习成果展示 同样是周末,有些人是闲聊着度过,有些人是学习充电度过。 人与人最大的区别,是下班后的时间。看你怎么去利用。 周末时,马哥Python实战班的学员正在认真上课,他们中的不少人,月薪在10k以上,甚至月薪20k以上。 但他们没有虚度周末时光。 #最浪费时间的就是:思而不学+犹豫不决。# 马哥Python实战班二期的小伙伴们才…

    Linux干货 2016-07-05
  • 计算机的组成及其功能。

    一、计算机的组成及其功能。 计算机,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 1、运算器(Arithmetical and Logical Unit):计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与…

    Linux干货 2016-10-30

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-27 15:20

    文章实用性很强,很具有操作性