共享文件服务之vsftpd服务搭建实验

本文详细介绍如何将VSFTPD与MySQL结合,实现基于数据库的用户权限管理。从数据库配置到PAM模块编译,再到服务配置与优化,提供了一套完整的解决方案。

前言:

ftp服务是传统的文件共享服务,其中 vsftpd 是普及度比较高的 ftp 应用实现

vsftpd

1、vsftpd介绍
   全名:very secure ftp daemon

程序:/usr/sbin/vsftpd
  配置文件:/etc/vsftpd/vsftpd.conf

2、用户分类

匿名用户(映射至某一固定的系统用户)
  本地用户(root及系统用户),
  虚拟用户(存储在文件或其他服务器端数据库中的用户);

实验内容

一般情况下, 我们安装好 vsftpd 后默认允许匿名用户下载指定的文件资源。但是有的时候有权限管理的需要,下面我们用 MySQL 存储用户权限信息,实现 vsftpd 用户权限管理功能。

实验目标

搭建 vsftpd 服务并登录服务

实验环境

hostip用途
node1192.168.1.134vsftpd端(安装vsftpd、编译mysql模块)
node2192.168.1.137数据库端(安装mariadb服务)

实验步骤:

一、MySQL端数据库配置

准备一台新安装的 CentOS7.6 服务器,node2 ,ip 为 192.168.1.137 , 并安装 MariaDB 数据库

1、关闭node2主机沙盒和防火墙
2、安装mariadb服务
#yum install -y mariadb-server 	 //安装包mariadb服务
#systemctl start mariadb 		 //启动mariadb服务
#ss -ntl						 //检查端口3306
3、配置mysql存储用户权限信息
> create database vsftpd;		//创建测试库vsftpd

在这里插入图片描述

4、创建测试表vuser 并设置表属性
> use vsftpd;  
> create table vuser (id int auto_increment primary key,username char(30),password char(50) binary);				//主键随id数增长,用户名长度限制30字节,密码长度限制50字节

在这里插入图片描述

5、插入虚拟用户ftp1和ftp2的信息
>insert vuser(username,password)values('ftp1',password('123456')),('ftp2',password('123456'));

在这里插入图片描述

6、授权访问用户vsftpd,使其有查权限
> grant select on vsftpd.vuser to vsftpd@'192.168.1.%' identified by '123456';

在这里插入图片描述

7、查看vuser表中数据
>select * from vuser;

在这里插入图片描述

8、数据库查看授权的访问用户和主机IP
>use mysql;
>select Host, User, Password from user;

在这里插入图片描述

二、vsftpd端运行环境和服务配置

pam_mysql.so时vsftp服务的核心文件,放置在/lib64/security目录下,由于CentOS 7yum源中没有pam-mysql,故需自己编译安装;

1、下载vsftpd服务
#yum install -y vsftpd				//下载vsftpd服务

在这里插入图片描述

2、相关的程序包
#yum install -y gcc gcc-c++ pam-devel mariadb-devel		//下载相关的程序包

在这里插入图片描述

3、下载pam-mysql压缩包
# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz			

在这里插入图片描述

4、解压pam-mysql压缩包
# tar xf pam_mysql-0.7RC1.tar.gz   

在这里插入图片描述

5、查看configure文件
	# cd pam_mysql-0.7RC1      //进入解压后的文件内
	# ll				   	   //查找configure

在这里插入图片描述

6、解压configure
	# ./configure  --with-pam-mods-dir=/lib64/security	
	# make && make install			//编译安装

在这里插入图片描述

7、在/lib64/security目录下的pam_mysql.so

在这里插入图片描述

三、pam配置

1、编辑vsftp.mysql
	# cd /etc/pam.d
	# vi  /etc/pam.d/vsftpd.mysql 

我服务器配置内容如下:

auth required pam_mysql.so user=vsftpd passwd=123456 host=192.168.1.137 db=vsftpd table=vuser usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=192.168.1.137 db=vsftpd table=vuser usercolumn=username passwdcolumn=password crypt=2

在这里插入图片描述
其中:

pam_mysql.so  //相对路径,如果此模块置于/lib64/security目录下,则可直接写文件名,当然,写全路径也没问题;
2、pam_mysql.so的编辑格式
user=vsftpd
passwd=123456  //授权登陆mysql时的用户
host=localhost      //本地主机
db=test                //存放虚拟用户的数据库名
table=vstfpd
usercolumn=name 
passwdcolumn=passwd
crypt=2  //密码加密方式代号
          //0:不加密
          //1:使用crypt(3)加密
          //2:mysql函数加密password();
          //3:md5加密
          //4:SHA1加密

四、细节优化

1、编辑配置文件vsftpd.conf

添加项:

 		   guest_enable=YES
            guest_username=vuser
  			修改此项为:pam_service_name=vsftpd.mysql
# vi /etc/vsftpd/vsftpd.conf
# tail -7 /etc/vsftpd/vsftpd.conf 

我服务器的配置内容如下:

pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vusers.d/
userlist_enable=YES
tcp_wrappers=YES

在这里插入图片描述

2、创建系统用户作为映射
# useradd -r -s /sbin/nologin -d /data/ftproot vuser				//创建系统用户作为映射
# mkdir -pv /data/ftproot							//创建本地用户目录

在这里插入图片描述

3、创建虚拟用户目录
# mkdir -pv /etc/vsftpd/vusers.d				//创建虚拟用户目录

在这里插入图片描述

4、写入虚拟用户ftp的管理权限

