centos7 vsftpd 虚拟用户配置

虚拟用户的配置说复杂也不复杂,说简单也不一定简单,我在配置这个东西的时候也折腾了好长时间,最后还是把它虚拟用户的配置弄明白了。下面就给大家分享我的此时此刻的喜悦。

首先引起我对虚拟用户配置的注意是因为一次 wordpress 后台上传图片报错的经历。因为刚配置完云服务器,所以问题就不接二连三的出现,后台无法上传图片就是其中一个为了更好的解决图片上传的问题,于是开始了 FTP 虚拟用户征服之路。

FTP 虚拟用户有别于一般的用户,它不用通过 useradd 命令来添加用户,只需要在配置文件就可以了。内容有点多,提好你的裤腰带。我们开始吧!

什么是 vsftpd 虚拟用户

什么是 vsftpd 虚拟用户?前面已经有提过,就是不用通过 useradd 命令来添加用户,而是通过配置 FTP 配置文件来实现新增用户的目的,这些用户你无法用平时的命令行来获取到用户信息比如:

# 方式一
cat /etc/passwd
# 方式二
cut -d : -f 1 /etc/passwd

对于 FTP 虚拟用户来说只限于 FTP 范围内使用。因为你是在 FTP 里配置这些用户的。而在这里所说的 FTP 虚拟用户又有别于 Linux 系统中的虚拟用户,因为 Linux 系统中的虚拟用户是可以通过上面的命令行查找到用户信息的。在这篇文章中,我们是要配置 vsftp 虚拟用户,这个你得先明确,不然后面你会觉得很乱,甚至不知道自己在做什么。

FTP 虚拟用户作用

为什么要用到 FTP 的虚拟用户,这里给你分析下原因。

第一:出于安全性方面的考虑,由于是 FTP 虚拟用户,所有没有了系统用户的一些权限,比如SHELL权限,无法登录到系统。

第二:配置 FTP 虚拟用户可以带来一些方便,并可以更好地解决一些问题,比如上面说到的 WordPress 后台无法上传图片。

你可以把多个 FTP 虚拟用户映射到系统的一个本地用户上或者把多个 FTP 虚拟用户分别映射系统多个本地用户,比如多个 FTP 虚拟用户映射到本地的 ftp 用户,实现所以 FTP 虚拟用户权限的统一管理。这个在实际的应用中是非常的有用的,比如你买了一台云服务器,然后里面放了好几个站点,那肯定得分配多个 FTP 用户,你可以在系统用添加这些用户,你也可以用本文正在介绍的 FTP 虚拟用户来实现。如果你用的是系统用户,那么你就会遇到这样的情况,比如当你的 Worpress 后台无法上传图片,导致这个问题的原因是 php 在处理图片上传请求用的是 php-fpm 这个用户,而你给你的站点目录配置所有者的时候可能就不是这个用户了,。对于这个目录来说你这个 php-fpm 就不是所有者。而你给这个目录的文件分配的权限是-rwxr–r–,这样的意思就是所有者有读写执行的权限,组用户有只读权限,其它用户有只读权限。php-fpm 这个用户对于这个站点目录来说就是 其它用户,其它用户只有只读权限,没有写权限,所以你无法通过后台来上传图片。

FTP 虚拟用户配置

在这里我们假设已经安装好了vsftp ,如果不知道怎么安装,这里有一篇关于vsftp安装的文章《Centos 7 FTP(vsftp)服务安装及配置》。好了,现在我们就来配置 FPT 虚拟用户。

修改 vsftp 配置文件 vsftpd.conf

sudo vim /etc/vsftpd/vsftpd.conf

下面的有些代码如果文件里有则修改,无则添加。

pam_service_name=vsftpd
guest_enable=YES
guest_username=nobody
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vu

授课时间:

1、pam_service_name=vsftpd

启用vsftpd验证,设置PAM使用的名称,该名称就是/etc/pam.d/目录下的vsftpd 文件

