vsftpd可以通过三种账户登录系统:
系统账户:系统本地账户登录系统,默认进入的目录是用户家目录,可以在所有有权限的路径切换;
匿名账户:匿名用户登录,然后映射为一个本地用户;
虚拟账户:既不是系统本地用户也不是匿名用户,而是通过pam做第三方认证的方法,支持文件和数据库,ldap的认证,此处通过mysql进行实验;
一、准备实验环境
-
实验在一台虚拟机上进行,此虚拟机需要安装vsftpd和mysql,此处采用的是centos7.3的系统。
-
安装vsftpd和mariadb-server:
yum install -y vsftpd mariadb-server
-
因为是通过pam_mysql进行用户验证,所以需要安装pam_mysql模块,但是默认系统yum源不提供,所以此处通过编译安装,此前需要先安装如下环境:
yum install -y mariadb-devel pam-devel yum groupinstall -y "Develop Tools"
-
下载pam_mysql并进行编译安装,加压缩之后切换到目录内并执行如下命令:
./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security make && make install
-
二、具体实验配置
-
首先需要在vsftpd的配置文件编辑/etc/vsftpd/vsftpd.conf如下选项:
#通过mysql验证的文件路径# pam_service_name=vsftpd.mysql #允许虚拟账号登录# guest_enable=YES #虚拟用户映射为本地的ftp用户# guest_username=ftp #系统用户权限单独配置文件路径# user_config_dir=/etc/vsftpd/vusers_config/
-
mysql数据库创建数据库和数据表,并插入值,并授权指定用户对库有访问权限;
mysql> CREATE DATABASE vsftpd; mysql> CREATE TABLE users ( -> id INT AUTO_INCREMENT NOT NULL, -> name CHAR(30) BINARY NOT NULL, -> password CHAR(48) BINARY NOT NULL, -> PRIMARY KEY (id) -> ); mysql> INSERT INTO users (name,password) VALUES ('tom',password('1234567a')); mysql> INSERT INTO users (name,password) VALUES ('cat',password('1234567a')); mysql> GRANT select ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY 'mageedu'; mysql> FLUSH PRIVILEGES;
-
创建步骤1指定的pam_service_name文件,路径在必须在/etc/pam.d下:
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=192.168.11.137 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=192.168.11.137 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
-
在/etc/vsftpd/vusers_config/目录下创建和tom,jerry同名的文件,指定权限,此处权限如下:
#tom允许所有权限# anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES #jerry不允许创建目录# non_upload_enable=YES anon_mkdir_write_enable=NO anon_other_write_enable=YES
-
通过ftp登录,然后测试即可。
原创文章,作者:王子豪,如若转载,请注明出处:http://www.178linux.com/77736