使用指定虚拟用户Allen与Barry登陆ftp,认证的源是mysql服务器; Allen能够上传文件,Barry不能够上传文件;
[root@centos7 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@centos7 ~]# uname -r 4.18.14-1.el7 vsftpd-3.0.2-22.el7.x86_64 pam-1.1.8-22.el7.x86_64 mariadb-libs-5.5.60-1.el7_5.x86_64 pam_mysql-0.7RC1.tar.gz mysql服务器:10.207.51.40 vsftp服务器:10.207.51.31
yum -y groupinstall "Development Tools" "server Platform Development" yum -y install mariadb-devel openssl-devel pam-devel
yum install -y vsftpd
mysql
有不少默认参数,不用去管,有标注的参数为本次实验关键参数 anonymous_enable=NO local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_enable=YES xferlog_std_format=YES dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log use_localtime=YES ascii_upload_enable=YES ascii_download_enable=YES listen=YES listen_ipv6=NO userlist_enable=YES tcp_wrappers=YES 当chroot_list_enable=NO,chroot_local_user=YES时,全部的用户均不能切换到其余目录。 chroot_list_enable=NO chroot_local_user=YES local_enable=YES ##容许本地用户登陆,虽然使用的虚拟用户,可是虚拟用户适合本地用户vuser关联了的 write_enable=YES ##容许写入 local_root=/var/ftp ##指定本地用户登陆后的目录 pam_service_name=vsftpd.mysql ##指定pam文件,这是相对路径,等于/etc/pam.d/vsftpd.mysql,这里也能够写全路径 guest_enable=YES ##容许虚拟用户登陆 guest_username=vuser ##指定虚拟用户要映射成哪一个本地用户 allow_writeable_chroot=YES ##默认状况下ftp根目录的ogt都不能有w权限,开启其选项后能够设置w权限; user_config_dir=/etc/vsftpd/vusers.conf.d ##指定虚拟用户配置文件目录,目录中的每一个配置文件的名字对应一个虚拟用户的名字;
文件名称要与虚拟用户命名彻底一致 mkdir /etc/vsftpd/vusers.conf.d echo ' anon_upload_enable=YES' > /etc/vsftpd/vusers.conf.d/Allen echo ' anon_upload_enable=NO' > /etc/vsftpd/vusers.conf.d/Barry
也能够经过epel源安装 tar xf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1 ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security make make install
vim /etc/pam.d/vsftpd.mysql auth required pam_mysql.so user=vsftpd passwd=123123 host=jzbg db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1 account required pam_mysql.so user=vsftpd passwd=123123 host=jzbg db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1 配置字段说明: auth 表示认证; required 用于认证登陆mysql数据库; account 用于验证登陆ftp使用的虚拟帐号的密码; 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()函数加密; verbose=1 会打印详细的日志,能够再/var/log/secure中看到;
systemctl restart vsftpd.service
sql
yum -y install mariadb_server
数据库
systemctl enable mariadb.service && systemctl start mariadb.service
vim
在/etc/my.cnf文件的[mysqld]中增长skip-name-resolve=ON [mysqld] skip-name-resolve=ON
mysql CREATE DATABASE vsftpd; use vsftpd; CREATE TABLE users (id int AUTO_INCREMENT NOT NULL PRIMARY KEY, name char(30) NOT NULL, password char(48) binary NOT NULL); INSERT INTO users(name,password) VALUES ('Allen',password('123123')); INSERT INTO users(name,password) VALUES ('Barry',password('123123')); 颇有可能,pam-mysql模块支持的加密方式,与mysql或 mariadb加密方式不兼容;若是不兼容,则须要把密码改成明文格式: INSERT INTO users(name,password) VALUES ('tom',123123); INSERT INTO users(name,password) VALUES ('jerry',123123); 容许vsftp服务器使用vsftpd用户读取vsftpd数据库到的表 若是将vsftp与mysql安装在一台机器上,则能够将地址改成127.0.0.1 GRANT SELECT ON vsftpd.* TO vsftpd@'10.207.51.31' IDENTIFIED BY '123123'; 刷新权限 FLUSH PRIVILEGES;
Allen用户能够上传文件,结果为正确 [root@~]$ftp 10.207.51.31 Connected to 10.207.51.31 (10.207.51.31). 220 (vsFTPd 3.0.2) Name (10.207.51.31:root): Allen 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put all.csv local: all.csv remote: all.csv 227 Entering Passive Mode (10,207,51,31,67,156). 150 Ok to send data. 226 Transfer complete. 6406155 bytes sent in 0.483 secs (13255.36 Kbytes/sec) Barry用户不能够上传文件,结果为正确 [root@~]$ftp 10.207.51.31 Connected to 10.207.51.31 (10.207.51.31). 220 (vsFTPd 3.0.2) Name (10.207.51.31:root): Barry 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 (10,207,51,31,238,18). 150 Here comes the directory listing. -rw------- 1 1002 1002 6406155 Dec 20 14:38 all.csv 226 Directory send OK. ftp> put all2.csv local: all.csv remote: all2.csv 227 Entering Passive Mode (10,207,51,31,190,67). 550 Permission denied.