搭建FTP文件服务器,并启用虚拟用户登陆模式
实验目的:搭建FTP服务器,并且启用基于pam_mysql模块认证方式的虚拟用户认证,并且拥有不同权限。
实验环境:
客户端:某电脑,作为客户端访问FTP服务
主机1:CentOS7,IP:192.168.60.129,作为ftp服务器,安装vsftpd,编译安装pam_sql,
主机2:CentOS7,IP:192.168.60.138,作为MaraDB服务器,保存ftp虚拟用户的账户密码,安装mariadb-server
搭建MariaDB服务器
在主机2,138主机上操作
安装maria_db
yum install -y mariadb-server
编辑mysql配置文件
vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=ON
innodb_file_per_table=ON
log_bin=mysql-bin
启动mariadb服务
systemctl start mariadb.service
登陆mysql服务端
mysql -uroot -p123456
创建用户
GRANT ALL ON vsftpd.* TO vsftpd@'192.168.%.%' IDENTIFIED BY '123456';
1.创建vsftpd用户,并授权其访问vsftpd数据库,此数据库专门用来保存ftp虚拟用户的账户密码。
2.限定vsftpd用户的登陆主机,限制其只能使用局域网主机登陆。
FLUSH PRIVILEGES;
刷新授权表,让vsftpd用户生效。
登陆
mysql -uvsftpd -p123456 -h192.168.60.138
由于限定了vsftpd用户使用本地局域网的ip登陆,
因此必须指明服务器ip,-h192.168.60.138
创建数据库
CREATE DATABASE vsftpd;
此数据库专门用于存放ftp的账户和列表。
use vsftpd;
切换数据库
CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL, password CHAR(48) NOT NULL,UNIQUE KEY(name));
创建表users
创建字段id,name,password
DESC users;
插入用户
INSERT INTO users(name,password) VALUES('ftpuser1',PASSWORD('123456')),('ftpuser2',PASSWORD('123456'));
添加条目1,ftpuser1,123456,
添加条目2,ftpuser2,123456,
这是ftp服务器的虚拟用户的账户和密码。
PASSWORD('123456'),这是表示调用PASSWORD的内建函数,对123456加密,再保存到数据库表里面
Select * FROM users;
+----+----------+-------------------------------------------+
| id | name | password |
+----+----------+-------------------------------------------+
| 1 | ftpuser1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 2 | ftpuser2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+----------+-------------------------------------------+
重启mariadb服务。
搭建FTP服务器
在主机1,129主机上操作
安装vsftpd服务器端程序
yum install -y vsftpd
编译安装pam_mysql模块
安装开发工具包组,服务器平台开发包组。
yum groupinstall -y "Development Tools" "Server Platform Development"
安装mariadb开发包,Pam开发包
yum install -y mariadb-devel pam-devel
rpm -ql pam-devel
/usr/include/security #pam开发包的库文件目录
rpm -ql maria-devel
/usr/include/mysql #mariadb开发包的库文件目录
下载pam_mysql源码包
wget http://www.huzs.net/soft/vsftpd/pam_mysql-0.7RC1.tar.gz
解压缩源码包
tar xf pam_mysql-0.7RC1.tar.gz
切换目录
cd pam_mysql-0.7RC1
./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
--with-pam=/usr,指明编译所需的pam库路径。
--with-mysql=/usr,指明mysql库的路径,
--with-pam-mods-dir=/usr/lib64/security,指明生成的模块文件pam_mysql.so的放置路径
编译并安装
make && make install
看是否生成了pam_mysql.so模块。
ls /usr/lib64/security
创建系统用户vuser
useradd -d /data/ftproot/vuser vuser
midir /data/ftproot/vuser/pub -pv
创建系统用户vuser,虚拟用户登陆后统一映射成vuser用户
指定其家目录为/data/ftproot/vuser,此目录同样也是虚拟用户登陆ftp后的默认路径。
修改家目录的权限
chmod a-w /data/ftproot/vuser/
创建pam配置文件
/etc/pam.d/vsftpd.vusers
写入
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=192.168.60.138 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=192.168.60.138 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
大意是指明pam验证的模块文件为/usr/lib64/security/pam_mysql.so,
指明sql服务器的ip,账户密码,数据库表,字段等等。
编辑主配置文件vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vusers #指明pam配置文件路径
guest_enable=YES #启用虚拟账户
guest_username=vuser #指定虚拟账户的宿主
anonymous_enable=NO #禁用匿名用户,以免混乱
anon_upload_enable=YES #启用虚拟用户的上传
anon_mkdir_write_enable=YES #启用虚拟用户的创建目录
anon_other_write_enable=YES #启用虚拟用户的其他权限
为ftpuser1用户建立单独的配置文件
编辑主配置文件vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_config/
#指明独立配置文件的目录在哪里
创建vusers_config目录
mkdir /etc/vsftpd/vusers_config/
vim /etc/vsftpd/vusers_config/ftpuser1
anonymous_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/tmp/ftpuser1 #此为单独指定该用户的家目录。
创建家目录
mkdir /tmp/ftpuser1
修改家目录的权限
chown vuser /tmp/ftpuser1
确保vuser用户对比目录可读可写。
此时对于其他的虚拟用户,比如ftpuser2,没有给他提供单独的配置文件,则遵守主配置文件的权限。
systemctl restart vsftpd.service