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

  • 相关阅读:
    Atitit 经济学常见的流派 古典主义与凯恩斯主义
    Atitit 学习方法 体系化学习方法 Excel 科目,分类,专业 三级分类。。 知识点。。 课程就是每一个知识点的详细化。。 比如经济学 类别 专业 xx概论知识点 3、金
    atiitt it学科体系化 体系树与知识点概念大总结.xlsx
    Atitit 减少财政支出普通人如何蹭政府补贴措施 attilax大总结.docx
    Atitit 信用管理概论 attilax学习心得
    Atitit.月度计划日程表 每月流程表v5
    Atitit 企业6大职能 attilax总结
    Atitit 常见每日流程日程日常工作.docx v8 ver ampm imp 签到 am y 天气情况检查 am y 晨会,每天或者隔天 am 每日计划(项目计划,日计划等。 am
    Atitit 财政赤字解决方案
    Atitit 建设自己的财政体系 attilax总结 1.1. 收入理论 2 1.2. 收入分类 2 1.3. 2 1.4. 非货币收入 2 1.5. 2 1.6. 降低期望 2 1.7.
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239854.html
Copyright © 2011-2022 走看看