• FTP服务—三种登录类型的配置方法



    前言
    FTP 是File Transfer Protocol(文件传输协议)的英文简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

    一般在各种linux的发行版中,默认带有的ftp软件是vsftp,我们需要利用相关命令来开启安装ftp服务器,然后再在vsftpd.conf中进行相关配置,下面我来介绍在Linux中vsftpd安装与配置增加用户的方法。

    知识链接关于vsftpd服务配置讲解

    一、部署

    部署环境:Centos 7

    • 检查是否已经安装vsftpd,如果已经安装,会显示版本号
    rpm -qa | grep vsftpd 
    
    • 安装
    yum install vsftpd  ftp db4 db4-utils pam* libcap libcap-devel tcp_wrappers tcp_wrappers-devel -y 
    

    二、配置vsftpd

    cp -fr /etc/vsftpd/vsftpd.conf{,.bak}
    cp -fr /etc/pam.d/vsftpd{,.default}
    

    1、匿名用户登录配置

    匿名登陆只能通过2个用户(默认:FTP 和anonymous)进行登陆

    • 创建匿名登录后的使用者
      匿名用户参数:ftp_username=anontest
    useradd anontest -s /sbin/nologin -d /data/ftp/anontest
    chmod 755 /data/ftp/anontest
    
    • 修改配置文件
    # 打开匿名用户模式
    anonymous_enable=YES
    ## 打开本地用户登录
    local_enable=YES
    ## 打开全局写权限
    write_enable=YES
    ## 系统用户新增或上传档案时的umask值
    #local_umask=022
    # 若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO
    no_anon_password=YES
    # 定义匿名登入的使用者名称。默认值为ftp
    ftp_username=anontest
    # 使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限
    #anon_root=/data/ftp/anontest
    anon_root=/data/ftp
    # 如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO
    anon_upload_enable=YES
    # 开启匿名用户创建目录的权限
    anon_mkdir_write_enable=YES
    # 开启匿名用户可以删除目录和文件
    # (如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)
    anon_other_write_enable=YES
    # 开启匿名用户下载权限
    anon_world_readable_only=YES
    # 设置匿名用户可以下载自己上传的文件:新建的目录 权限是755,文件的权限是 644
    # 设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO
    chown_uploads=NO
    # 设置匿名用户上传文件(非目录)的属主名。建议不要设置为root
    chown_username=anontest
    # 设置匿名登入者新增或上传档案时的umask值。
    anon_umask=022
    # 是否显示目录消息
    dirmessage_enable=YES
    # 是否让系统自动维护上传和下载的日志文件
    xferlog_enable=YES
    # 是否启用端口20进行FTP数据连接请求
    connect_from_port_20=YES
    # 设定系统维护记录FTP服务器上传和下载情况的日志文件
    xferlog_file=/var/log/vsftpd.log
    # 开启日志功能(记录删除、下载、删除所有动作)
    log_ftp_protocol=yes
    # 是否以标准xferlog的格式书写传输日志文件
    xferlog_std_format=no
    xferlog_enable=yes
    #standalone模式 (must config)
    # 设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制
    # 是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
    listen=YES
    listen_port=666
    #listen_ipv6=YES
    # 被动模式传输
    pasv_enable=YES
    pasv_promiscuous=YES
    pasv_min_port=12351
    pasv_max_port=12551
    # 列出与vsftpd相关的pam文件
    pam_service_name=vsftpd
    # 是否启用禁止登录用户名单
    userlist_enable=YES
    # 是否支持tcp_wrappers
    tcp_wrappers=NO
    # 设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
    max_clients=0
    # 设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效
    max_per_ip=0
    # 设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效
    #listen_address=IP地址
    
    

    2、系统用户登录配置

    以下配置可允许本地用户及虚拟用户的登录访问

    知识链接关于vsftpd服务配置讲解

    • 修改配置文件
    #允许匿名访问
    anonymous_enable=NO
    #允许本地用户登录
    local_enable=YES
    #设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录
    local_root=/data/ftp
    #是否允许登陆用户有写权限
    write_enable=YES
    #设置本地用户的文件掩码022
    local_umask=022
    
    #是否允许匿名用户上传。
    #anon_upload_enable=YES
    #是否允许匿名用户建立目录。
    #anon_mkdir_write_enable=YES
    
    #是否显示目录消息
    dirmessage_enable=YES
    #是否让系统自动维护上传和下载的日志文件
    xferlog_enable=YES
    #是否启用端口20进行FTP数据连接请求
    connect_from_port_20=NO
    
    #设定系统维护记录FTP服务器上传和下载情况的日志文件
    xferlog_file=/var/log/vsftpd.log
    
    #开启日志功能(记录删除、下载、删除所有动作)
    log_ftp_protocol=yes
    #是否以标准xferlog的格式书写传输日志文件
    xferlog_std_format=no
    xferlog_enable=yes
    
    #禁止域名反向解析,解决登录慢的问题
    reverse_lookup_enable=NO
    #是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
    listen=YES
    #修改默认端口21,提高安全性
    listen_port=666
     
    #被动模式传送
    pasv_enable=YES
    pasv_promiscuous=YES
    #设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意,设置50000-60000,将有助于安全性的提高
    pasv_min_port=12351
    pasv_max_port=12551
     
    #虚拟用户使用PAM认证方式;设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
    pam_service_name=vsftpd
     
    #(用户的访问控制可以通过user_list和ftpusers(ftpuser不受任何配制项的影响!它总是有效,它是一个黑名单)文件来实现)
    #控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行
    userlist_file=/etc/vsftpd/user_list
    
    #userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
    #当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
    #当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
    #当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
    # 是否使userlist这个文件生效
    userlist_enable=YES
    #设置是否阻扯user_list文件中的用户登录FTP服务器
    userlist_deny=YES
     
    #是否使用tcp_wrappers作为主机访问控制方式。
    tcp_wrappers=NO
     
    #指定用户独立的配置文件存放目录
    user_config_dir=/etc/vsftpd/vusers_dir
    
    #匿名/本地用户传输速率(单位:K/S)
    anon_max_rate=30000000
    local_max_rate=30000000
    use_localtime=YES
    
    #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到主目录之外的)
    chroot_local_user=NO
    
    #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
    chroot_list_enable=YES
    #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
    chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
    
    #从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误#要修复这个错误可以用命令chmod a-w 去除主目录写权限,或者你可以在vsftpd的配置文件中增加下列两项中的一项
    allow_writeable_chroot=YES
    
    #禁用反向域名解析
    reverse_lookup_enable=NO
     
    #每个来源IP可建立多少ftp连接
    max_per_ip=0
     
    ##最多允许100个人同时使用FTP服务器
    max_clients=100
     
    ##设置客户端/数据连接超时时间
    idle_session_timeout=600
    data_connection_timeout=120
    #
    
    • 创建系统用户
    useradd local_one -s /sbin/nologin -d /data/ftp/local_one
    chmod 755 /data/ftp/local_one
    
    • 指定系统用户登录后的家目录

    如果使用系统用户登录,当用户数大于1时,通过默认vsftpd.conf来管理、限制用户权限的方法显然有些力不从心;
    因此通过配置文件参数--user_config_dir,将每个用户配置独立化可以解决上述问题。

    例:指定用户独立的配置文件存放目录:user_config_dir=/etc/vsftpd/vusers_dir

    mkdir -p /etc/vsftpd/vusers_dir
    touch  /etc/vsftpd/vusers_dir/local_one
    cat  >/etc/vsftpd/vusers_dir/local_one<<EOF
    #指定该用户的登陆目录
    local_root=/data/ftp/local_one
    EOF
    
    • 创建用户限制名单
    touch /etc/vsftpd/vsftpd.chroot_list
    

    3、虚拟用户登录配置

    • 修改配置文件:
    #允许匿名访问
    anonymous_enable=NO
    #允许本地用户登录
    local_enable=YES
    #设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录
    local_root=/data/ftp
    #是否允许登陆用户有写权限
    write_enable=YES
    #设置本地用户的文件掩码022
    local_umask=022
    
    #是否允许匿名用户上传。
    #anon_upload_enable=YES
    #是否允许匿名用户建立目录。
    #anon_mkdir_write_enable=YES
    
    #是否显示目录消息
    dirmessage_enable=YES
    #是否让系统自动维护上传和下载的日志文件
    xferlog_enable=YES
    #是否启用端口20进行FTP数据连接请求
    connect_from_port_20=NO
    
    #设定系统维护记录FTP服务器上传和下载情况的日志文件
    xferlog_file=/var/log/vsftpd.log
    
    #开启日志功能(记录删除、下载、删除所有动作)
    log_ftp_protocol=yes
    #是否以标准xferlog的格式书写传输日志文件
    xferlog_std_format=no
    xferlog_enable=yes
    
    #禁止域名反向解析,解决登录慢的问题
    reverse_lookup_enable=NO
    #是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
    listen=YES
    #修改默认端口21,提高安全性
    listen_port=666
     
    #被动模式传送
    pasv_enable=YES
    pasv_promiscuous=YES
    #设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意,设置50000-60000,将有助于安全性的提高
    pasv_min_port=12351
    pasv_max_port=12551
     
    #虚拟用户使用PAM认证方式;设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
    pam_service_name=vsftpd
     
    #(用户的访问控制可以通过user_list和ftpusers(ftpuser不受任何配制项的影响!它总是有效,它是一个黑名单)文件来实现)
    #控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行
    userlist_file=/etc/vsftpd/user_list
    
    #userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
    #当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP
    #当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
    #当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
    # 是否使userlist这个文件生效
    userlist_enable=YES
    #设置是否阻扯user_list文件中的用户登录FTP服务器
    userlist_deny=YES
     
    #是否使用tcp_wrappers作为主机访问控制方式。
    tcp_wrappers=NO
     
    #启用虚拟用户。默认值为NO
    guest_enable=YES
     
    #这里用来映射虚拟用户。默认值为ftp。
    #guest_username=vsftpd
    guest_username=virtual
     
    #指定用户独立的配置文件存放目录
    user_config_dir=/etc/vsftpd/vusers_dir
    
    #匿名/本地用户传输速率(单位:K/S)
    anon_max_rate=30000000
    local_max_rate=30000000
    use_localtime=YES
    
    #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到主目录之外的)
    chroot_local_user=NO
    
    #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
    chroot_list_enable=YES
    #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
    chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
    
    #从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误#要修复这个错误可以用命令chmod a-w 去除主目录写权限,或者你可以在vsftpd的配置文件中增加下列两项中的一项
    allow_writeable_chroot=YES
    
    #禁用反向域名解析
    reverse_lookup_enable=NO
     
    #每个来源IP可建立多少ftp连接
    max_per_ip=0
     
    ##最多允许100个人同时使用FTP服务器
    max_clients=100
     
    ##设置客户端/数据连接超时时间
    idle_session_timeout=600
    data_connection_timeout=120
    #
    

    虚拟用户不是系统中存在的,因此比本地用户安全,具体步骤如下:

    1. 创建虚拟用户名单文件

    touch  /etc/vsftpd/vftpuser.txt
    

    加入用户的用户名和口令信息。格式很简单:“奇数行用户名,偶数行口令”。

    hyywnobody
    123456
    

    2. 生成虚拟用户口令认证文件

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

    db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
    chmod 600 /etc/vsftpd/vftpuser.db
    

    3. 创建FTP根目录及虚拟用户映射的系统用户

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

    useradd virtual -s /sbin/nologin
    mkdir -p /data/ftp/
    chmod -Rf 755 /data/ftp
    

    4. 建立支持虚拟用户的PAM认证文件

    mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.back
    cat /etc/pam.d/vsftpd
    

    参数db用于指向刚刚生成的vftpuser.db文件,但不要写后缀
    centos7系列:

    auth       required     pam_userdb.so db=/etc/vsftpd/vftpuser
    account    required     pam_userdb.so db=/etc/vsftpd/vftpuser
    

    centos6系列:

    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
    

    5. 虚拟用户访问权限设置

    虚拟用户的权限默认不能上传、创建、修改文件
    如果希望用户能够访问或管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了

    首先,编辑vsftpd.conf中的配置指定用户独立的配置文件存放目录:

    user_config_dir=/etc/vsftpd/vusers_dir
    

    创建用户配置文件存放目录

    mkdir -p /etc/vsftpd/vusers_dir
    

    创建以用户名命名的配置文件

    touch /etc/vsftpd/vusers_dir/hyywnobody
    

    配置用户权限,常用组合:

    • 浏览+上传+下载
    #指定该用户的登陆目录
    local_root=/data/ftp/hyywnobody
    anon_umask=022
    #yes=禁止浏览;no=只读,下载
    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/ftp/hyywnobody
    anon_world_readable_only=no
    
    • 可上传
    local_root=/data/ftp/hyywnobody
    write_enable=yes
    anon_upload_enable=yes
    

    根据虚拟用户配置文件中设置的local_root,创建虚拟用户主目录并更改权限

    mkdir -p /data/ftp/hyywnobody
    chown virtual.virtual /data/ftp/hyywnobody
    

    6. 重启vsftpd服务

    systemctl restart vsftpd
    

    4、登录验证

    略...

     

  • 相关阅读:
    HTML meta viewport属性说明(mark)
    利用css样式画各种图形初步、进阶、高级(一)
    sql where 1=1和 0=1 的作用
    java日志文件log4j.properties配置详解
    VB面向对象编程
    怎么上传代码?
    Spring中部署Activiti流程定义的三种姿势
    不会使用Spring的配置文件,赶紧把这个甩给他
    一起玩转玩转LiteOS组件:Opus
    带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN
  • 原文地址:https://www.cnblogs.com/sunhongleibibi/p/12228985.html
Copyright © 2020-2023  润新知