您的位置:首页 > 编程语言 > PHP开发

Vsftpd原理安装配置详解

2017-10-10 10:19 435 查看
简介

文件传输协议(File Transfer Protocol,FTP),FTP服务是Client/Server(简称C/S)模式,基于FTP协议,服务器端提供对外共享文件,客户端可向FTP服务器上传、下载文件。FTP服务器端可同时提供给多人共享使用。

FTP传输模式

FTP基于C/S模式,有两种传输模式,分别是主动模式、被动模式。

>主动模式

客户端从一个任意端口N(N>1024)与FTP服务器的port 21进行三次握手建立链接后,客户端开始监听端口N+1,并通过“port N+1”发送FTP命令至服务器端,FTP服务器以数据端口20与客户端指定数据端口N+1进行数据传输。



>被动模式

客户端从一个任意端口N(N>1024)与FTP服务器的port 21进行三次握手建立链接后,客户端开始监听端口N+1,并提交PASV命令,服务器会开启一个任意的端口(P>1024),并发送PORT P命令给客户端。客户端N+1端口与服务器端的P端口进行数据传输。



Vsftpd服务器安装配置

安装方式有三种:YUM安装、RPM安装、源码编译安装,本文采用YUM安装Vsftpd

1、使用如下命令安装

yum  install vsftpd -y

2、查看vsftpd安装后的配置文件路径



3、启动vsftpd服务器

centos6:service vsftpd start 

centos7:systemctl start vsftpd.service



4、查看进程是否启动



5、查看vsftpd端口是否监听



vsftpd.conf默认配置详解

anonymous_enable=YES
开启匿名用户访问

local_enable=YES 启用本地系统用户访问

write_enable=YES 启用本地系统用户写入权限

local_umask=022 本地用户创建文件及目录默认权限掩码

dirmessage_enable=YES 打印目录显示信息,通常用户第一次访问目录时,信息提示

xferlog_enable=YES 启用上传/下载日志记录

connect_from_port_20=YES
FTP使用20端口进行数据传输

xferlog_std_format=YES
日志文件将以“xferlog”标准格式写入

listen=YES vsftpd以独立的服务启动

pam_service_name=vsftpd
虚拟用户登录时,需依据/etc/pam.d/vsftpd中内容进行认证

userlist_enable=YES 为YES时,user_list和ftpusers配置文件里用户都禁止访问FTP服务器

tcp_wrappers=YES 设置vsftpd是否与tcp_wrapper相结合来进行主机的访问控制,默认为YES。若启用,则vsftpd服务器会检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求的主机是否允许访问FTP服务器。两个文件可起到简易的防火墙功能。
简单测试

启动vsftpd服务后,可通过windows客户端资源管理器或linux的lftp工具来访问Vsftp服务器端



FTP主被动模式,默认为主动模式,设置为被动模式使用端口方法如下:
pasv_enable=YES

pasv_min_port=60000

pasv_max_port=60100
-----------------------------------------------------------------------------------------------------------------------------------------------

Vsftpd匿名用户配置

vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。

如关闭FTP匿名用户访问,需修改配置文件/etc/vsftpd/vsftpd.conf,将anonymous_enable=YES修改为NO,重启vsftpd服务即可。

允许匿名用户能够上传、下载、删除文件,需在/etc/vsftpd/vsftpd.conf配置文件中加入如下代码:

anon_upload_enable=YES
允许匿名用户上传文件

anon_mkdir_write_enable=YES
允许匿名用户创建目录

anon_other_write_enable=YES
允许匿名用户其他写入权限

anon_world_readable_only=YES
允许匿名用户可读、下载权限

匿名用户完整的vsftpd.conf配置文件代码如下:

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_world_readable_only=YES

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES
Vsftpd匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

chown  -R ftp pub/
chmod o+w pub/
修改完vsftpd.conf配置,重启vsftpd服务即可,再使用windows客户端或linux下lftp工具访问,能够上传、删除、创建目录等操作。

-----------------------------------------------------------------------------------------------------------------------------------------------

Vsftpd系统用户配置

在匿名用户模式下,任何人都可以查看FTP服务器端的文件、目录,甚至可以修改、删除,对于存放私密文件匿名用户模式不适用;为了保证文件或目录专属拥有者,Vsftpd系统用户可以实现该需求。

实现Vsftpd系统用户方式验证,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户名和密码登录FTP,并进行文件的上传、下载、删除等操作。

具体实现方法步骤如下:

(1) Linux系统中创建系统用户test1、test2,分别设置密码为123456:

useradd  test1

useradd  test2

echo 123456 | passwd --stdin test1

echo 123456 | passwd --stdin test2 
(2)修改vsftpd.conf配置文件代码如下:

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_world_readable_only=YES

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES
(3)修改后重启vsftpd服务,通过windows资源客户端验证,或Linux下lftp工具验证。

