共计 6925 个字符,预计需要花费 18 分钟才能阅读完成。
文件传输协议(File Transfer Protocol,FTP),基于该协议 FTP 客户端与服务端可以实现共享文件、上传文件、下载文件。FTP 基于 TCP 协议生成一个虚拟的连接,主要用于控制 FTP 连接信息,同时再生成一个单独的 TCP 连接用于 FTP 数据传输。用户可以通过客户端向 FTP 服务器端上传、下载、删除文件,FTP 服务器端可以同时提供给多人共享使用。
FTP 服务是 Client/Server(简称 C /S)模式,基于 FTP 协议实现 FTP 文件对外共享及传输的软件称之为 FTP 服务器源端,客户端程序基于 FTP 协议,则称之为 FTP 客户端,FTP 客户端可以向 FTP 服务器上传、下载文件。
1、FTP 传输模式
FTP 基于 C / S 模式,FTP 客户端与服务器端有两种传输模式,分别是 FTP 主动模式、FTP 被动模式,主被动模式均是以 FTP 服务器端为参照。主被动模式如图 1 -2(a)、1-2(b)所示,主被动模式详细区别如下:
(1)FTP 主动模式:客户端从一个任意的端口 N(N>1024)连接到 FTP 服务器的 port 21 命令端口,客户端开始监听端口 N +1,并发送 FTP 命令“port N+1”到 FTP 服务器,FTP 服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
(2)FTP 被动模式:客户端从一个任意的端口 N(N>1024)连接到 FTP 服务器的 port 21 命令端口,客户端开始监听端口 N +1,客户端提交 PASV 命令,服务器会开启一个任意的端口(P >1024),并发送 PORT P 命令给客户端。客户端发起从本地端口 N + 1 到服务器的端口 P 的连接用来传送数据。
在企业实际环境中,如果 FTP 客户端与 FTP 服务端均开放防火墙,FTP 需以主动模式工作,这样只需要在 FTP 服务器端防火墙规则中,开放 20、21 端口即可。关于防火墙配置后面章节会讲解。
图 1 -2(a)FTP 主动模式
——————————————————————————————————-
图 1 -2(b)FTP 被动模式
2、Vsftpd 服务器简介
目前主流的 FTP 服务器端软件包括:Vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、FileZilla Server 等软件,其中 Unix/Linux 使用较为广泛的 FTP 服务器端软件为 Vsftpd。
非常安全的 FTP 服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd 在 Unix/Linux 发行版中最主流的 FTP 服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用等。
3、Vsftpd 服务器安装配置
Vsftpd 服务器端安装有两种方法,一是基于 YUM 方式安装,而是基于源码编译安装,最终实现效果完全一致,本文采用 YUM 安装 Vsftpd,步骤如下:
(1)在命令行执行如下命令,如图 1 - 3 所示:
yum install vsftpd* -y |
图 1 -3 YUM 安装 Vsftpd 服务端
(2)打印 vsftpd 安装后的配置文件路径、启动 Vsftpd 服务及查看进程是否启动,如图 1 - 4 所示:
rpm -ql vsftpd|more systemctl restart vsftpd.service ps -ef |grep vsftpd |
图 1 -4 打印 Vsftpd 软件安装后路径
(3)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=NO Vsftpd 不以独立的服务启动,通过 Xinetd 服务管理,建议改成 YES; listen_ipv6=YES 启用 IPV6 监听; pam_service_name=vsftpd 登录 FTP 服务器,依据 /etc/pam.d/vsftpd 中内容进行认证; userlist_enable=YES Vsftpd.user_list 和 ftpusers 配置文件里用户禁止访问 FTP; tcp_wrappers=YES 设置 vsftpd 与 tcp wrapper 结合进行主机的访问控制,Vsftpd 服务器检查 /etc/hosts.allow 和 /etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该 FTP 服务器。 |
(4)启动 Vsftpd 服务后,通过 Windows 客户端资源管理器访问 Vsftp 服务器端,如图 1 - 5 所示:
ftp://192.168.111.131/ |
图 1 -5 匿名用户访问 FTP 默认目录
FTP 主被动模式,默认为被动模式,设置为被动模式使用端口方法如下:
pasv_enable=YES pasv_min_port=60000 pasv_max_port=60100 |
4、Vsftpd 匿名用户配置
Vsftpd 默认以匿名用户访问,匿名用户默认访问的 FTP 服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。如需关闭 FTP 匿名用户访问,需修改配置文件 /etc/vsftpd/vsftpd.conf,将 anonymous_enable=YES 修改为 anonymous_enable=NO,重启 Vsftpd 服务即可。
如果允许匿名用户能够上传、下载、删除文件,需在 /etc/vsftpd/vsftpd.conf 配置文件中加入如下代码:
anon_upload_enable=YES 允许匿名用户上传文件; anon_mkdir_write_enable=YES 允许匿名用户创建目录; anon_other_write_enable=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 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=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 客户端访问,能够上传文件、删除文件、创建目录等操作,如图 1 - 6 所示:
图 1 -6 匿名用户访问上传文件
5、Vsftpd 系统用户配置
Vsftpd 匿名用户设置完毕,匿名用户,任何人都可以查看 FTP 服务器端的文件、目录,甚至可以修改、删除,此方案如适合存放私密文件在 FTP 服务器端,如何保证文件或者目录专属拥有者呢,Vsftpd 系统用户可以实现该需求。
实现 Vsftpd 系统用户方式验证,只需在 Linux 系统中创建多个用户即可,创建用户使用 useradd,同时给用户设置密码,即可通过用户和密码登录 FTP,进行文件上传、下载、删除等操作。Vsftpd 系统用户实现方法步骤如下:
(1)Linux 系统中创建系统用户 jfedu1、jfedu2,分别设置密码为 123456:
useradd jfedu1 useradd jfedu2 echo 123456|passwd –stdin jfedu1 echo 123456|passwd –stdin jfedu2 |
(2)修改 vsftpd.conf 配置文件代码如下:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES |
(3)通过 Windows 资源客户端验证,使用 jfedu1、jfedu2 用户登录 FTP 服务器,即可上传文件、删除文件、下载文件,jfedu1、jfedu2 系统用户上传文件的家目录在 /home/jfedu1、/home/jfedu2 下,如图 1 -7(a)、1-7(b)所示:
图 1 -7(a)jfedu1 用户登录 FTP 服务器
图 1 -7(b)jfedu1 登录 FTP 服务器上传文件
6、Vsftpd 虚拟用户配置
如果基于 Vsftpd 系统用户访问 FTP 服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用 VSFTPD,需使用 Vsftpd 虚拟用户方式。
Vsftpd 虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录 Linux 系统,从而让系统更加的安全可靠。
Vsftpd 虚拟用户企业案例配置步骤如下:
(1)安装 Vsftpd 虚拟用户需用到的软件及认证模块:
yum install pam* libdb-utils libdb* –skip-broken -y |
(2)创建虚拟用户临时文件 /etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中 jfedu001、jfedu002 为虚拟用户名,123456 为密码,如果有多个用户,依次格式填写即可:
jfedu001 123456 jfedu002 123456 |
(3)生成 Vsftpd 虚拟用户数据库认证文件,设置权限 700:
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db chmod 700 /etc/vsftpd/vsftpd_login.db |
(4)配置 PAM 认证文件,/etc/pam.d/vsftpd 行首加入如下两行:
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login account required pam_userdb.so db=/etc/vsftpd/vsftpd_login |
(5)所有 Vsftpd 虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:
useradd -s /sbin/nologin ftpuser |
(6)完整 vsftpd.conf 配置文件代码如下:
#global config Vsftpd 2017 anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES userlist_enable=YES tcp_wrappers=YES #config virtual user FTP pam_service_name=vsftpd guest_enable=YES guest_username=ftpuser user_config_dir=/etc/vsftpd/vsftpd_user_conf virtual_use_local_privs=YES |
如上 Vsftpd 虚拟用户配置文件参数详解:
#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)至此,所有虚拟用户共同基于 /home/ftpuser 主目录实现文件上传与下载,可以在 /etc/vsftpd/vsftpd_user_conf 目录创建虚拟用户各自的配置文件,创建虚拟用户配置文件主目录:
mkdir -p /etc/vsftpd/vsftpd_user_conf/ |
(8)如下分别为虚拟用户 jfedu001、jfedu002 用户创建配置文件:
/etc/vsftpd/vsftpd_user_conf/jfedu001,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/jfedu001 write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES |
/etc/vsftpd/vsftpd_user_conf/jfedu002,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/jfedu002 write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES |
虚拟用户配置文件内容详解:
local_root=/home/ftpuser/jfedu002 jfedu002 虚拟用户配置文件路径; 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 服务,通过 Windows 客户端资源管理器登录 Vsftpd 服务端,测试结果如图 1 -8(a)、1-8(b)所示:
图 1 -8(a)jfedu001 虚拟用户登录 FTP 服务器
图 1 -8(b)jfedu001 虚拟用户上传下载文件
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-06/144886.htm