Linux经常使用服务之ftp服务(使用vsftpd实现)

文件共享服务mysql

应用层:ftplinux

内核:NFSsql

跨平台:sambashell

在linux实现CIFS(SMB)协议数据库


RPC:远程过程调用(主要功能,让位于不一样主机上的俩个进程可以基于二进制格式进行数据通讯)vim

    ftp :(基于RPC的文件共享服务)(明文传输)工做于应用层安全

   ftp协议服务端与客户端交互时有俩种链接:(容许并发链接)服务器

命令链接:文件管理类命令,始终在线的链接session

数据链接:数据传输,按需建立及关闭的链接并发

数据传输格式(使用何种格式传输,由客户端和服务器自行协商):

文本传输

二进制传输

主动模式(Active FTP):由服务器建立链接

命令链接:

客户端:随机端口 --->服务端:21端口

客户端向服务器端发送用来创建数据链接的高位端口号

    数据链接:

服务端:20/tcp--->客户端:随机端口

服务器的20端口仅仅负责创建数据链接,真正传输数据的是其余随机端口,20端口只是个监听套接字,链接套接字是随机的

     

被动模式(Passive FTP):由客户端建立链接

    命令链接:

客户端:随机端口 --->服务端:21端口

数据链接:(服务端此时使用的端口,已经在命令链接中通知给客户端)

    客户端:随机端口--->服务端:随机端口


    (服务器防火墙经过链接追踪功能放行服务器使用的随机端口)

    ftp协议中定义的典型消息,用来判断问题:

    125:数据链接打开,传输开始

    200:命令OK

    226:数据传输完毕

    331:用户名OK,须要输入密码

    425:不能打开数据链接

    426:数据链接被关闭,传输被中断

    452:错误写文件

    500:语法错误,不可识别的命令

    530:未登入

vsftp  (支持虚拟用户,基于PAM实现用户认证)

/etc/vsftpd  配置文件目录

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

/etc/init.d/vsftpd 启动脚本

/usr/sbin/vsftpd   主程序


针对系统帐号来给予阻挡的配置文件:

/etc/vsftpd/ftpusers:PAM模块的阻挡访问设置项目

