天天看点

Vsftpd虚拟用户模式配置

       原理讲解,vsftpd网上教程一大堆,但很多同学一说虚拟用户还是有点不解,这里我来抛砖引玉和大家分享,VSFTPD利用了PAM登陆认证模块,但是确没有直接使用系统的用户,而是用自己的用户数据库,但由于vsftpd必须要存取操作系统上的文件,所以又离不开系统那个用户,那么就来个映射,不用系统直接登陆,只需要用自己的用户登陆之后在和系统用户做个映射,这样,就能安全很多了。

       应用场景:1,网站虚拟主机配合磁盘配额可以用来管理不同的用户;2,企业用户提供文件共享;3,运维中的原创备份FTP服务器端。

      下面是配置详细过程:

一,安装

yum -y install  vsftpd db4-utils

复制代码

二,配置

cd /etc/vsftpd/

vi ftpuser.txt

输入FTP用户名和密码

ftpuser1

123456

ftpuser2

654321

注意:奇数行为用户名,偶数行为密码

生成FTP账户的数据库文件

db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db

chmod 600 ./ftplogin.db

生成和虚拟用户数据库相关联的PAM文件,因为FTP目录的权限需要根据系统用户来设定

cd /etc/pam.d/

vi vsftpd.pam

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin

account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin

注意:是ftplogin而不是ftplogin.db

建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:

useradd -d /data/ftpdata virtual_user

chmod 700 /data/ftpdata

经过该步骤的设置,/data/ftpdata就是virtual_user用户的主目录,该用户也是ftpdata目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。 

配置vsftpd,使之启用虚拟用户

vi /etc/vsftpd/vsftpd.conf

输入:

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

#anon_upload_enable=NO

#anon_mkdir_write_enable=NO

dirmessage_enable=NO

xferlog_enable=YES

connect_from_port_20=YES

#chown_uploads=YES

#chown_username=root

#xferlog_file=/var/log/xferlog

xferlog_std_format=YES

idle_session_timeout=600

data_connection_timeout=36000

#nopriv_user=ftpsecure

#async_abor_enable=YES

#ascii_upload_enable=YES

#ascii_download_enable=YES

#ftpd_banner=Welcome to blah FTP service.

#deny_email_enable=YES

#banned_email_file=/etc/vsftpd/banned_emails

#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list

#ls_recurse_enable=YES

listen=YES

#listen_ipv6=YES

guest_enable=YES

guest_username=virtual_user

pam_service_name=vsftpd.pam

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

其中:

guest_enable=YES:表示启用虚拟用户

guest_username=virtual_user:本地用户,就是虚拟用户要映射的本地用户,这个主要是用来设置本地文件系统的权限的

pam_service_name=vsftpd.pam:虚拟用户的认证用户

注意,默认pam_service_name=vsftpd,要改过来,否则报“530 Login incorrect.” 这样的错误的哦

整个过程是:用户输入虚拟用户账户(ftpuser.txt这里设置的)------登陆服务器利用PAM模块认证------映射为本地用户virtual_user----以virtual_user用户的身份去存取virtual_user的根目录下的文件

登陆实验:

ftp 127.0.0.1

Connected to 127.0.0.1 (127.0.0.1).

220 (vsFTPd 2.0.5)

Name (127.0.0.1:root): ftpuser1

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> dir

227 Entering Passive Mode (127,0,0,1,150,205)

150 Here comes the directory listing.

226 Transfer done (but failed to open directory).

ftp> pwd

257 "/"

ftp>

OK,没有问题了,我用的账户其实在服务器里是不存在的,就算这个用户密码泄露,别人也无法直接登陆我的linux主机

三,权限配置

我们还可以对每个用户设置权限

添加用户配置目录:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

mkdir -p /etc/vsftpd/vsftpd_user_conf

cd /etc/vsftpd/vsftpd_user_conf

配置每个用户的控制信息

vi /etc/vsftpd/vsftpd_user_conf/ftpuser1

write_enable=NO

anono_upload_enable=NO

注意/etc/vsftpd/vsftpd_user_conf/ftpuser1这里的文件名和用户名必须相同哦

四,用户隔离

但是这里有个问题,当我有多个用户的时候ftpuser1 ftpuser2,那么这两个用户默认都在同一个目录,就是/data/ftpdata那我很多情况需要把用户隔离开来,例如我一台主机上有很多不同用户的网站,他们需要单独管理,企业用户也需要保护自己的隐私,原创备份服务器也有多中数据需要备份到不同的目录,所以,实现主目录隔离的虚拟用户才是终解决方案。下面就来看看如何解决这个问题了

接着上面,我们以ftpuser1为例

添加:

local_root=/data/ftpdata/ftpuser1

mkdir -p /data/ftpdata/ftpuser1

chown -R virtual_user:virtual_user /data/ftpdata/ftpuser1

其他用户同理

五,后期维护

这个算是建立好了,那以后还需要添加用户怎么办呢,步骤如下:

1.在ftpuser.txt中添加用户名和密码

2.运行如下命令,将用户名和密码添加到数据库中

3.在vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入

vi /etc/vsftpd/vsftpd_user_conf/username

local_root=/data/ftpdata/username

4.在/data/ftpdata中新建一个文件夹,与用户名相同

mkdir -p /data/ftpdata/username

chown -R virtual_user:virtual_user /data/ftpdata/username

如何改用户名:

只需要修改下ftpuser.txt里面的密码行,然后执行

即可,连重启都不需要,所以这里注意ftpuser.txt这个文件保护好,为了以后维护方面还是不要删除了吧