确保这些项为YES:
 
      anonymous_enable=YES
      local_enable=YES
      write_enable=YES

1)ftp1配置内容:
	# vi  /etc/vsftpd/vusers.d/ftp1
	# cat  /etc/vsftpd/vusers.d/ftp1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftp1

在这里插入图片描述

2)ftp2配置内容:
	# vi  /etc/vsftpd/vusers.d/ftp2
	# cat  /etc/vsftpd/vusers.d/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftp2
保存退出

在这里插入图片描述

五、服务登录

1、启动vsftp服务 下载登录工具lftp
 	#systemctl start vsftpd	   //启动vsftpd服务
 	# yum install -y lftp	   //下载lfyp工具	

在这里插入图片描述

2、登录虚拟用户ftp1
	# lftp ftp1@127.0.0.1

效果如下:
在这里插入图片描述

### 搭建FTP文件共享服务器的指南 搭建FTP文件共享服务器通常使用 `vsftpd`(Very Secure FTP Daemon)作为服务器程序,它在 Linux 系统中被广泛采用,因其安全、轻量且功能丰富。以下是一个详细的搭建步骤,适用于 CentOS 7.6 系统环境。 --- #### 安装 vsftpd 首先,确保系统已更新并安装了必要的软件包: ```bash yum update -y ``` 然后安装 vsftpd: ```bash yum install -y vsftpd ``` 启动服务并设置开机自启: ```bash systemctl start vsftpd systemctl enable vsftpd ``` --- #### 配置 vsftpd 编辑主配置文件 `/etc/vsftpd/vsftpd.conf`,以下是关键配置项: - 允许本地用户登录: ```bash local_enable=YES ``` - 设置用户上传文件的权限掩码: ```bash local_umask=022 ``` - 启用写入权限: ```bash write_enable=YES ``` - 禁止 chroot 限制(可选): ```bash chroot_local_user=NO ``` - 启用 chroot 列表功能: ```bash chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list ``` - 允许可写 chroot 目录: ```bash allow_writeable_chroot=YES ``` - 使用 PAM 进行身份验证: ```bash pam_service_name=vsftpd ``` - 启用用户列表控制: ```bash userlist_enable=YES ``` 保存并退出配置文件后,重启服务以应用更改: ```bash systemctl restart vsftpd ``` --- #### 添加虚拟用户 创建虚拟用户的认证文件模板 `/etc/vsftpd/ftp_auth_file`: ```bash test1 123 test2 456 test3 789 ``` 加密该文件以供 vsftpd 使用: ```bash db_load -T -t hash -f /etc/vsftpd/ftp_auth_file /etc/vsftpd/ftp_auth_file.db ``` 接着,配置 PAM 认证模块,修改 `/etc/pam.d/vsftpd` 文件,添加以下内容: ```bash auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/ftp_auth_file account required /lib64/security/pam_userdb.so db=/etc/vsftpd/ftp_auth_file ``` 创建虚拟用户的主目录,并为其分配权限: ```bash mkdir -p /home/ftpuser chown nobody:nobody /home/ftpuser chmod 777 /home/ftpuser ``` 最后,在 `/etc/vsftpd/vsftpd.conf` 中启用虚拟用户模式: ```bash guest_enable=YES guest_username=nobody user_config_dir=/etc/vsftpd/user_conf ``` 创建用户专属配置目录: ```bash mkdir /etc/vsftpd/user_conf ``` 为每个虚拟用户创建独立配置文件,例如 `/etc/vsftpd/user_conf/test1`: ```bash local_root=/home/ftpuser write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES ``` --- #### 解决常见问题 如果遇到无法访问或权限不足的问题,请检查以下两项是否关闭: 1. **关闭 SELinux**: ```bash setenforce 0 ``` 或者永久关闭: ```bash sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config reboot ``` 2. **关闭防火墙**: ```bash systemctl stop firewalld systemctl disable firewalld ``` --- #### 实验环境企业需求 在企业环境中,FTP 服务器需要满足多个部门的数据备份需求,同时实现连接限制、日志记录、客户端身份验证以及用户隔离等功能。通过配置虚拟用户和 chroot 目录,可以有效实现用户之间的隔离[^2]。此外,还可以设置带宽限制和 IP 白名单来增强安全性。 --- #### 示例代码:脚本化部分操作 以下是一个简单的脚本来自动完成部分配置: ```bash #!/bin/bash # 更新系统并安装 vsftpd yum update -y yum install -y vsftpd # 启动服务 systemctl start vsftpd systemctl enable vsftpd # 配置 vsftpd cat <<EOL > /etc/vsftpd/vsftpd.conf local_enable=YES local_umask=022 write_enable=YES chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list allow_writeable_chroot=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YES guest_username=nobody user_config_dir=/etc/vsftpd/user_conf EOL # 创建虚拟用户认证文件 echo -e "test1\n123\ntest2\n456" > /etc/vsftpd/ftp_auth_file db_load -T -t hash -f /etc/vsftpd/ftp_auth_file /etc/vsftpd/ftp_auth_file.db # 创建虚拟用户目录 mkdir -p /home/ftpuser chown nobody:nobody /home/ftpuser chmod 777 /home/ftpuser # 创建用户配置目录 mkdir /etc/vsftpd/user_conf # 创建 test1 用户的配置文件 cat <<EOL > /etc/vsftpd/user_conf/test1 local_root=/home/ftpuser write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES EOL # 关闭 SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 重启 vsftpd systemctl restart vsftpd echo "FTP server setup completed!" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值