zoukankan      html  css  js  c++  java
  • vsftpd安装及虚拟用户配置

    FTP服务是最常用的跨平台文件共享服务之一

    ============= 完美的分割线 ===============

    0.FTP两种模式的区分

    1)PORTFTP和PASVFTP,PORTFTP是一般形式的FTP。
    2)这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。
    3)PORTFTP由FTP服务器指定数据传输所使用的端口,默认值为20。
    4)PASVFTP由FTP客户端决定数据传输的端口。PASVFTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。

    1.安装FTP服务端

    1.1.环境准备

    # 检查系统环境,如果系统版本较低,建议升级内核等

    # 在CentOS6.x和7.x版本安装方法基本相同

    uname -a
    cat /etc/redhat-release 
    # yum update -y       # 如果是新服务器或者是ftp独占可以升级,其他看情况

    1.2.安装vsftpd

    # 包括服务端和客户端

    yum install vsftpd ftp -y

    1.3.启动vsftpd服务并配置开机自启动

    /etc/init.d/vsftpd start
    netstat -anptl|grep vsftpd
    chkconfig vsftpd on
    chkconfig --list vsftpd

    1.4.配置查看ftp相关日志

    # 从xferlog可以查看到用户上传下载等的操作记录,删除不会显示

    vim /etc/logrotate.d/vsftpd 
    /var/log/vsftpd.log {
        # ftpd doesn't handle SIGHUP properly
        nocompress
        missingok
    }
    /var/log/xferlog {
        # ftpd doesn't handle SIGHUP properly
        nocompress
        missingok
    }
    tail -f /var/log/xferlog

    2.配置匿名方式访问FTP服务端

    2.1.安装好vsftpd服务,默认为匿名访问

    1)可以直接输入IP端口,可以打开ftp服务器
    2)允许匿名用户登录,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传
    3)允许本地用户登录,且可离开主目录,本地用户允许上传/下载
    4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登录
    5)服务器使用独占方式启动,且无限制连接数

    3.配置虚拟用户认证的FTP服务端

    3.1.修改vsftpd.conf 文件

    cd /etc/vsftpd/
    vim vsftpd.conf 

    # 修改配置文件,确认以下选项

    anonymous_enable=NO     # 修改,禁止匿名用户登录
    local_enable=YES        # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用
    write_enable=YES        # 默认启用,本地用户开放写权限
    #local_umask=022        # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644
    userlist_enable=YES        # 默认启用,默认为允许user_list中的用户进行访问
    # userlist_deny=yes        # 也可以用这个,默认拒绝user_list中的用户访问FTP服务器,保留一种即可
    userlist_file=/etc/vsftpd/user_list
    chroot_local_user=YES      # 默认启用,将本地用户锁定在自家目录中
    
    # made for virtual user
    guest_enable=YES              # 增加,启用虚拟用户模式
    guest_username=ftpvuser        # 增加,配置虚拟用户映射到的本地用户名
    pam_service_name=/etc/pam.d/ftpvuser.pam    # 修改,配置虚拟用户的认证方式
    user_config_dir=/etc/vsftpd/vuser.d    # 增加,虚拟用户的配置文件目录
    anon_umask=022            # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600

    # 其他配置选项,根据实际需求修改

    dirmessage_enable=YES          # 设置切换到目录时显示message 隐含文件的内容
    xferlog_enable= YES             # 激活上传和下载日志
    connect_from_port_20= YES          # 启用FTP数据端口连接
    pam_service_name=vsftpd            # 设置PAM认证服务的配置文件名称,  该文件存放在/etc/pam.d目录下
    userlist_enable= YES            # 允许vsftpd.user_list文件中的用户访问服务器
    userlist_deny= YES             # 拒绝vsftpd.user_list文件中的用户访问服务器
    listen= YES                    # 是否使用独占启动方式
    tcp_wrappers= YES              # 使用防火墙
    #file_open_mode=0755

    # vsftpd配置文件

    /etc/vsftpd/vsftpd.conf         # 主配置文件
    /etc/vsftpd/ftpusers             # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵
    /etc/vsftpd/user_list            # 授权用户列表,可以控制哪些用户可以访问或者禁止访问

    # 注意:
    1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
    2)除了主配置文件外,还可以给特定用户设定个人配置文件
    3)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
    4)实际的访问权限可由用户独立的配置文件进行单独控制

    3.2.创建虚拟用户相关文件

    1)创建授权认证文件

    cd /etc/pam.d/
    mv vsftpd vsftpd.ori        # 备份原有的ftp的pam认证文件
    vim ftpvuser.pam          # 创建新的ftp虚拟用户认证文件

    写入以下内容:

    #%PAM-1.0
    auth       required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser        # 不可以加.db的扩展名,否则认证不成功
    account    required     pam_userdb.so db=/etc/vsftpd/vuser.d/vuser

    2)创建虚拟用户的秘钥文件

    mkdir -p /etc/vsftpd/vuser.d
    cd /etc/vsftpd/vuser.d
    touch vuser.list

    3)加密虚拟用户的秘钥文件

    # 使用db_load工具生成加密

    yum install db4-utils -y
    db_load -T -t hash -f vuser.list vuser.db
    file vuser.list 
    file vuser.db 

    # 为了安全,修改虚拟用户文件的访问权限

    chmod 600 /etc/vsftpd/vuser.*
    ll /etc/vsftpd/vuser.*

    3.3.配置一个虚拟用户访问权限的实例

    1)创建或修改虚拟用户秘钥信息

    cd /etc/vsftpd/vuser.d
    vim  vuser.list
    --------------------
    admin
    123456
    --------------------

    2)设置可以访问ftp的虚拟用户列表user_list

    # 注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户
    # 因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户

    vim /etc/vsftpd/user_list 
    ---------------------
    admin
    ----------------------

    3)每个用户单独创建授权文件

    cd /etc/vsftpd/vuser.d
    vim admin
    ---------------------------
    # 指定宿主目录,配置访问权限
    write_enable=YES
    local_root=/data/ftpdata/admin     # 宿主目录
    anon_upload_enable=YES               # 上传
    anon_mkdir_write_enable=YES          # 创建目录写权限
    anon_other_write_enable=YES          # 其他写入权限
    ---------------------------

    4)创建ftp虚拟用户的宿主目录

    # 创建的ftp本地用户及其根目录,用于映射虚拟用户,注意修改目录权限

    mkdir -p /data/ftpdata/admin            # 虚拟用户的宿主目录需要预先创建
    useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser
    chmod 755 /data/ftpdata/
    ll /data/ftpdata/ -d

    5)配置完成刷新配置信息,进行测试

    service vsftpd reload

    4.常见报错处理

    错误现象1:文件显示上传成功,刷新就是不显示。

    报错分析:

    1)检查发现上传的文件权限为600,是上传文件权限设置问题

    解决方法:修改虚拟用户权限配置

    local_umask=022 改为 anon_umask=022

    2)另外,在创建虚拟用户映射的ftp本地用户的时候,使用useradd创建的宿主目录权限默认为700

    这样,虽然上传文件的权限为644可读,文件夹755可读,但由于ftp的上层目录不可读,子目录也会受限

    解决方法:修改宿主目录的权限为755即可

    chmod 755 /data/ftpdata/

    5.附:防火墙配置

    如果ftp被动模式用到防火墙,可以参考以下配置

    iptables -I INPUT -p tcp --dport 21 -j ACCEPT          #FTP连接端口
    iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT      #pasv模式下的随机端口
    iptables-save >/etc/sysconfig/iptables              #保存防火墙配置
    
    systemctl restart iptables.service
    systemctl restart vsftpd.service

    ======== 完毕,呵呵呵呵 ========

  • 相关阅读:
    java.io.Serializable浅析
    SSH和SSM的区别
    [转]github详细教程
    GITHUB的使用
    常用端口-小结
    DNS的解析原理
    windows快捷键-小结
    ip地址0.0.0.0是什么意思
    windows插件框架下载地址
    redis和mongodb
  • 原文地址:https://www.cnblogs.com/tssc/p/9582780.html
Copyright © 2011-2022 走看看