zoukankan      html  css  js  c++  java
  • ftp相关

    一、安装

    yum install vsftpd -y

    二、配置vsftpd.conf

    先备份一个配置文件,然后再修改,注意所有配置行尾不能有空格,否则启动ftp会报错,提示不识别参数

    基本配置:

    anonymous_enable=no  #禁止匿名登录
    local_enable=YES     #允许本地账户登录
    write_enable=YES     #允许本地账户写权限
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES    #开启日志
    connect_from_port_20=YES  #表面vsftp使用主动模式
    xferlog_file=/var/log/vsftp  #日志文件
    xferlog_std_format=YES
    chroot_local_user=YES    #将所有用户限制在主目录,YES为启用 NO禁用   见注1
    allow_writeable_chroot=YES #拥有写权限
    local_root=/data1/vsftp/data  #ftp主目录位置,默认为各个用户的home目录
    
    chroot_list_enable=YES  #是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
    chroot_list_file=/etc/vsftpd/chroot_list
    userlist_enable=YES #启用user_list文件  见注2
    listen=YES pasv_enable=NO pam_service_name=vsftpd  tcp_wrappers=YES

    注1:

    chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
    chroot_list_enable #是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
    chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!

    对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:

    注2:

    vsftpd有两个默认存放用户名单的文件(默认在/etc/vsftpd/ 目录下),来对访问FTP服务的用户身份进行管理和限制。vsftpd会分别检查两个配置文件,只要是被任何一个文件所禁止的用户,FTP访问到本机的请求都会被拒。

     user_list:可以作为用户白名单,或者是黑名单,或者无效名单。完全由userlist_enable和userlist_deny这两个参数决定。

     ftpusers:只能是用户黑名单,不受任何参数限制。

    决定user_list文件性质的参数 userlist_enable和userlist_deny

    userlist_enable=YES   userlist_deny=YES  启用user_list文件,但文件是黑名单,拒绝文件中的用户FTP访问
     
    userlist_enable=YES   userlist_deny=NO   启用user_list文件,但文件是白名单,拒绝除文件中的用户外的用户FTP访问
     
    userlist_enable=NO   userlist_deny=YES/NO  无效名单,表示没有对任何用户限制FTP访问

    三、新增虚拟用户

      1、修改vsftpd.conf配置文件,增加虚拟用户相关的配置

    pam_service_name=vsftpd #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名
    guest_enable=YES     #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。
    user_config_dir= /etc/vsftpd/vmuser_conf #指定每个虚拟用户账号配置目录

     2、然后创建虚拟用户目录

    mkdir  /etc/vsftpd/vmuser_conf

    3、创建虚拟用户文件,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占用一行,密码占一行,且奇数行为用户名,偶数行为密码。如下:

    vim /etc/vsftpd/vmuser_list
    #虚拟用户列表
    test test123

    这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:

    db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db

    4、为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

    我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件,如下图:

    主要是注销原有的配置并增加如下俩行:

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

    auth是指对用户的用户名口令进行验证。

    accout是指对用户的帐户有哪些权限哪些限制进行验证。

    再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

    注意该函数会根据系统的位数而所在位置不同。

    如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so
    如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so
     
    最后db=/etc/vsftpd/vmuser_list则指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是/etc/vsftpd/login.db文件。
     
    注意:db=/etc/vsftpd/vmuser_list格式是这样的,去掉.db后缀。

    5、虚拟用户权限配置

    PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vmuser_conf目录下,并创建test文件。

    注意该文件名称一定要与vmuser_list中的虚拟用户要对应。比如现在vmuser_list文件有test用户,那么在 /etc/vsftpd/vmuser_conf目录下创建一个文件名为test的文件。设置权限有三种方法,

    1、设置虚拟用户和本地用户有相同的权限,这种无需刻意修改ftp目录权限

    [root@test-03 vsftpd]# cat  /etc/vsftpd/vmuser_list   
    #虚拟用户列表
    test test123
    [root@test
    -03 vsftpd]# vim /etc/vsftpd/vmuser_conf/test local_root=/data1/vsftp/data #虚拟用户登录到ftp时的默认目录 virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限 guest_username=www #设置虚拟用户对应的系统用户为www,www对/data1/vsftp/data有什么权限,虚拟用户就有什么权限
    anon_umask=022

    test虚拟用户,故不需要事先创建系统用户。

    2、也可以单独配置权限,但这种单独配置权限,需要给ftp目录/data1/vsftp/data赋权为777

    chmod -R 777  /data1/vsftp/data

    然后编辑用户权限文件  /etc/vsftpd/vmuser_conf/test 

    local_root=/data1/vsftp/data
    write_enable=YES              #开启写权限
    anon_umask=022                #
    anon_world_readable_only=YES  #用户可以浏览目录和下载文件  
    anon_upload_enable=YES        #上传权限
    anon_mkdir_write_enable=YES   #创建目录权限
    anon_other_write_enable=YES   #修改文件名和删除权限

    3、可以设置虚拟用户和本地用户有相同的权限,但用参数限制详细权限,这种就不用设置ftp目录权限是777了,这个方法最安全,推荐此方法。

    local_root=/data1/vsftp/data
    virtual_use_local_privs=YES
    guest_username=www
    anon_umask=022
    
    write_enable=NO  #禁止写入
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=NO #禁止
    anon_other_write_enable=NO

    四、启动

    systemctl start vsftpd  && systemctl enable vsftpd 

    五、客户端登录

    win ,下载ftp客户端,我用的是FileZilla Client

     六、添加新用户

    1、在vmuser_list 添加新用户账户密码,记住奇数行账户  偶数行密码

    2、加密文件

    db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db

    3、在user_list添加一行  内容为新用户,这是允许新用户可以访问ftp

    4、在vmuser_conf下添加文件,文件名就是用户名,内容为相关权限控制

    5、重启ftp即可

    七、其他知识

    1、ftp主动模式及被动模式

    默认为主动模式,如若修改成被动模式,

    pasv_enable=YES
    pasv_min_port=3000
    pasv_max_port=3999
    pasv_promiscuous=YES

    工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

    被动模式:

    PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

  • 相关阅读:
    解决Extjs分页工具条Ext.PagingToolbar无法换页问题 子曰
    使用“动软代码生成器”需要注意的问题 子曰
    格式化extjs DateField 的值 子曰
    构造extjs两级联动comBox 子曰
    SQLServer数据库设计表和字段(转) 子曰
    extjs 中取值的方式 子曰
    extjs中的控件无法正常显示 子曰
    extjs表单中的下拉框(comobobox)手动添加空选项 子曰
    C++基础学习笔记
    dhl:弹出div层,可关闭可移动
  • 原文地址:https://www.cnblogs.com/zphqq/p/11820686.html
Copyright © 2011-2022 走看看