实现基于文件验证的vsftpd虚拟用户--(一台)
一、创建用户数据库文件
vim /etc/vsftpd/vuser cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db //利用文本生成虚拟用户的数据库文件 chmod 600 vusers.db //实现基于文件验证的vsftpd虚拟用户
二、创建用户和访问FTP目录
useradd -d /var/ftproot -s /sbin/nologin vuser chmod +rx /var/ftproot/
centos7 还需要执行以下操作:
chmod -w /var/ftproot/ mkdir /var/ftproot/upload setfacl -m u:vuser:rwx /var/ftproot/upload
三、创建pam配置文件
vim /etc/pam.d/vsftpd.db auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers
四、指定pam配置文件
vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vuser pam_service_name=vsftpd.db
五、SELinux设置:
禁用SELinux 或者 setsebool -P ftpd_full_access 1
六、虚拟用户建立独立的配置文件
mdkir /etc/vsftpd/vusers.d/ //创建配置文件存放的路径 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/ cd /etc/vsftpd/vusers.d/ //进入此目录 //允许wang用户可读写,其它用户只读 vim zhao //创建各用户自已的配置文件 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES vim qian //创建各用户自已的配置文件 local_root=/ //登录目录改变至指定的目录
结果:用户zhao
1 [root@234c27 ~]# ftp 192.168.234.17 2 Connected to 192.168.234.17 (192.168.234.17). 3 220 (vsFTPd 3.0.2) 4 Name (192.168.234.17:root): zhao 5 331 Please specify the password. 6 Password: 7 230 Login successful. 8 Remote system type is UNIX. 9 Using binary mode to transfer files. 10 ftp> pwd 11 257 "/" 12 ftp> ls 13 227 Entering Passive Mode (192,168,234,17,75,202). 14 150 Here comes the directory listing. 15 drwxrwxr-x 2 0 0 6 Aug 18 02:11 upload 16 226 Directory send OK. 17 ftp>
结果:用户qian
1 [root@234c27 ~]# ftp 192.168.234.17 2 Connected to 192.168.234.17 (192.168.234.17). 3 220 (vsFTPd 3.0.2) 4 Name (192.168.234.17:root): qian 5 331 Please specify the password. 6 Password: 7 230 Login successful. 8 Remote system type is UNIX. 9 Using binary mode to transfer files. 10 ftp> cd / 11 250 Directory successfully changed. 12 ftp> ls 13 227 Entering Passive Mode (192,168,234,17,218,169). 14 150 Here comes the directory listing. 15 lrwxrwxrwx 1 0 0 7 Aug 16 02:04 bin -> usr/bin 16 dr-xr-xr-x 5 0 0 4096 Aug 17 01:45 boot 17 drwxr-xr-x 20 0 0 3340 Aug 17 12:10 dev 18 drwxr-xr-x 130 0 0 8192 Aug 18 02:10 etc 19 drwxr-xr-x 2 0 0 6 Apr 11 04:59 home 20 lrwxrwxrwx 1 0 0 7 Aug 16 02:04 lib -> usr/lib 21 lrwxrwxrwx 1 0 0 9 Aug 16 02:04 lib64 -> usr/lib64 22 drwxr-xr-x 2 0 0 6 Apr 11 04:59 media 23 drwxr-xr-x 2 0 0 6 Apr 11 04:59 mnt 24 drwxr-xr-x 3 0 0 16 Aug 16 02:18 opt 25 dr-xr-xr-x 188 0 0 0 Aug 17 12:09 proc 26 dr-xr-x--- 8 0 0 271 Aug 18 02:43 root 27 drwxr-xr-x 37 0 0 1120 Aug 18 02:32 run 28 lrwxrwxrwx 1 0 0 8 Aug 16 02:04 sbin -> usr/sbin 29 drwxr-xr-x 2 0 0 6 Apr 11 04:59 srv 30 dr-xr-xr-x 13 0 0 0 Aug 17 12:10 sys 31 drwxrwxrwt 20 0 0 4096 Aug 18 02:41 tmp 32 drwxr-xr-x 13 0 0 155 Aug 16 02:04 usr 33 drwxr-xr-x 23 0 0 4096 Aug 18 02:10 var 34 226 Directory send OK. 35 ftp>
实现基于MYSQL验证的vsftpd虚拟用户--(两台)
说明:本实验在两台CentOS7主机上实现,一台做为FTP服务器,一台做数据库服务器
一、安装所需要包和包组:
在数据库服务器上安装包:
Centos7:在数据库服务器上安装 192.168.234.27
yum –y install mariadb-server systemctl start mariadb.service systemctl enable mariadb
centos7:无对应rpm包,需手动编译安装 192.168.234.17
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
make
make install
二、在数据库服务器上创建虚拟用户账号
1.建立存储虚拟用户数据库和连接的数据库用户
mysql> CREATE DATABASE ftpdb;
mysql> SHOW DATABASES;
//ftp服务和mysql不在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.234.17' IDENTIFIED BY 'centos';
2.准备相关表
mysql> USE ftpdb; //创建数据库 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 -uwang -h 192.168.234.17 -pcentos mysyl> SHOW DATABASES;
3.添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后
存储
mysql>DESC users;
mysql> INSERT INTO users(name,password) values(‘wang',password('centos'));
mysql> INSERT INTO users(name,password) values(‘mage',password('centos'));
mysql> INSERT INTO users(name,password) values(‘ftp1',password('centos'));
mysql> INSERT INTO users(name,password) values(‘ftp2',password('centos'));
mysql> SELECT * FROM users;
//在数据库中建立4个帐号
三、在FTP服务器上配置vsftpd服务
1.在FTP服务器上建立pam认证所需文件
vim /etc/pam.d/vsftpd.mysql 添加如下两行
1 [root@234c17 data]# vim /etc/pam.d/vsftpd.mysql 2 auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.234.27 db=ftpdb table=users usercolumn=name passwdcolumn=password crypt=2 3 account required pam_mysql.so user=vsftpd passwd=centos host=192.168.234.27 db=ftpdb 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=magedu 登录mysql的的密码
host=mysqlserver 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 vsftpd chmod 555 /var/ftproot //centos7需除去ftp根目录的写权限 mkdir /var/ftproot/{upload,pub} setfacl –m u:vfstpd:rwx /var/ftproot/upload/ //确保/etc/vsftpd.conf中已经启用了以下选项 anonymous_enable=YES //添加下面两项 guest_enable=YES guest_username=vsftpd //修改下面一项,原系统用户无法登录 pam_service_name=vsftpd.mysql
四、启动vsftpd服务
systemctl start vsftpd 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/vsftpd.d
2、创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vsftpd.d/ cd /etc/vsftpd/vsftpd.d/ touch ftp1 ftp2
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改
/etc/vsftpd/vsftpd.d/ftp1文件,在里面添加如下选项并设置为YES即可,
只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
local_root=/ftproot 登录目录改变至指定的目录