首页 > 代码库 > FTP服务

FTP服务

FTP: file tansfer protocol  应用层文件共享服务

      主要监听在TCP/21 (也有UDP/21)

RPC: Remote Procedure Call 远程过程调用

      能够让位于不同主机上的两个进程能够基于二进制的格式实现数据通信

      应用层协议的不具备这种能力

      Hadoop,NFS

Samba: CIFS MB 跨平台共享,比较底层的协议

 

FTP 有两个连接,两种模式

      21 号端口为控制连接,一直在线,支持文本连接,基于套接字

       get,mget,put,mput,cd,ls等

      20 号端口为数据传输(主动模式),当有数据传输的时候才连接,按需打开,按需关闭

      主动模式:服务端21号端口主动连接客户端发起控制连接的下一个端口,如果被暂用,则再下一个,直到连接到递增的空闲端口位置,但因为有个弊端:客户端一般是有防火墙的,所以服务器主动连接可能会失败,所以采用得少

      被动模式:服务端通过命令连接告诉客户段自己打开了一个端口{随机数x256+20},让客户端过来连,两边端口都随机,服务器防火墙有连接追踪功能,能够识别请求响应的状态

       数据传输模式两种,遵循文件本身的格式,服务器和客户端协商

       文本:html

       二进制: mp3,jpeg

       互联网的数据类型:结构化数据,半结构化数据,非结构化数据

服务端软件 vsftp: very secure ftp daemon

                proftp :功能多   

                wu-ftpd:ftp鼻祖,功能强大,非模块化设计

                windows 平台: serv-u , Filezilla

客户端程序: 

             CLI: ftp,lftp

             GUI:gftp,FlashFXP.Filezilla

