FTP的原理及配置

        File Transfer Protocol 文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式,它属于网络传输协议的应用层。文件传送和文件访问之间的区别在于:前者由FTP提供,后者由NFS等应用系统提供。

运行机制

        用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序,然后通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。数据端口:TCP20,命令端口:TCP21。

账户类型

        Real帐户:这类用户是指在FTP服务上拥有帐号,用当他们登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录,不过也可以变更到其他目录中去,如系统的主目录等等。

        Guest用户:在FTP服务器中,某个特定的用户设置一个帐户,这个账户只能够访问自己的主目录,服务器通过这种方式来保障FTP服务上其他文件的安全性。

        Anonymous用户:也就是匿名访问,这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。

        默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户,但是这往往不符合安全需要,所以要根据实际情况修改用户所在的类别。

支持模式

1、Standard (PORT方式,主动方式)

        FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,当客户端需要接收数据的时候在这个通道上发送PORT命令,PORT命令包含了客户端接收数据的端口。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。因为FTP 服务器必须和客户端建立一个新的连接用来传送数据。

2、Passive (PASV,被动方式)

        建立控制通道和Standard模式类似,但建立连接后发送Pasv命令,当服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。

        很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口,而许多内网的客户端不能用PORT模式登陆FTP服务器,因为服务器的TCP 20无法和内部网络的客户端建立一个新的连接,所以无法工作。

优缺点

        主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。

        而被动模式对客户端管理有效,它是企图 与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。

        一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰。

命令参数

1.FTP服务器的登陆:FTP

2.显示文件信息:DIR/LS

3.下载文件:GET 文件名(下载到当前目录)

4.上传文件:PUT 文件名

5.多文件下载:MGET

6.多文件上传:MPUT

7.退出:BYE

8.帮助:HELP

配置文件

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

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   服务端和客户端访问控制策略(服务器级别的一种防火墙)

配置相关

匿名用户

[下载]

#默认配置即可实现

windows资源管理器中:ftp://主机ip

下载

[上传]

#修改主配置文件
[[email protected] ftp]# vim /etc/vsftpd/vsftpd.conf 
    29 anon_upload_enable=YES
    30 anon_mkdir_write_enable=YES
    anon_umask=022(添加)
#修改匿名用户目录的权限
    [[email protected] ftp]# chmod 777 pub/
#修改匿名上传布尔值
    [[email protected] ftp]# getsebool -a | grep ftpd_anon_write
    ftpd_anon_write --> off
    sftpd_anon_write --> off
    [[email protected] ftp]# setsebool ftpd_anon_write on
    [[email protected] ftp]# getsebool -a | grep ftpd_anon_write
    ftpd_anon_write --> on
    sftpd_anon_write --> off
#修改匿名上传的上下文权限
    [[email protected] ftp]# chcon -t public_content_rw_t pub/
    [[email protected] ftp]# ll -Z /var/ftp
    drwxrwxrwx. root root system_u:object_r:public_content_rw_t:s0 pub
上传失败
上传成功

 

 

 

 

 [删除]

#修改主配置文件,添加如下选项
  anon_other_write_enable=YES

 

删除失败

添加选项后删除成功。

本地用户

[下载]

#修改主配置文件,开启本地用户权限
[[email protected] ftp]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
  (默认上来是在用户的家目录,匿名用户默认是在/var/ftp/pub目录下)
    根据自身情况,若是修改主配置文件后可以实现下载,上传,删除等操作则不需要如下操作。
#修改布尔值打开/home目录的权限
  [[email protected] ~]# getsebool -a | grep ftp_home_dir
    ftp_home_dir --> off
    tftp_home_dir --> off
    [[email protected] ~]# setsebool -P ftp_home_dir on
    [[email protected] ~]# getsebool -a | grep ftp_home_dir
    ftp_home_dir --> on
    tftp_home_dir --> off
本地用户登陆

 

 

 

 

 

 

 

 

本地用户家目录

[上传]

#修改主配置文件,开启本地用户权限
  write_enable=YES
上传成功

[删除]

#同上传配置

[遍历]

#修改主配置文件,开启chroot选项
  allow_writeable_chroot=YES(添加)
选择下面两个选项之一:
#指定本地用户不能chroot,不能翻
  chroot_local_user=YES
#开启通过列表的方式来指定用户
  chroot_list_enable=YES
#指定用户列表文件,需开启
  chroot_list_file=/etc/vsftpd/chroot_list
#在当前目录创建用户列表文件
  [[email protected] ~]# cat /etc/vsftpd/chroot_list 
    huahua

 

指定用户登录

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

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

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

4、当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

 

虚拟用户

#创建系统用户,禁止该用户进行登陆
  [[email protected] home]#  useradd -s /sbin/nologin aa
#修改用户家目录权限
  [[email protected] home]# chmod 704 /home/aa/
#修改主配置文件,增加以下三个选项
    guest_enable=YES			客人模式
    guest_usernamae=aa		aa为系统用户
    virtual_use_local_privs=YES	本地虚拟用户特权开启
#创建虚拟用户数据库文件,格式为一行用户名,一行密码
  [[email protected] ~]# vim aa
    [[email protected] ~]# cat aa
    aa
    redhat
#将虚拟用户文件转换成用户数据库文件
  [[email protected] ~]# db_load -T -t hash -f aa aa.db
#修改虚拟用户数据库文件权限
  [[email protected] ~]# chmod 600 aa.db 
#查看虚拟用户数据库文件的上下文权限
    [[email protected] ~]# ll -Z aa.db
    -rw-------. root root unconfined_u:object_r:admin_home_t:s0 aa.db
#修改PAM认证方式,编辑认证配置文件
  [[email protected] pam.d]# vim /etc/vsftpd/vsftpd.conf 
  pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd
#注释掉所有行,并添加以下两行:
    [[email protected] ~]# vim /etc/pam.d/vsftpd
  auth    required    pam_userdb.so    db=/etc/vsftpd/vhaha
  account    required    pam_userdb.so    db=/etc/vsftpd/vhaha

登陆进来后,只能访问到它的家目录。

注意:(.so动态连接库)数据库文件名的“.db”不用输入

   完成以上配置后,重启服务进行测试。