• 【E20200102-1】centos 7 下vsftp的安装和配置


    一、准备工作

    1.1、服务器准备

    • 操作系统:centos 7.x
    • 关闭防火墙(firewall/iptables)和SELinux

    参见笔记《【E20200101-1】Centos 7.x 关闭防火墙(firewall)和SELinux》

    • 更新服务器(不含内核)
    # yum --exclude=kernel* update
    
    • 安装好用的文本工具(nano)
    # yum -y install nano
    

    1.2、理解“Port模式(主动模式)和Pasv模式(被动模式)”的概念

    Port模式(主动模式):

    当FTP服务器配置的是Port模式:那么【客户端C】会在登入【服务端S】后发送一条命令告诉【服务端S】(“客户端C”在本地打开了一个端口N在等着“服务端S”进行数据连接),当【服务端S】收到【客户端C】发来的信息后 就会向【客户端C】打开的端口N进行连接,并通过端口N提供数据服务。

    Pasv模式(被动模式):

    当FTP服务器配置的是Pasv模式,那么【客户端C】会在登入【服务端S】后【服务端S】会发信息给【客户端C】(“服务端S”在服务器上打开了一个端口M在等着“客户端C”进行数据连接),当【客户端C】收到【服务端S】发来的信息后,就会向【服务端S】打开的端口M进行连接,并通过端口N提供数据服务。

    二、安装vsftp

    2.1、yum安装vsftp

    yum -y install vsftpd
    

    2.2、启动服务

    systemctl start vsftpd.service
    

    三、配置vsftp

    3.1、主要配置文件默认地址

    vsftp主要配置文件默认地址(可以通过vsftpd另外指定)

    /etc/vsftpd/vsftpd.conf
    

    其他常用配置文件地址可以在vsftpd.conf配置中指定,以下为vsftpd: version 3.0.2默认配置信息

    #定义不能跳出用户主目录的文件
    chroot_list_file=/etc/vsftpd/chroot_list  
    #定义限制/允许用户登录的文件
    userlist_file=/etc/vsftpd/user_list  
    #定义登录信息文件的位置
    banner_file=/etc/vsftpd/banner  
    #禁止使用的匿名用户登陆时作为密码的电子邮件地址  
    banned_email_file=/etc/banned_emails  
    #日志文件位置
    xferlog_file=/var/log/vsftpd.log   
    #目录信息文件
    message_file=.message     
    

    3.2、修改vsftpd.conf配置文件

    配置文件路径

    /etc/vsftpd/vsftpd.conf
    

    备份一份配置文件

    # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 
    

    使用nano文本编辑器修改配置文件

    # nano /etc/vsftpd/vsftpd.conf
    

    使用一下内容替换原有配置文件

    ############允许本地用户登入,拒绝匿名登入#####################
    
    #控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
    #anonymous_enable=YES/NO(YES)
    anonymous_enable=NO
    
    #控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许;
    #local_enable=YES/NO(YES)默认值为YES;
    local_enable=YES
    
    #设置本地用户登入者新增或上传档案时的 umask (匿名用户的掩码)值;
    #如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644
    #默认值为077 对应新建档案的对应权限为700;
    local_umask=022
    
    ############设置增、删、改、查权限###################
    
    #是否允许登陆用户有写权限。属于全局设置,默认值为YES;
    #write_enable=YES/NO(YES)默认值为YES;
    write_enable=YES
    
    #是否将所有用户限制在主目录,YES为启用 NO禁用;
    #在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的;
    #chroot_local_user=YES/NO (NO) 默认值为NO;
    chroot_local_user=YES
    
    ##用于指定用户列表文件中的用户不允许切换到上级目录;
    #chroot_list_enable=YES/NO (NO) 默认值为NO;
    chroot_list_enable=YES
    
    #是否限制在“主目录”下的用户名单文件地址;
    #当chroot_list_enable=YES(默认值为NO)时生效;
    #至于是“限制名单”还是“排除名单”,这取决于chroot_local_user的值;
    #当chroot_local_user=YES时,该文件里的用户作为“例外”不做限制;
    #当chroot_local_user=NO时,该文件里的用户作为“例外”受到限制;
    chroot_list_file=/etc/vsftpd/chroot_list
    
    #从2.3.5之后,vsftpd增强了安全检查;
    #如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!
    #如果检查发现还有写权限,就会报该错误。
    #要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限;
    #注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列项
    allow_writeable_chroot=YES
    
    #############虚拟用户配置:配置成使用本地用户相同的权限###############
    
    #默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配置
    #虚拟用户使用PAM认证方式。
    #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
    pam_service_name=vsftpd
    
    #设定启用虚拟用户功能;
    #guest_enable= YES/NO(NO)默认值为NO。
    guest_enable=YES
    
    #这里用来映射虚拟用户。默认值为ftp。
    #指定虚拟用户映射的宿主用户
    #也可以指定虚拟用户的宿主用户为apache/nginx运行账户,可以避免很多权限设置问题
    guest_username=nginx
    
    #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限;
    #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。
    #virtual_use_local_privs=YES/NO(NO)默认情况下此参数是关闭的(NO)。
    virtual_use_local_privs=YES
    
    #设定虚拟用户个人Vsftp的配置文件存放路径;
    #也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件;
    #需要注意的地方就是这些配置文件名必须和虚拟用户名相同;
    user_config_dir=/etc/vsftpd/vuser_conf
    
    ############配置日志#############
    
    #开启日记功能
    xferlog_enable=YES
    #使用标准格式
    xferlog_std_format=YES 
    #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用
    log_ftp_protocol=NO 
    
    ###############端口与主被动配置:配置成Pasv模式(被动模式)##########
    
    #ftp服务监听端口
    listen_port=21
    
    #设置开启Pasv模式(被动模式)
    #pasv_enable=YES 
    
    #设置Pasv模式(被动模式)数据连接端口范围从 10060~10065
    pasv_min_port=10060
    pasv_max_port=10065
    
    ###############时间相关配置################## 
    
    #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
    use_localtime=YES
    
    #Pasv模式(被动模式)请求超时
    accept_timeout=5   
    
    #Port模式(主动模式)连接超时 
    connect_timeout=10 
    
    #空闲等待时长
    idle_session_timeout=120  
    
    #数据连接超时时间
    data_connection_timeout=120
    

    3.3、创建虚拟账户映射的宿主用户

    这里要注意宿主用户对于ftp主目录的属主权限和读写权限

    //创建nginx用户并添加到ftp组
    # useradd -g ftp -M -d /data/vsftpd -s /sbin/nologin nginx
    //设置用户 nginx 的密码
    # passwd nginx
    //创建ftp主目录
    # mkdir /data/vsftpd
    //把主目录 /data/vsftpd 的所有权给nginx账号和ftp组
    # chown -R nginx:ftp /data/vsftpd
    

    3.4、创建虚拟用户清单文件

    使用nano文本编辑器创建虚拟用户文件

    # nano /etc/vsftpd/vuser_passwd
    
    # 编辑虚拟用户名单文件内容;
    # 第奇数行为账号,偶数行为密码;
    #注意:不能使用系统保留的用户名,例如root
    ftp1
    12345678
    ftp2
    12345678
    

    3.5、生成虚拟用户数据文件

    //使用db_load命令生成vsftpd的认证文件,将用户信息文件转换为数据库并使用hash加密:
    # db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
    //修改数据库文件权限
    # chmod 600 /etc/vsftpd/vuser_passwd.db
    

    数据库生成后最好清空该文本文件,并在安全的地方记录用户名和密码;

    如果用户账号有所变化,需要重新生成虚拟用户数据文件

    3.6、为各虚拟用户建立独立的配置文件

    这里以使用nano文档编辑工具为虚拟用户ftp1建立独立的配置文件为例

    //建立虚拟用户个人vsftp的配置文件目录,路径需要vsftpd.conf中配置的路径一致
    # mkdir /etc/vsftpd/vuser_conf 
    //创建并编辑虚拟用户ftp1的配置文件
    # nano /etc/vsftpd/vuser_conf/ftp1
    

    虚拟用户ftp1的配置文件内容如下

    #ftp1虚拟用户独立配置文件
    
    #登入时所在目录
    local_root=/home/vsftpd/ftp1 用户登入时,
        
    #是否允许登陆用户有写权限。属于全局设置,默认值为YES;
    #这里可以直接使用全局配置而无需独立配置,除非是和全局配置不一样
    #write_enable=YES/NO(YES)默认值为YES;
    #write_enable=YES
        
    ########### 访问权限配置#########################
    #只有当vsftpd.conf中virtual_use_local_privs=NO 时以下配置生效
    #virtual_use_local_privs配置说明如下
    #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限;
    #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。
    #virtual_use_local_privs=YES/NO(NO)默认情况下此参数是关闭的(NO)。
    ################################################  
        
    # 是否只读,不能下载
    # anon_world_readable_only=(YES/NO)
    anon_world_readable_only=NO
        
    #如果设为YES,则允许匿名登入者有上传文件(非目录)的权限;
    #只有全局的write_enable=YES(默认YES)时,此项才有效;
    #当然,匿名用户必须要有对上层目录的写入权。默认值为NO;
    anon_upload_enable=YES 
            
    #如果设为YES,则允许匿名登入者有新增目录的权限
    #只有全局的write_enable=YES(默认YES)时,此项才有效;
    #当然,匿名用户必须要有对上层目录的写入权。
    #anon_mkdir_write_enable=YES/NO(NO)默认值为NO。
    anon_mkdir_write_enable=YES
        
    #如果设为YES,则允许匿名登入者拥有上传或者建立目录之外的权限,譬如删除或者重命名。
    #如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;
    #如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。
    #anon_other_write_enable=YES/NO(NO)默认值为NO。
    anon_other_write_enable=YES
    

    3.7、创建用户目录

    根据拟用户独立配置文件中配置的路径建立用户目录

    # mkdir -p /home/vsftpd/ftp1
    

    3.8、生成虚拟用户的PAM文件(重要)

    这里的pam文件路径是由vsftpd.conf中的【pam_service_name=vsftpd】配置
    默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配置
    如果没设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。

    //进入pam.d目录
    # cd /etc/pam.d/
    //备份vsftpd文件
    # cp vsftpd vsftpd.bak 
    

    修改vsftpd文件内容

    1. 加入第三和第四行;
    2. 下面的全部注释掉;
    #%PAM-1.0
    #注意下面是64位操作系统,如果是32位的话lib64需要改成lib
    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
    
    #session    optional     pam_keyinit.so    force revoke
    #auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    #auth       required    pam_shells.so
    #auth       include     password-auth
    #account    include     password-auth
    #session    required     pam_loginuid.so
    #session    include     password-auth
    

    至此vsftp已经安装并配置好了 nice~

    四、服务运维

    //重启服务
    # systemctl restart vsftpd.service  
    //启动服务
    # systemctl start vsftpd.service    
    //服务状态查看
    # systemctl status vsftpd.service   
    

    Eword 原创学习笔记
    文档编号:E20200102-1
    文档标签:Centos、vsftp、ftp
    转载请注明出处

  • 相关阅读:
    javascript 字符串与正则
    微信小程序 实现三级联动-省市区
    VUE图片懒加载-vue lazyload插件的简单使用
    移动端使用mint-ui loadmore实现下拉刷新上拉显示更多
    vue-cli创建的项目中引入第三方库报错 'caller', 'calle', and 'arguments' properties .....报错问题
    js判断两个数组是否相等
    234回文链表
    剑指 Offer 22. 链表中倒数第k个节点
    返回倒数第 k 个节点
    leetcode 179.最大数
  • 原文地址:https://www.cnblogs.com/shylock/p/E20200102-1.html
Copyright © 2020-2023  润新知