2、guest_enable=YES

是否开户 vsftpd 虚拟用户功能 guest_username=nobody 映射到系统本地用户名

3、virtual_use_local_privs=YES

启用vsftpd虚拟用户,并且虚拟用户和本地用户具有相同的权限。

4、user_config_dir=/etc/vsftpd/vu

虚拟用户存放目录,此目录待添加

创建 vsftpd 虚拟用户文件

配置好后,现在我们就新建 vsftpd 虚拟用户目录,也就是上面的第四点 /etc/vsftpd/vu 。这个目录用来存放每一个 vsftpd 虚拟用户。

sudo mkdir /etc/vsftpd/vu

目录创建好后,在这个目录下创建 vsfptd 虚拟用户文件。比如我们添加一个名为 yunkus 的 vsftpd 虚拟用户,那么你就要在这个 vu 目录下新新建一个名为 yunkus 的文件。

sudo vim /etc/vsftpd/vu/yunkus

添加如下内容

guest_username=nobody
local_root=/var/www/yunkus.com/
virtual_use_local_privs=YES
anon_umask=133

授课时间:

1、guest_username=nobody

这个命令你可以根据自己的需要来决定要不要,因为前面我们已经在/etc/vsftpd/vsftpd.conf这个配置文件里添加好了,如果你想单独设置这个用户映射到另一个系统本地用户,那么你就可以在这里把 nobody 更改为其它本地用户名。

2、local_root=/var/www/yunkus.com/

设置此 vsftpd 虚拟用户的根目录,这也就意味着此用户登录 ftp 后默认进到这个目录。

3、virtual_use_local_privs=YES

这个跟第一个也是同样的道,如果你想单独设置此用户,那就这里可以进行单独设置。

4、anon_umask=133

这行代码的意思就是设置此用户上传文件时,文件的默认权限。这个可以理解成一个掩码,你上传文件的权限就是通过 777 减去 anon_umask 计算出来的。在此我们设置的是133,也就是说上传后文件的权限是644。

修改 /etc/pam.d/vsftpd

sudo vim /etc/pam.d/vsftpd

把里面的所有内容注释掉,添加如下两行代码

auth required pam_userdb.so  db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login

授课时间:

1、auth

对用户的用户名口令进行验证。

2、accout

对用户的帐户有哪些权限哪些限制进行验证。

3、pam_userdb.so

表示该条审核将调用 pam_userdb.so 这个库函数进行。

4、db=/etc/vsftpd/login

这是一个存放 vsftpd 虚拟用户的文件列表,等会我们就去创建它

创建 login 文件

创建一个logo.txt 并编辑内容

sudo vim /etc/vsftpd/login.txt

注意:这个是一个用户列表,内容编写规则为用户名占一行,密码占一行。

文件编辑完之后,保存退出。接下来我们就得把这个login.txt 文件生成 db 口令的数据库文件,执行如下命令行:

sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

这样你就可以在/etc/vsftpd/ 目录下看到有两个 login 文件了,一个是 .txt 格式的,一个是 .db 格式的。

sudo ls -lh /etc/vsftpd

现在你就可以在在 FTP 里用账户:yunkus,密码:123456 的账号来连接服务器里的 vsftpd 来进行文件的上传下载了。

如果你无法生成.db口令数据库文件,那么你可以查看你系统有没有安装 db4,如果没有,那么你可以尝试先安装 db4。

查看是否已经安装了生成 db 口令数据文件的包

rpm -qa | grep db4

如果没有则可以执行以下命令来进行安装

yum install db4 -y

安装完这后,再次执行 db 生成口令数据库文件。

注意:本例子中的站点目录及目录下的所有文件文件名的所有者都设置成 nobody,站点的下的所有目录的权限设置为dwrxr-xr-x,文件的权限设置为-wr-r–r–

最后一步就是把站点目录及目录下的所有文件,文件夹的所有者设置成 nobody

sudo chown -R nobody:nobody  /var/www/yunkus.com