FTP

FTP(File Transfer Protocol)是Internet上用来传送文件的协议(文件传输协议),是TCP/IP协议族中的协议之一,他是为了能够在Internet上互相传送文件而制定的文件传送标准,规定了Internet上文件如何传送。在TCP/IP协议中,FTP的标准命令TCP端口号为21,Port方式数据端口是20。

模式:

  • 主动模式FTP

主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。

 

  • 被动模式FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

FTP用户授权

  • 本地用户

如果用户在远程FTP服务器上拥有账号,用户为本地用户。本地用户可以用过输入自己的账号和密码进行登陆。登陆成功之后,其登陆目录微系统提供给该用户的根目录($HOME),如/home/user1,用户利用FTP访问该目录如同在本地一样,可以下载及上传文件。

  • Guest用户

当FTP服务器为某些特定用户提供公共账号密码,且此账号只能用于文件传输服务,其登陆的目录未指定的目录,此用户类别为Guest用户。通常为该用户群提供文件下载及上传功能。

  • 匿名用户

如果用户在远程FTP服务器上没有自己的帐号,则称此用户为匿名用户。匿名用户可以通过输入anonymous用户名和空口令来进行登陆,一般情况下匿名用户的FTP服务器只提供文件下载功能。匿名FTP一直是Internet上获取信息资源的最主要方式。

配置

/etc/vsftpd/vsftpd.conf      主配置文件

/var/ftp/pub       从配置文件

/etc/vsftpd/ftpusers  指定哪些本地用户不能访问FTP服务

/etc/vsftpd/user_list   主配置文件中设定的允许访问FTP服务的本地用户。

主配置文件详解

anonymous_enable=YES  #是否启用匿名用户

local_enable=YES        #允许本地用户登陆

write_enable=YES #允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)

local_umask=022  #默认本地用户上传文件权限755

dirmessage_enable=YES  #显示每个目录下的文件信息

xferlog_enable=YES  #日志启用

connect_from_port_20=YES   #主动请求的数据端口

chown_uploads=YES   #所有匿名用户上传的文件所属用户将会被改成chown_username

chown_username=whoever  #匿名上传的所属用户名是whoever

xferlog_file=/var/log/xferlog   #启用的日志文件

xferlog_std_format=YES 

idle_session_timeout=600 #空闲连接超时 

data_connection_timeout=120  #数据连接超时

nopriv_user=ftpsecure   #当服务器运行于最底层时使用的用户名

chroot_list_enable=YES    chroot_local_user=YES  #所有文件列出用户, 可以切换到其他目录

chroot_list_file=/etc/vsftpd/chroot_list 

listen=NO   #服务将自己监听处理listen_ipv6=YES

pam_service_name=vsftpd #设置PAM认证模块使用名称预设为vsftpd

userlist_enable=YES   #用户列表启动

tcp_wrappers=YES   #服务端和客户端访问控制策略(服务器级别的一种防火墙)

Mime       

匿名用户测试(关闭防火墙和SeLinux)

  • 下载:

      默认配置即可实现

  • 上传:

vim /etc/vsftps/vsftpd.conf

anon_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

#修改匿名用户目录的权限

[root@ldap ftp]# chmod 777 pub/

  • 删除

#修改配置文件,添加如下选项

[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf

anon_other_write_enable=YES

>>再上传下载的前提下可以删除文件,以及替换文件

本地用户测试

  • 下载

#修改主配置文件开启本地用户权限

[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

默认上来是在用户的家目录,匿名用户上来默认是在/var/ftp/pub目录下

#修改布尔值打开/home目录的权限

[root@localhost haha]# getsebool -a | grep ftp_home_dir

ftp_home_dir --> off

[root@localhost haha]# setsebool -P ftp_home_dir on

  • 上传

#修改主配置文件开启本地用户权限

[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf

write_enable=YES

  • 删除   同上传

#开启通过列表的方式来指定用户

chroot_list_enable=YES

#指定用户列表文件

chroot_list_file=/etc/vsftpd/chroot_list

#在当前目录创建用户列表文件

[root@localhost vsftpd]# cat chroot_list

haha