实现基于文件验证的vsftpd虚拟用户
一、创建用户数据库文件
1 | #创建帐号密码 |
二、创建用户和访问FTP目录
1 | #创建用户,指定家目录 |
三、创建pam配置文件
1 |
|
四、指定pam配置文件
1 | [101]$ vim /etc/vsftpd/vsftpd.conf |
五、SELinux设置:
- 禁用SELinux
或者 - setsebool -P ftpd_full_access 1
六、虚拟用户建立独立的配置文件
创建配置文件存放的路径
1
mdkir /etc/vsftpd/vusers.d/
修改配置
1
2
3vim /etc/vsftpd/vsftpd.conf
#添加这句
user_config_dir=/etc/vsftpd/vusers.d/进入此目录
1
cd /etc/vsftpd/vusers.d/
允许wang用户可读写,其它用户只读
1
2
3
4
5
6
7
8
9
10
11
12vim wang
#创建wang的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim chen
#创建chen的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/chen #登录目录改变至指定的目录重启服务
1
systemctl restart vsftpd
实验:实现基于MYSQL验证的vsftpd虚拟用户
说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器
| MariaDB服务器: 192.168.99.103 |
1. 安装所需要包和包组:
- 在数据库服务器上安装
1
2
3[103]$ yum –y install mariadb-server
[103]$ systemctl start mariadb.service
[103]$ systemctl enable mariadb
2. 在数据库服务器上创建虚拟用户账号
1.建立存储虚拟用户数据库和连接的数据库用户
1 | mysql> CREATE DATABASE vsftpd; |
ftp服务和mysql不在同一主机:
1
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123';
ftp服务和mysql在同一主机:
1
2mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123';
mysql> FLUSH PRIVILEGES;准备相关表
1
2
3
4
5
6
7
8mysql> 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;测试连接
1
2
3[101]$ mysql -uvsftpd -h192.168.99.103 -p123
mysql> SHOW DATABASES;
mysql> quit添加虚拟用户
1
2
3
4
5
6
7[103]$ mysql
#根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> USE vsftpd;
mysql> DESC users;
mysql> INSERT INTO users(name,password) values('wang',password('123'));
mysql> INSERT INTO users(name,password) values('chen',password('123'));
mysql> SELECT * FROM users;
| vsftp服务器: 192.168.99.101 |
一、 安装pam_mysql
编译安装,先安装环境
1
[101]$ yum -y install gcc gcc-c++ mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz
1
[101]$ wget ftp://192.168.99.1/Magedu37/files/sources/pam_mysql-0.7RC1.tar.gz
解压
1
[101]$ tar xf pam_mysql-0.7RC1.tar.gz
安装
1
2
3[101]$ cd pam_mysql-0.7RC1/
[101]$ ./configure --with-pam-mods-dir=/lib64/security
[101]$ make && make install
二、 在FTP服务器上配置vsftpd服务
- 在FTP服务器上建立pam认证所需文件注意:参考README文档,选择正确的加密方式
1
2
3
4[101]$ vi /etc/pam.d/vsftpd.mysql
#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=123 host=192.168.99.103 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123 host=192.168.99.103 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
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()函数加密 |
建立相应用户和修改vsftpd配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录1
2
3
4[101]$ useradd -s /sbin/nologin -d /data/ftproot vuser
[101]$ chmod 555 /data/ftproot #centos7需除去ftp根目录的写权限
[101]$ mkdir /data/ftproot/{upload,pub}
[101]$ setfacl -m u:vuser:rwx /data/ftproot/upload修改配置
1
2
3
4
5
6
7
8
9
10vim /etc/vsftpd/vsftpd.conf
#确保中已经启用了以下选项
anonymous_enable=YES
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,大约126行。
pam_service_name=vsftpd.mysql启动vsftpd服务
1
systemctl start vsftpd
设置开机启动
1
2chkconfig vsftpd on
systemctl enable vsftpd查看端口开启情况
1
2
3netstat -tnlp |grep 21
#或
ss -tnlp | grep 21
三、 Selinux相关设置:在FTP服务器上执行
没有开启可跳过
1 | restorecon -R /lib64/security |
四、 测试:利用FTP客户端工具,以虚拟用户登录验证结果
- 在vsftp服务器上
1
tail -f /var/log/secure
- 测试的客户端上
1
2yum -y install ftp
ftp 192.168.99.101 - 连接上了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[102]$ ftp 192.168.99.101
Connected to 192.168.99.101 (192.168.99.101).
220 (vsFTPd 3.0.2)
Name (192.168.99.101:root): chen
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 (192,168,99,101,182,64).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Jul 28 07:49 pub
drwxrwxr-x 2 0 0 6 Jul 28 07:49 upload
226 Directory send OK.
ftp> - 101主机上(vsftp服务器)也有了日志
1
2Jul 28 15:54:04 localhost polkitd[5380]: Registered Authentication Agent for unix-process:13770:75587 (system bus name :1.96 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Jul 28 15:54:04 localhost polkitd[5380]: Unregistered Authentication Agent for unix-process:13770:75587 (system bus name :1.96, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
五、 在FTP服务器上配置虚拟用户具有不同的访问权限
这个就跟实现基于文件验证的vsftpd虚拟用户一样了,
配置vsftpd为虚拟用户使用配置文件目录
1
2
3[101]$ vim /etc/vsftpd/vsftpd.conf
#在最后添加如下选项
user_config_dir=/etc/vsftpd/vsftpd.d创建所需要目录,并为虚拟用户提供配置文件
1
2
3[101]$ mkdir /etc/vsftpd/vsftpd.d
[101]$ cd /etc/vsftpd/vsftpd.d
[101]$ touch wang chen配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限1
2
3
4[101]$ vim /etc/vsftpd/vusers_config/wang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES给另一个用户给配置下
1
2
3
4
5[101]$ vim /etc/vsftpd/vusers_config/chen
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot2 #登录目录改变至指定的目录给他创建个upload目录用来上传
1
2mkdir -p /data/ftproot2/upload
setfacl -m u:vuser:rwx /data/ftproot2/upload
| 客户端:192.168.99.110 |
1 | [110]$ ftp 192.168.99.101 |
1 | [110]$ ftp 192.168.99.101 |
实验:实现NFS服务
| NFS服务:192.168.99.101 |
- 安装NFS
1
yum -y install nfs-utils
- 启动服务
1
2systemctl start nfs-server
systemctl enable nfs-server - 创建用来提供服务的目录
1
mkdir /nfsshare
- 给权限
1
chown nfsnobody /nfsshare
- 修改NFS配置
1
2[101]$ vim /etc/exports
/nfsshare desktopX(rw) - 加载配置
1
exporfs –r
| 客户端:192.168.99.102 |
- 创建目录,一会来挂载
1
mkdir /mnt/nfsshare
- 挂载
1
mount serverX:/nfsshare /mnt/nfsshare
下面是开机自动挂载
3. 修改
1 | [101]$ vim /etc/fstab |
- 自动读取配置挂载
1
mount -a
