/etc/vsftpd/user_list:vsftpd自定义的阻挡访问项目




   vsftpd受Selinux控制


    基于PAM实现用户认证:(PAM:可插入式认证模块)

    /etc/pam.d/*

    /lib64/security/*

  支持虚拟用户 


  /var/ftp  vsftp根目录(不容许除root用户外其余用户拥有写权限)

  匿名用户访问目录

  /var/ftp/pub 存储公开数据




     ftp用户:

      匿名用户(anonymous 匿名用户登陆也需输入匿名用户用户名 anonymous )

      系统用户

      /var/ftp/系统用户名       系统用户家目录

      虚拟用户(访客身份)(被映射为ftp用户)


      (匿名用户,虚拟用户最终都要映射为某系统用户)



      vsftpd经常使用配置

     /etc/vsftpd/vsftpd.conf 

      anonymous_enable=YES  是否容许匿名用户登陆(ftp和anonymous俩个名称都被认为是匿名用户)

      local_enable=YES      是否启用系统用户登陆

        write_enable=YES      系统用户是否能够上传文件

        anon_upload_enable=YES 匿名用户是否要上传文件



        某用户是否能够能在ftp服务器上上传文件,除了要看是否具备上传文件的权限嘛,还要看用户是否对相应目录具备写权限。

        (文件服务权限和文件共享权限的交集)


        connect_from_port_20=YES      ftp为主动模式时(由服务器建立数据链接),服务器使用默认的20号端口


        anon_mkdir_write_enable=YES   匿名用户是否能够建立目录

        anon_other_write_enable=YES   匿名用户是否拥有其余写权限(删除权限)

        anon_world_readable_only=YES  仅容许匿名用户具备下载可读文件的权限

        anon_upload_enable=YES        是否容许匿名用户具备上传数据的权限(若是容许则anon_other_write_enable=YES必须设置)

        anon_umask=077                匿名用户上传文件的权限

        no_anon_password=YES          匿名用户是否能够免密登陆


        dirmessage_enable=YES         当用户进入一个目录时是否显示欢迎信息(在相应目录下建立.message文件,在.message文件里编辑欢迎信息)

        xferlog_enable=YES            是否打开传输日志

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


        chown_uploads=YES            用户上传文件后是否将用户上传的文件的属主改成其余用户     

        chown_username=whoever       改成那个用户


        idle_session_timeout=600      用户会话超时时间



        userlist_enable=YES           是否容许/etc/vsftpd/user_list 文件生效,阻挡指定的用户访问ftp服务器

        userlist_deny=YES|NO          如为YES则 /etc/vsftpd/user_list 为黑名单 如为NO 则/etc/vsftpd/user_list为白名单            



        chroot_list_enable=YES        是否是用一个文件将特定用户锁在家目录下

        chroot_list_file=/etc/vsftpd/chroot_list  将用户锁定在家目录下的用户列表文件存放路径


        chroot_local_user=YES         将全部用户禁锢在家目录下(此命令如生效则 chroot_list_file=/etc/vsftpd/chroot_list 无效 )


        listen=YES                   是否将vsftpd运行为一个独立守护进程


        守护进程:

        独立守护进程

        瞬时守护进程(由xinetd代为管理)


        pam_service_name=vsftpd  pam配置文件名字


        资源访问控制

        max_clients=xx 最多容许多少用户同时访问ftp服务

        max_per_ip=xx 每一个IP最同时多能够发起多少链接


        idle_session_timeout=xxx 空闲的用户会话在空闲多久后中断(单位秒)

        date_connection_timeout=xxx 空闲的数据链接在空闲多久后中断(单位秒)


        设置客户端空闲时的自动中断和激活链接的时间

        accept_timeout=xx  客户端空闲多长时间后中断链接

            connect_timeout=xx 客户端中断多长时间后自动激活链接

        设置客户端链接时的端口范围:

        pasv_min_port=xxxx

        pasv_max_port=xxxx


        虚拟用户相关设置

         guest_enable=YES 是否容许使用虚拟用户

         guest_username=xxx 指定虚拟用户映射的系统帐户



        是否支持TCP_Wrappers的防火墙机制

         tcp_wrappers=YES




    ftp服务的安全通讯方式:

    ftps:ftp+ssl/tls

    sftp:openssh的一个子系统,基于ssh来实现



       ftps安全通讯相关设置:

        ssl_enable=YES  是否容许客户端使用ssl链接

        ssl_sslv2=NO   是否容许使用ssl2进行链接

        ssl_sslv3=NO   是否容许使用ssl3进行链接

        ssl_tlsv1=YES  是否容许使用tls1进行链接(推荐使用)

        allow_anon_ssl=NO 是否容许匿名用户使用ssl链接

        force_local_data_ssl=YES 是否强制非匿名用户必须使用ssl链接发送和接收数据

            force_local_logins_ssl=YES 是否强制非匿名用户登陆时必须使用ssl链接

            rsa_cert_file=xxxx   用于SSL链接的RSA证书文件位置

            rsa_private_key_file=xxx 用于SSL链接的RSA私钥文件的位置,(none)表示私钥文件就存放于证书文件中

  


  vsftpd虚拟用户

   虚拟用户和本地用户不能够同时存在

   传统的 FTP 服务器采用以下的方法实现虚拟用户:

   在本地创建普通用户帐号并设置密码

   将其登陆 shell 设为不可登陆

   由 passwd/shadow 口令系统进行认证

   特别提醒,在vsftpd的设置中,必须把local_enable=YES 打开才能设置虚拟用户登陆

  全部虚拟用户都会统一映射为一个指定的系统帐号:访问的共享位置既为此系统帐号的家目录

  各虚拟用户可被赋予不一样的访问权限,经过匿名用户的权限控制参数进行指定


  虚拟用户帐号的存储方式:

  文件:编辑文本文件,此文件须要被编码为hash格式

  奇数行为用户名,偶数行为密码


  基于文件验证的vsftpd虚拟用户

  1.建立用户数据库文件

  a. 建立用户文件

    vim /etc/vsftpd/vusers.txt

        格式:

            用户名

            密码

            ...

  b. 进入到相应目录下

  cd /etc/vsftpd



  c. 使用 db_load 命令生成口令库文件

  db_load -T -t hash -f vusers.txt vusers.db


  d. 修改修改口令库文件权限

     chmod 600 vusers.db 

      2.建立虚拟用户映射的系统用户和访问FTP目录

      a.建立系统用户并指定家目录

      useradd -d /var/ftproot -s /sbin/nologin vuser  #建立系统用户vuser 家目录为/var/ftproot且不容许登陆(ftproot目录会自动建立)

      b.修改家目录权限

      chmod +rx /var/ftproot


      c.pam配置文件,编辑生成虚拟用户所需的 PAM 配置文件

      建立vsftpd的pam模块的配置文件,/etc/pam.d/vsftpd.db 让vsftpd支持pam模块进行验证

      在/etc/pam.d/vsftpd.db中添加如下内容:

         auth       required     pam_userdb.so db=/etc/vsftpd/vusers

                           account    required     pam_userdb.so db=/etc/vsftpd/vusers



                    



                3.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf 给vsftpd指定pam模块

                        添加如下内容:

                         guest_enable=YES           #容许虚拟用户登陆 

guest_username=vuser       #将虚拟用户映射问本地vuser用户

pam_service_name=vsftpd.db    # /var/pam.d目录下的 关于vsftpd的配置文件



    4. 为虚拟用户创建独立的配置文件


       a.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf ,为虚拟用户指定配置文件的存储路径

        添加如下内容:

        user_config_dir=/etc/vsftpd/vusers.d/


                   b.在/etc/目录下建立虚拟用户的目录 


                             mkdir /etc/vsftpd/vusers.d/



                   c.进入到虚拟用户的目录中/etc/vsftpd/vusers.d/ 建立与虚拟用户同名的配置文件

                      将下面的内容写入配置文件中,就能够进行权限控制


                        #虚拟用户的上传权限


                           anon_upload_enable=YES

                        # 虚拟用户建立文件夹的权限

                           anon_mkdir_write_enable=YES


                        #虚拟的其余用户对指定用户目录的写权限

                         anon_other_write_enable=YES



                

                   


            虚拟用户的权限注意事项:

            当一个虚拟用户登陆 FTP 服务器时,vsftpd 的守护进程首先

查看主配置文件的权限配置,而后再用此用户单独的配置文件

中的配置覆盖主配置文件中的配置。

vsftpd 的这种配置机制,相似于 Apache 配置中的 httpd.conf

和.htaccess。只不过前者是针对不一样虚拟用户的,然后者是针

对不一样目录的。

所以在对不一样虚拟用户进行配置时要注意:

(1)在主配置文件中设置最低的权限,这些设置对虚拟用户

口令库中的全部用户均生效;

(2)分别在不一样的虚拟用户的配置文件中开放此虚拟用户应

该具备的权限。

                         






  关系型数据库的表中:

  实时查询数据库完成用户认证:

  mysql库:pam要依赖于pam-mysql插件


    ftp支持俩种安全通讯方式:

    ftps:ftp+ssl/tls

    sftp:基于ssh的安全传输功能




    ftps的配置过程:


    1、建立私有CA:

    在肯定配置为CA的服务器上生成一个自签证书,并为CA提供所须要的目录及文件便可;

                  

                       1.为CA提供所需的目录及文件:

                             mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

                             touch /etc/pki/CA/{serial,index.txt}

                             echo ca序列号 > /etc/pki/CA/serial

                             



                       2.生成私钥(生成的私钥存放于openssl配置文件中配置的目录)

                       (umask 077; openssl genrsa -out private/cakey.pem 2048)

   3.生成自签证书

         


          openssl req -new -x509 -key private/cakey.pem -out cacert.pem  -days 365

          ( -new 生成新证书签署请求

                                  -x509 生成自签格式证书(专用于建立私有CA使用)

                                  -key 生成请求时用到的私钥文件路径

                                  -out 生成的证书文件路径,若是是自签操所将直接生成签署过的证书

                                  -days  证书的有效时长(单位天)

             )

                                (本身向本身申请自签证书则使用-x509选项)

                                       输入国家代码

                                       输入地区代码

                                       输入城市代码

                                       输入企业代码

                                       输入部门代码

                                       输入主机名或我的名

                                       输入管理员名


        2、为vsftpd请求CA

        1.建立存放CA的目录

        mkdir /etc/vsftpd/ssl

        2.进入CA目录,生成私钥

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

        3.生成证书签署请求

        openssl req -new  -key vsftpd.key -out vsftpd.csr -days 360


        输入国家代码

                                       输入地区代码

                                       输入城市代码

                                       输入企业代码

                                       输入部门代码

                                       输入主机名或我的名

                                       输入管理员名


        4.编辑openssl配置文件

        修改CA工做目录为:

        dir = /etc/pki/CA 

        4.签署CA(在/etc/vsftpd/ssl 目录下执行)

        openssl ca -in  vsftpd.csr -out vsftpd.crt -days 360


        5.编辑vsftpd配置文件,使vsftpd可使用ssl

        添加如下内容:



ssl_enable=YES

ssl_tlsv1=YES

ssl_sslv3=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt                CA证书位置

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key         私钥文件路径



6.重启vsftpd服务






源码安装vsftpd:


1.下载vsftpd

http://vsftpd.beasts.org/

2.备份vsftpd配置文件


3.

//进入存放 vsftpd 源代码的目录

# cd /usr/local/src

# ls

vsftpd-1.1.3.tar.gz

//解包

# tar -zxvf vsftpd-1.1.3.tar.gz

# cd vsftpd-1.1.3



//编译 vsftpd

# make

//查看是否编译成功

# ls -l vsftpd

-rwxr-xr-x 1 root root 65996 3 月 12 18:56 vsftpd

//安装 vsftpd

# make install

//安装过程执行了以下操做

// cp vsftpd /usr/local/sbin/vsftpd

// cp vsftpd.conf.5 /usr/local/man/man5

// cp vsftpd.8 /usr/local/man/man8

// cp xinetd.d/vsftpd /etc/xinetd.d/

#

//复制默认配置文件到/etc 目录

# cp vsftpd.conf /etc

//复制本地用户所需的 PAM 配置文件

# cp RedHat/vsftpd.pam /etc/pam.d/ftp

//从新启动 xinetd

# service xinetd restart

//安装结束






高安全级别匿名 FTP 服务器的配置要求

.  仅仅容许匿名用户访问

.  不容许本地用户访问

.  关闭全部写权限

.  不容许匿名用户上传

.  设置客户端链接时的端口范围

.  设置 匿名用户的最大传输速率限制

.  设置空闲的数据链接的的中断时间

.  设置客户端空闲时的自动中断和激活链接的时间

.  配置每一个主机的最大链接数

.  配置总的并发链接数

.  配置禁止访问的主机

.  配置安全日志

相关文章
相关标签/搜索