FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP(文件传输协议)协议提供服务。
常见的FTP服务器有:
Windows:Ser-U、FTP Server、filezilla_server
Linux:ProFTPD(Professional FTP daemon)是一个类Unix平台或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序。
FTP两种工作模式
FTP监听的端口有两个一个是20:主动模式下传输数据的端口,如果是被动模式,则传输端口由服务器和客户端之间协商决定;另外一个是21:用于传输控制信息。
主动模式工作原理
FTP客户端连接到FTP服务器的21号端口,发送PORT命令(该命令包含了以什么端口接收数据等信息),并端随机开放一个端口(1024 以上),告知服务器客户端采用主劢动模式并开放端口,FTP服务器收到PORT 主动模式命令和端口后,通过服务器的20号端口和客户端开放的端口违接,发送数据。
主动模式下客户端的防火墙很多情况下默认都是不接收外部发起的连接的,所以在接收到服务器的发送数据请求往往都被拦截掉,因为无法确定客户端的接收服务端请求的数量往往采取被动模式共享文件。
被动模式工作原理
FTP客户端违接到FTP服务器所监听的 21号端口,发送PASV命令(包含用户名密码等信息)到FTP服务器,服务器在本地随机开放一个端口(1024 以上),然后把开放的端口告知客户端发送数据的请求,然后后客户端建立一个新的TCP连接到服务器开放的端口进行数据传输。
服务部署
环境准备:
192.168.8.61/24 Server
192.168.8.21/24 Client
服务端:
安装软件:
[root@ser ~]yum install -y vsftpd
配置文件:
/etc/vsftpd/vsftpd.conf //核心配置文件
/etc/vsftpd/ftpusers //用于指定哪些用户不能访问FTP服务器,即黑名单
/etc/vsftpd/user_list //用于指定哪些用户能访问FTP服务器,即白名单
/etc/vsftpd/vsftpd_conf_migrate.sh //是vsftpd操作的一些变量和设置脚本
/var/ftp/ //默认情况下匿名用户的根目彔
本地用户权限控制:
chroot_list_enable=YES | 开启chroot功能,即把根目录限定为新的目录,而不是原来的/ |
---|---|
chroot_list_file=/etc/vsftpd/chroot_list | 设置锁定用户在根目彔中的列表文件。此文件存放要锁定的用户名。 |
local_root=/opt/test/ | 设置本地用户的根目彔为/opt/test |
local_umask=022 | 本地用户上传权限 |
chroot_local_user=YES | 是否将用户禁锢在主目录 |
常用的全局配置项:
listen_address=192.168.1.1 | 设置监听的IP地址 |
---|---|
listen_port=21 | 设置监听FTP服务的端口号 |
write_enable=YES | 是否启用写入权限 |
download_enable=YES | 是否允许下载文件 |
max_clients=0 | 限制并发客户端连接数 |
max_per_ip=0 | 限制同一IP地址的并发连接数 |
Pasv_min_port=10000 | 将客户端的数据连接端口改在10000 |
Pasv_min_port=20000 | 到20000之间 |
访问限制:
userlist_enable=YES | 是否启用user_list 列表文件 |
---|---|
userlist_deny=YES | 是否禁用user_list中的用户 |
匿名权限控制:
anonymous_enable=YES | 允许匿名用户访问 |
---|---|
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
anon_other_write_enable=YES | 开放其他写入权 |
anon_root=/var/ftp | 匿名用户的FTP根目录 |
anon_max_rate=0 | 限制最大传输速率(字节/秒) |
anon _umask=022 | 匿名用户上传文件的权限掩码 |
启动服务:
[root@ser ~]# systemctl start vsftpd
客户端:
[root@cli ~]# yum install -y lftp
注:从CentOS6开始,系统镜像中默认没有ftp客户端命令。取而代之的是lftp命令。
连接到服务器:
[root@cli ~]# lftp 192.168.8.61