zoukankan      html  css  js  c++  java
  • centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享

     FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立连接前就要经过一个"三次握手"的过程.FTP服务还有一个非常重要的特点是它可以独立于平台。


        LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等。Red Hat Enterprise Linux中默认安装的是vsftpd。
        通常,访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:
        (1)anonymous(匿名帐号)
    使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录.当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp.为了减轻FTP服务器的负载,一般情况下,应关闭匿名帐号的上传功能。
        (2)real(真实帐号)
    real也称为本地帐号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的帐号.用真实帐号登录后,其登录的目录为用户自己的目录,该目录在系统建立帐号时系统就自动创建。
        (3)guest(虚拟帐号)
    如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest,guest是真实帐号的一种形式,它们的不同之处在于,geust登录FTP服务器后,不能访问除宿主目录以外的内容。
    下面就对其详细介绍。

    接下来我们开始实现vsftpd的虚拟用户的功能:

    1、yum安装vsftpd程序:

    # yum install vsftpd -y

    2、修改配置文件

        备份修改配置文件
       # cd /etc/vsftpd
        # mv vsftpd.conf vsftpd.conf.bak
        # vim vsftpd.conf
    加入以下内容,并保存wq:

    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    anon_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    listen=YES
    user_config_dir=/etc/vsftpd/vuser_dir
    pam_service_name=/etc/pam.d/ftp.vu
    userlist_enable=NO
    chroot_list_enable=YES
    tcp_wrappers=YES
    guest_enable=YES
    guest_username=root
    chown_uploads=YES
    chown_username=root


    参数说明:
    # cat vsftpd.conf | grep "^[^#]"
    anonymous_enable=NO  //是否允许anonymous登录FTP服务器,默认是允许的。
    local_enable=YES  //是否允许本地用户登录FTP服务器,默认是允许
    write_enable=YES  //是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许
    anon_umask=022  //设置虚拟用户的文件生成掩码为022,默认是077
    dirmessage_enable=YES  //激活目录信息,当远程用户更改目录时,将出现提示信息
    xferlog_enable=YES  //启用上传和下载日志功能
    connect_from_port_20=YES  //启用FTP数据端口的连接请求
    xferlog_file=/var/log/vsftpd.log  //设置日志文件的文件名和存储路径,这是默认的
    xferlog_std_format=YES  //是否使用标准的ftpd xferlog日志文件格式
    listen=YES  //使vsftpd 处于独立启动模式
    user_config_dir=/etc/vsftpd/vuser_dir  //使用虚拟用户配置文件的目录
    pam_service_name=/etc/pam.d/ftp.vu  //设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下.
    userlist_enable=NO  //用户列表中的用户是否允许登录FTP服务器,默认是不允许
    chroot_list_enable=YES  //如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项
    tcp_wrappers=YES  //使用tcp_wrqppers作为主机访问控制方式
    guest_enable=YES  //是否启用来宾用户(也就是启用虚拟用户)
    guest_username=root  //如果启用了虚拟用户后上传文件修改文件的用户名
    chown_uploads=YES  //是否启用上传文件后修改为指定的属主
    chown_username=root  //是否启用上传文件后修改为指定的属主用户


    3、在/etc/vsftpd/下创建两个目录

    vuser_db   #后续存放虚拟用户的配置文件
    vuser_dir  #存放虚拟用户的认证文件
    # mkdir vuser_db vuser_dir
    # cd vuser_db/
    # ll
    -rw-r--r-- 1 root root    44 6月  17 19:35 login_vuser
    -rw-r--r-- 1 root root 12288 6月  17 19:35 vuser.db
    # vim login_vuser
    //以下是login_vuser虚拟用户的帐号密码格式,奇数行为用户名,双数行为密码
    ftpuser1
    123456
    ftpuser2
    123456

    生成数据库文件
    选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。
    如果指定了选项-T,那么一定要追跟子选项-t
    子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。
    -f:参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码

    # db_load -T -t hash -f /etc/vsftpd/vuser_db/login_vuser /etc/vsftpd/vuser_db/vuser.db


    4、更改pam认证模块

    # cd /etc/pam.d/
    # vim ftp.vu  //这个文件名要与主配置文件中的pam_service_name指定的一致
    //最后面的vuser就是vuser.db,但是这里的后缀不是需要写的
    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser


    5、为虚拟用户创建对应的文件

    # cd /etc/vsftpd/vuser_dir/
    # ll   //login_vuser中有多少个帐号就创建多少个虚拟用户文件
    -rw-r--r-- 1 root root 168 6月  17 19:36 ftpuser1
    -rw-r--r-- 1 root root 169 6月  17 19:37 ftpuser2

    # vim ftpuser1

    anon_world_readable_only=NO
    write_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    local_root=/data/ftp1 //指定虚拟用户有权限登录到哪个目录
    chown_upload_mode=0777  //虚拟用户上传文件的权限设置


    到这里基本上算是配置完成了,可以启动vsftpd服务了:

    # service vsftpd start

    注意:在复制配置文件时,记得先保存在文本编辑器中,去掉空格,避免配置无法被识别



    如果ftp://ip连接不上去,可在终端使用lftp -u user,passwd ip连接上去,看看报什么错,然后逐个排查,线上服务器的话要开放ftp的端口,线上的开放端口设置:
    iptables -A INPUT -p tcp -m multiport --dports 20,21 -m state --state NEW -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 30000:31000 -j ACCEPT


    在centos客户机上安装lftp命令
    # yum install -y lftp
    # lftp -u ftpuser1,pass 192.168.8.39
    lftp ftpuser1@192.168.8.39:~> ls
    ls: 登录失败: 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list


    此时
    vim /etc/vsftpd/chroot_list
    加入以下内容即可,这个是说可以列出除家目录以外的用户
    ftpuser1
    ftpuser2


    lftp ftpuser1@192.168.8.68:~> ls
    ls: 登录失败: 500 OOPS: bad bool value in config file for: anon_world_readable_only


    /etc/vsftpd/vuser_dir/ftpuser1的配置文件权限中有空格,去掉即可


    lftp ftpuser1@192.168.8.68:~> ls
    ls: 登录失败: 500 OOPS: cannot change directory:/root
    解决办法:
    1、 查看 SELinux 的状态


    # sestatus -b | grep ftp
    allow_ftpd_anon_write                       off
    allow_ftpd_full_access                      off
    allow_ftpd_use_cifs                         off
    allow_ftpd_use_nfs                          off
    ftp_home_dir                                off
    ftpd_connect_db                             off
    ftpd_use_fusefs                             off
    ftpd_use_passive_mode                       off
    httpd_enable_ftp_server                     off
    tftp_anon_write                             off
    tftp_use_cifs                               off
    tftp_use_nfs                                off
    2、 在出现的结果中可以看到 ftp_home_dir off
    tftpd_disable_trans off
    之类。我们现在只要把其中之一设置为on就可以啦。
    3、 setsebool -P ftpd_disable_trans on 或者 setsebool -P ftp_home_dir on
    # setsebool -P ftpd_disable_trans on
    Boolean ftpd_disable_trans is not defined
    4、 重启vsftpd: service vsftpd restart


    貌似不行,此时需要关闭selinux防火墙
    # setenforce 0
    修改其配置文件,不让selinux随机启动
    # vim /etc/selinux/config
    SELINUX=disabled

  • 相关阅读:
    《MySQL必知必会》第二十三章:使用存储过程
    《MySQL必知必会》第二十四章:使用游标
    《MySQL必知必会》第二十五章:使用触发器
    《MySQL必知必会》第二十章:更新和删除数据
    《MySQL必知必会》第二十一章:创建和操纵表
    《MySQL必知必会》第二十二章:使用视图
    《MySQL必知必会》第十七章:组合查询
    《MySQL必知必会》第十八章:全文本搜索
    [LeetCode] 930. Binary Subarrays With Sum
    [LeetCode] 676. Implement Magic Dictionary
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239854.html
Copyright © 2011-2022 走看看