VSFTP+MySQL虚拟用户配置过程讲解,互联网营销

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:   VSFTPD是一种在 UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。

  VSFTPD是一种在 UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。本文介绍在RedHat Linux 9上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。
  一、VSFTPD的安装
  目前,VSFTPD的最新版本是1.2.0版。官方下载地址为ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz。在安装前,需要先做以下准备工作:
  VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。

 
 
[root @ hpe45 root] # useradd nobody
useradd: user nobody exists

  VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。

 
 
[root @ hpe45 root] # mkdir /usr/share/empty/
mkdir: cannot create directory' / usr / share / empty': File exists

  VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。

 
 
[root @ hpe45 root] # mkdir /var/ftp/
[root @ hpe45 root] # useradd -d /var/ftp ftp

  接下来的操作对于ftp用户是否已经存在都是有用的。

 
 
[root @ hpe45 root] # chown root.root /var/ftp
[root @ hpe45 root] # chmod og-w/var/ftp

  以上准备工作完成后,我们就可以开始编译源代码了。假定我们下载的vsftpd-1.2.0.tar.gz在/root目录,执行以下命令:

 
 
[root @ hpe45 root] # tar zxvf vsftpd-1.2.0.tar.gz
[root @ hpe45 root] # cd vsftpd-1.2.0
[root @ hpe45 vsftpd - 1.2 . 0 ] # make
[root @ hpe45 vsftpd - 1.2 . 0 ] # make install

  上面的“make install”命令将编译好的二进制文件、手册等复制到相应目录。在RHL9上,可能需要手动执行以下复制:

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp vsftpd /usr/local/sbin/vsftpd
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp vsftpd.conf.5 /usr/local/share/man/man5
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp vsftpd.8 /usr/local/share/man/man8

  接下来,我们复制一个简单的配置文件作为基础供后面修改。

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp vsftpd.conf /etc
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp RedHat/vsftpd.pam /etc/pam.d/ftp

  复制PAM验证文件,以允许本地用户登录VSFTPD。

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # cp RedHat/vsftpd.pam /etc/pam.d/ftp

  二、创建guest用户
  VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是 VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然,我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSFTPD的guest。

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # useradd vsftpdguest

  当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。
  三、设置VSFTPD配置文件
  在/etc/vsftpd.conf文件中,加入以下选项:

 
 
guest_enable = YES
guest_username
= vsftpdguest

  然后执行以下命令,让VSFTPD在后台运行:

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # /usr/local/sbin/vsftpd &

  四、将虚拟用户保存在MySQL数据库服务器中
  我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户xiaotong和xiaowang。

 
  
[root @ hpe45 vsftpd - 1.2 . 0 ] # mysql -p
mysql > create database vsftpdvu;
mysql
> use vsftpdvu;
mysql
> create table users(name char( 16 ) binary,passwd char( 16 ) binary);
mysql
> insert into users (name,passwd)values ('xiaotong',password('qqmywife'));
mysql
> insert into users (name,passwd)values ('xiaowang',password('ttmywife'));
mysql
> quit

  然后,授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令:

 
 
[root @ hpe45 vsftpd - 1.2 . 0 ] # mysql -u root mysql -p
mysql > grant select on vsftpdvu.users to vsftpdguest @ localhost identified by'i52serial0';
mysql
> quit

  如果要验证刚才的操作是否成功可以执行下面命令:

 
 
[root @ hpe45 vsftpd] # mysql -u vsftpdguest -pi52serial0 vsftpdvu
mysql > select * from users;

  如果成功,将会列出xiaotong、xiaowang和加密后的密码
  五、设置MySQL的PAM验证
  这里我们要用到一个利用mysql进行pam验证的开源项目(sourceforge.net/projects/pam- mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,要确保mysql- devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:

 
 
[root @ hpe45 root] # tar xvzf pam_mysql-0.5.tar.gz
[root @ hpe45 root] # cd pam_mysql
[root @ hpe45 pam_mysql] # make
[root @ hpe45 pam_mysql] # make install

  make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。
  接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/ftp文件,加入以下内容:

 
  
auth required pam_mysql.o user = vsftpdguest passwd = i52serial0 host = localhost db = vsftpdvu table = users usercolumn = name passwdcolumn = passwd crypt = 2
account required pam_mysql.o user
= vsftpdguest passwd = i52serial0 host = localhost db = vsftpdvu table = users usercolumn = name passwdcolumn = passwd crypt = 2

  上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式: crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt= 2,口令经过MySQL的password()函数加密后保存。
  六、进一步的虚拟用户设置
  经过以上的步骤,虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。

  首先,介绍虚拟用户的权限设置。VSFTPD-1.2.0新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。而virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。

  控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:

 
 
[root @ hpe45 root] # chown vsftpdguest.vsftpdguest /home/vsftpdguest
[root @ hpe45 root] # chmod 700 /home/vsftpdguest

  允许虚拟用户上传文件:

 
 
write_enable = YES
anon_upload_enable
= YES

  允许虚拟用户修改文件名和删除文件:

 
 
anon_other_write_enable = YES

  由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。
  其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,我们可以将虚拟用户限制在自家目录下。有两种做法:一,在配置文件中增加以下选项

 
 
chroot_local_user = NO
chroot_list_enable
= YES
chroot_list_file
=/ etc / vsftpd.chroot_list

  然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。
  第二种做法,在配置文件中修改chroot_local_user=YES。经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。
  七、虚拟用户的个人目录
  大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。首先,在主配置文件中加入以下选项:

 
 
user_config_dir =/ etc / vsftpd / vsftpd_user_conf

  然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:

 
 
[root @ hpe45 root] # mkdir /etc/vsftpd/vsftpd_user_conf
[root @ hpe45 root] # cd /etc/vsftpd/vsftpd_user_conf
[root @ hpe45 vsftpd_user_conf] # touch xiaowang

  以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/xiaowang。接下来,在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang,配置选项为:

 
 
local_root =/ home / xiaowang

  然后,新建xiaowang目录,并将权限设为vsftpdguest:

 
 
[root @ hpe45 vsftpd_user_conf] # mkdir /home/xiaowang
[root @ hpe45 vsftpd_user_conf] # chown vsftpdguest.vsftpdguest ./xiaowang
[root @ hpe45 vsftpd_user_conf] # chmod 600 /home/xiaowang

  经过以上设置,xiaowang登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。
  从文件系统层次来看,由于“/home/xiaowang”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问xiaowang的自家目录。解决这个问题也很简单,我们只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法参照前面第六步中所述,这里不再赘述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
3月前
|
存储 SQL 关系型数据库
MySQL体系结构与配置
MySQL体系结构与配置
52 0
|
15天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
16天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
59 2
|
21天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
3月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
420 8
centos7 mysql安装及配置
|
2月前
|
关系型数据库 MySQL Unix
MySQL配置不区分大小写的方法
结论 通过适当配置 lower_case_table_names参数以及在数据定义和查询中选择合适的校对规则,可以灵活地控制MySQL中的大小写敏感性,以适应不同的应用场景和需求。这样的设置既可以增加数据库的兼容性,又可以在必要时利用大小写敏感性进行精确的数据处理。需要注意的是,修改 lower_case_table_names参数后,最好在数据库初始化时进行,以避免现有表名的大小写问题。
270 3