VSFTPD:

          配置文件 /etc/vsftp  脚本 /etc/init.d/vsftpd 主程序 /usr/sbin/vsftpd

          支持虚拟用户

          基于PAM用户认证(相当于nsswith的框架)配置文件/etc/pam.d/*  模块   /lib/security/* 或 /lib64/security/*

          受selinux控制

          服务的根目录 /var/ftp (属主和属组为root)

下载安装

          wget   ftp://IPADDR/PATH/TO/SOME/WHERE   -O  /PATH/TO/SOMEWEHRE

          yum install vsftpd

          rpm -ql vsftpd           

三类用户: 匿名用户,虚拟用户,本地用户

           每种用户都映射到一个本地用户

           finger ftp (ftp用户的家目录为/var/ftp)         

           ftp 为匿名用户映射的用户

           共享文件放在/var/ftp/pub

连接ftp服务 

             ftp  IP          

             匿名:anonymous 密码:空

             >help   查看ftp能使用的命令

             lcd 在ftp模式下切换本地目录

配置文件

            man vsftp.conf

            默认本地用户登录到用户的家目录下,且不禁锢用户切换目录

            抓包 tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host x.x.x.x 可以看到所有的过程都是明文的

             浏览器登录本地用户: ftp://username:userpassword@ipaddr   (repo文件的baseurl可以这样写^.^)

             /var/ftp 和/var/ftp/pub 的属主和属组都是root 尽管配置文件中打开匿名用户上传的权限,但上传的时候仍然Could not create file  因此需重新创建一个匿名用户可以上传的目录或者更改原目录的权限

             在此在/var/ftp下mkdir upload  然后更改权限

             setfacl -m u:ftp:rwx /var/ftp/upload (单独给某个用户开权限!!匿名登录时,anonymous=ftp 即用户名输入ftp等同于annoymous)      

             getfacl /var/ftp/upload 查看文件或者文件夹特殊权限

             文件服务权限=文件系统权限和文件共享权限的交集

             此时仍不能删除(delete)文件和创建目录,权限分离需开启其他权限

             重启vsftp会断开连接

             dirmessage_enable=YES定义切换到某个目录的提示信息  在该目录下创建隐藏文件,写入要提示的信息

             xferlog_enable=YES 定义传输日志

             xferlog_file=/var/log/xferlog 传输日志路径

             chroot_local_user=YES 禁锢所有本地用户在自己的家目录

             选择型禁锢,启用一下两项,并创建chroot_list

              chroot_list_enable=YES

              chroot_list_file=/etc/vsftpd/chroot_list

              listen=YES 是否工作为standalone,可以由xinetd代为管理

              如果要交由xinetd接管,需要在/etc/xinetd.d/下提供 一个配置文件

              userlist_enable=YES  默认情况在ftpusers中的用户禁止登录

              /etc/vsftpd/user_list   清空 1,$d   user_list认证先于ftpusers 即在user_list定义的用户密码都无法输入,清空后才ftpusers认证(PAM认证调用/etc/pam.d/vsftpd)

             userlist_enable=YES 表示启用user_list文件 默认写在该文件的用户都是不能登录的

             如果要让卸载user_list 里的用户登录

             添加或者启用 userlist_deny=YES 拒绝(默认动作)黑名单

                               userlist_deny=NO 不拒绝 即是只能在user_list里的用户可以登录 白名单

         

 

FTP 安全通信:

             ftps: ftp+ssl/tls

             sftp:openssh提供的子系统  SubSystem 基于ssh来实现的

             要创建ftps 先要创建CA(私有CA)给vsftpd发证书 然后配置vsftpd

             开启: ssl_enable=YES

                       ssl_tlsv1=YES

                       ssl_ssv2=YES

                       ssl_ssv3=YES

                       allow_anon_ssl=NO

                       force_local_data_ssl=YES

                       force_local_logins_ssl=YES

                       rsa_cert_file=/etc/vsftpd/ssl/vsftpd_cert.pem

                       rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem

配置CA:(可以脚本创建)

          cd /etc/pki/CA

          mkdir certs newcerts  crl

          touch index.txt

          echo 01 > serial

          创建私钥 (umask 077;openssl  genrsa -out private/cakey.perm 2048)

          生成自签证书 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

          过程填写信息:

          Country Name (2 letter code):CN

          State or Province Name (full name) [Berkshire]:CQ

          Locality Name (eg,city):Hechuan

          Organization Name (eg,company) [My Company]:none

          Organization Unit Name (eg,section):IT Tech

          Common Name (eg, your name or your server‘s name) []: Gandefeng.com

          Email Address:

           #

           #

           mkdir /etc/vsftpd/ssl

           cd /etc/vsftpd/ssl

           (umask 077;openssl genrsa -out vsftpd.key 2048;) 

            openssl req -new -key vsftpd.key -out vsftp.csr

            重复以上过程信息

 

            签署  openssl ca -in vsftpd.csr -out vsftpd.crt

             编辑配置文件 vi /etc/pki/tls/openssl.cnf

             dir                       = /etc/pki/CA

             编辑vsftpd配置文件,加入或开启

                       ssl_enable=YES

                       ssl_tlsv1=YES

                       ssl_ssv2=YES

                       ssl_ssv3=YES

                       allow_anon_ssl=NO

                       force_local_data_ssl=YES

                       force_local_logins_ssl=YES

                       rsa_cert_file=/etc/vsftpd/ssl/vsftpd_cert.pem

                       rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem

此时登录    openssl s_client -connect  x.x.x.x:21(也是登录不了的,CLI登录不了)

 

 

 

基于数据库的虚拟用户验证:需手动写PAM认证文件

                虚拟用户的权限由匿名用户的权限等同

                创建 /etc/vsftpd/vusers     db_load(db4-utils) 将其转换为二进制

                 或者基于MySQL:

                 安装mysql pam_mysql

                 yum -y install mysql-server mysql-devel pam-mysql

                 yum -y groupinstall "Development  Libraries" "Development Tools"

 

                未完待续。。。

                

 

 

  

         

     

          

         

 

FTP服务