zoukankan      html  css  js  c++  java
  • Linux下ftp安装配置及三种用户的验证

    一、原理简介

    二、安装配置

    三、三种用户的验证

    一、简介

    FTP即文件传输协议(File Transfer Protocol),完成各主机的文件共享功能,基于客户端-服务器的协议,工作在应用层,tcp的21号端口。

     

    ftp有两个连接

    命令连接:控制连接,21/tcp。客户端与服务端的tcp 21端口建立连接,发送命令

    数据连接:客户端与服务端数据的传送。

    数据连接又有两种模式

     

        主动(Port)模式:客户端从一个随机端口N(N>1024)连接服务端的命令端口21。然后客户端打开端口N+1,并发送FTP命令"portN+1"到FTP服务器。接着服务器会从它自己的数据端口20连接到客户端的端口(N+1)。简单的说也就是在数据连接的过程中服务器端主动连接客户端。

        被动(Passive)模式:由于服务器端主动连接客户端的主动模式导致客户端不安全性,所以出现被动模式。客户端从一个随机端口N(N>1024)连接服务端的命令端口21,服务器端返回一个报文,其中含有需要客户端来连接的数据端口信息,也就是服务器端打开的一个随机端口(此端口一般大于5000),然后客户端会用端口(N+1)去连接服务端的随机端口。因为防火墙的连接追踪功能,使得这几个连接为相关联的连接,所以服务器端的防火墙对客户端来连接的随机端口(大于5000)不会有影响。简单的说也就是在数据连接的过程中,是服务器端被动的让客户端来连接,又因为防火墙的连接追踪机制使得其端口连接能够进行。

     

    ftp有两种数据传输方式

        ASCII:一般为文本,数据库等。

        二进制:一般为mp3,jpeg等格式文件。

    ftp有较多的服务器端程序和客户端程序,以下:

    服务器端程序:

            wu-ftpd:Washington University-ftpd

            vsftpd: Very Secure ftp Daemon

            proftpd:

            pureftpd

            Filezilla

            Serv-U:windows下的

    客户端程序:

         CLI:

                ftp

                lftp

         GUI:

                gftpd

                FlashFXP

                Cuteftp

                Filezilla

    也由于vsftpd主打的是安全性、完全开源及免费、速率高、支持IPv6、虚拟用户功能等等其他FTP服务端软件不具备的功能。此处使用vsftpd来搭建ftp服务。

     

    二、vsftpd安装配置(centos 7)

    服务器端和客户端都为192.168.1.222

     

    安装,可直接yum安装

    yum install vsftpd –y

    清空防火墙规则或关闭防火墙,关闭selinux。

    安装完成后可以看到/etc/vsftpd下的几个文件,

    用户禁止登陆列表    

    /etc/vsftpd/ftpusers

    /etc/vsftpd/user_list

     

    主配置文件

    /etc/vsftpd/vsftpd.conf

     

     三、三种用户的验证(匿名用户、普通用户、虚拟用户)  

    1.匿名用户模式

      在vsftpd.conf文件中,找到参数如下去掉注释:

    anonymous_enable=YES

    允许匿名访问模式。(默认)

    anon_umask=022

    匿名用户上传文件的umask值。

    anon_upload_enable=YES

    允许匿名用户上传文件

    anon_mkdir_write_enable=YES

    允许匿名用户创建目录

    anon_other_write_enable=YES

    允许匿名用户修改目录名或删除目录(此信息没有,需手动加)

     

    可利用客户端工具xftp或者ftp来检查是否有效,ftp命令用于使用FTP服务,格式为:"ftp [参数] [FTP主机]",yum install ftp –y安装即可。

    安装完之后,操作可如下图:

    此处我在登录ftp之前创建的anon目录,发现匿名用户创建不了目录。由于此目录的用户与其属组都为root,所以没有权限,可使用setfacl给个匿名用户权限

     

    再来登录进去可见创建成功,重命名和文件的删除、上传也没问题(此处没有截图。还有可在ftp模式下使用help来查看可使用的命令)。

     

    2.本地用户的验证

        首先关闭之前的匿名用户相关配置,添加下列参数,没有的手动添加即可,重启服务。

    anonymous_enable=NO

    禁止匿名访问模式。

    local_enable=YES

    允许本地用户模式。

    write_enable=YES

    设置可写入权限。

    local_umask=022

    本地用户模式创建文件的umask值。

    userlist_deny=YES

    参数值为YES即禁止名单中的用户(需手动添加)

    userlist_enable=YES

    允许"禁止登陆名单",名单文件为ftpusers与user_list。

     

    由于本地用户可随意进入系统各个目录,所以需添加参数。

     

    新建用户hot

    useradd hot并设置密码

    然后登录验证,可看到创建目录,重命名删除等操作。

     

    chroot_local_user=YES 禁锢本地用户于其家目录中,这样用户只能在其家目录下。

    添加此参数,登录会出现500 OOPS: vsftpd: refusing to run with writable root inside chroot()

    Login failed.的错误,问题是因为用户的根目录可写,并且使用了chroot限制,而这在最近的更新里是不被允许的。要修复这个错误,可以用命令chmod a-w /home/hot去除用户根目录的写权限即可。

    但是有个问题设置此参数之后,本地用户无法上传文件及创建文件和删除文件,(selinux和防火墙都关闭了)。最好使用下面参数!!

    allow_writeable_chroot=YES

    允许禁锢的FTP根目录可写而不拒绝用户登入请求。

    至于userlist_enable和userlist_deny这两个参数理解其意便知怎么用。上面配置文件图已给出说明。

        

    3.虚拟用户的验证

    虚拟用户模式的帐号密码都不是真实系统中存在的,所以只要配置妥当虚拟用户模式会比本地用户模式更加安全,但是Vsftpd服务配置虚拟用户模式的操作步骤相对复杂一些,具体流程如下:

    第1步:建立虚拟FTP用户数据库文件。

    第2步:创建FTP根目录及虚拟用户映射的系统用户。

    第3步:建立支持虚拟用户的PAM认证文件。

    第4步:在vsftpd.conf文件中添加支持配置。

    第5步:为虚拟用户设置不同的权限。

    第6步:重启vsftpd服务,验证实验效果。

     

    PAM(Pluggable Authentication Modules)是一种认证机制,通过一些动态链接库和统一的API将系统提供的服务与认证方式分开,可以根据需求灵活的调整服务程序的不同认证方式。可以不必对应用程序做任何的修改,易用性很强,PAM采取了分层设计的思想——应用程序层、应用接口层、鉴别模块层,程序层调用接口层,接口调用模块层。

    其目录/etc/pam.d:针对不同服务而定义好的pam配置文件。

    例如vsftpd程序就会在其主配置文件("/etc/vsftpd/vsftpd.conf")中写入下面的参数:

    pam_service_name=vsftpd

    表示登陆FTP服务器时是根据/etc/pam.d/vsftpd的文件内容进行安全认证的。

     


    第1步:建立虚拟FTP用户数据库文件。

    # cd /etc/vsftpd/

    创建用于生成FTP用户数据库的原始帐号和密码文件

    # vim vuser.list //单数行为帐号,双数行为密码。账号不是真实存在于系统中的,是借助于宿主账号nobody

     

    使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db:

    # db_load -T -t hash -f vuser.list vuser.db

     

    查看数据库文件的类型:

    # file vuser.db

    FTP用户数据库内容很敏感,所以权限给小一些:

    # chmod 600 vuser.db

    删除原始的帐号和密码文件:

    # rm -f vuser.list

     

    第2步:创建FTP根目录及虚拟用户映射的系统用户。

    创建用户virtual并设置为不允许登陆系统并定义该用户的家目录:

    # useradd -d /var/ftproot -s /sbin/nologin virtualftp

    为保证其他用户可以访问,给予rwxr-xr-x权限:

    # chmod -Rf 755 /var/ftproot/

     

    第3步:建立支持虚拟用户的PAM认证文件:

    # vim /etc/pam.d/vsftpd.vu

    //参数db用于指向刚刚生成的vuser.db文件,但不要写后缀。

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

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

     

    第4步:在vsftpd.conf文件中添加支持配置。

    可以关闭匿名用户模式

    参数

    作用

    anonymous_enable=NO

    禁止匿名开放模式。

    local_enable=YES

    允许本地用户模式。

    guest_enable=YES

    开启虚拟用户模式。

    guest_username=virtualftp

    指定虚拟用户帐号。

    pam_service_name=vsftpd.vu

    指定pam文件。

    allow_writeable_chroot=YES

    允许禁锢的FTP根目录可写而不拒绝用户登入请求。

       

    第5步:为虚拟用户设置不同的权限

    权限默认是不能上传、创建、修改文件,可配置用户独立的用户权限。


    指定用户独立的权限配置文件存放的目录:

    # vim /etc/vsftpd/vsftpd.conf

    user_config_dir=/etc/vsftpd/vusers_dir

     

    创建用户独立的权限配置文件存放的目录:

    # mkdir /etc/vsftpd/vusers_dir/

    在该目录下创建空白的hdd的配置文件,指定hdd用户的具体权限:

     

    第6步:重启vsftpd服务,验证实验效果。
    如下图可以看到创建目录删除目录上传下载等功能都没有问题。也可以直接在windows下打开文件窗口输入ftp://IP 操作其功能。

    以上。

     

  • 相关阅读:
    黑马程序员JAVA基础Java 集合之Collections 工具类
    黑马程序员JAVA基础Java 集合之Set 接口
    黑马程序员JAVA基础Java 集合之List 集合
    通过回车来完成数据的提交
    BizTalk中多个子记录映射解决办法
    框架的展开与关闭
    一个有用的触发器
    SQL 中分隔字符串的获取
    未保存离开页面要给出提示
    常用的一些javascript小技巧 很实用
  • 原文地址:https://www.cnblogs.com/whych/p/9287189.html
Copyright © 2011-2022 走看看