搭建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