使用test1、test2用户登录FTP服务器,即可上传、删除、下载文件;test1、test2系统用户上传文件的家目录在/home/test1、/home/test2下



[b]启用监牢模式,控制用户是否允许切换至上层目录。[/b]

默认配置下,系统本地用户登录FTP后可以cd切换至其他目录,这样对系统文件来说存在安全隐患。可以通过以下三条配置来控制用户切换目录。

chroot_list_enable=YES/NO 启用监牢模式开关,默认为NO

chroot_local_user=YES/NO 指定chroot_list配置文件中用户是否允许切换到上级目录,默认为NO

chroot_list_file=/etc/vsftpd/chroot_list 监牢模式的用户列表文件路径和文件名
通过搭配有以下几种效果:
①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。

③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。

④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
另chroot_list文件需手动创建,配置格式如下:

test01

test02

test03

-----------------------------------------------------------------------------------------------------------------------------------------------

Vsftpd虚拟用户配置

为了利于管理用户,使得vsftpd更加安全的使用,因此推荐vsftpd虚拟用户方式。

原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加安全可靠。

(1)、安装PAM认证模块

yum  install  pam*  libdb-utils  libdb*  --skip-broken  -y

(2)、创建虚拟用户

创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中虚拟用户名为vtest1、vtest2,密码123456,格式如下:

vtest1

123456

vtest2

123456
(3)、生成Vsftpd虚拟用户数据库认证文件,设置权限700

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

-T 允许转换

-t 指定加密类型

-f 明文虚拟用户文件

chmod 700 /etc/vsftpd/vsftpd_login.db
(4)、配置PAM认证文件,在/etc/pam.d/vsftpd行首加入如下两行:

auth         sufficient        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

account   sufficient        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
(5)、所有Vsftpd虚拟用户需要映射到一个系统用户,改系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:

useradd  -s  /sbin/nologin  ftpuser
(6)、在主配置文件vsftpd.conf中添加如下配置:

#config virtual user FTP

pam_service_name=vsftpd 启动虚拟用户PAM认证

guest_enable=YES 启动虚拟用户

guest_username=ftpuser 映射账号到本地的用户ftpuser

user_config_dir=/etc/vsftpd/vsftpd_user_conf
设置虚拟用户的配置文件

virtual_use_local_privs=YES 虚拟用户使用与本地用户相同的权限
(7)、创建虚拟用户配置文件所在目录,用来创建虚拟用户各自的配置文件:

mkdir -p /etc/vsftpd/vsftpd_user_conf
(8)、在vsftpd_user_conf目录下,分别为虚拟用户vtest1、vtest2创建配置文件:
vim /etc/vsftpd/vsftpd_user_conf/vtest1,同时创建私有的虚拟目录,如下:

local_root=/home/ftpuser/vtest1 虚拟用户配置文件路径

write_enable=YES 允许登录用户有写权限

anon_world_readable_only=YES 允许匿名用户下载,然后读取文件

anon_upload_enable=YES 允许匿名用户上传文件权限,只有在write_enable=YES时该参数生效

anon_mkdir_write_enable=YES 允许匿名用户创建目录,只有在write_enable=YES时该参数生效

anon_other_write_enable=YES 允许匿名用户其他权限,如:删除、重命名等
vim /etc/vsftpd/vsftpd_user_conf/vtest2,同时创建私有的虚拟目录,如下:

local_root=/home/ftpuser/vtest2 虚拟用户配置文件路径

write_enable=YES 允许登录用户有写权限

anon_world_readable_only=YES 允许匿名用户下载,然后读取文件

anon_upload_enable=YES 允许匿名用户上传文件权限,只有在write_enable=YES时该参数生效

anon_mkdir_write_enable=YES 允许匿名用户创建目录,只有在write_enable=YES时该参数生效

anon_other_write_enable=YES 允许匿名用户其他权限,如:删除、重命名等
(9)、创建虚拟用户各自虚拟目录:

mkdir -p /home/ftpuser/{jfedu001,jfedu002};chown
-R ftpuser:ftpuser /home/ftpuser
重启vsftpd服务,使用linux的lftp 或 windows资源管理器登录测试:



/var/log/vsftpd.log日志如下:

Thu Oct 12 22:16:20 2017 [pid 2511] CONNECT: Client "192.168.241.134"

Thu Oct 12 22:16:20 2017 [pid 2510] [vtest1] OK LOGIN: Client "192.168.241.134"

/var/log/secure日志如下:

Oct 12 22:16:20 centos6 vsftpd[2510]: pam_userdb(vsftpd:auth): user 'vtest1' granted access

-----------------------------------------------------------------------------------------------------------------------

日志:

xferlog_enable=YES 启用上传/下载日志记录

由于默认日志信息不详细,可以使用

dual_log_enable=yes

开启vsftpd.log和xferlog 路径在/var/log下,必须ftp访问才生成

secure 认证日志

xferlog 记录上传和下载日志

vsftpd.log vsftpd详细日志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: