灌水唠嗑区
其他
文章

FTP文件服务器配置

发表于2024-03-05 15:33:2349次浏览0个评论
  • FTP概述
     
    • vsftpd(very secure FTP daemon)是Linux操作系统下的一款小巧轻快、安全易用的FTP服务器软件。
       
    • FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,默认情况下FTP协议使用 20和21端口,20用于传输数据,21用于传输控制信息。支持以下两种工作模式:
       
      • 主动模式(PORT):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。数据传输端口就是20;
         
      • 被动模式(PASV):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。使用哪个端口要服务器端和客户端协商决定
         
    • FTP支持以下三种认证模式:
       
      • 匿名用户模式:
         
        • 任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用来传输不重要的公开文件,不推荐在生产环境中使用。
           
        • 匿名用户使用的登陆名为ftp或anonymous,口令为空;
           
        • 匿名用户不能离开匿名用户家目录/var/ftp,且默认只能下载不能上传。
           
        • pwd命名查看的目录是/,这个目录是/var/ftp,不是linux 根目录/,
           
      • 本地用户模式:
         
        • 通过Linux操作系统本地用户验证登录权限,相较于匿名用户模式更安全。
           
        • vsftp的本地用户模式密码校验是使用系统的本地用户的 /etc/passwd 和/etc/shadow两个文件来检验的
           
      • 虚拟用户模式:
         
        • 通过虚拟用户验证登录权限,虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源。该模式相较于其他两种模式更加安全,适用于对服务器的数据有较高的安全性要求场景。推荐使用
           
  • FTP服务端安装配置
     
    • rpm -qa |grep vsftpd 检查是否安装vsftpd
       
    • yum install vsftpd -y 安装vsftpd
       
    • yum install ftp --安装ftp客户端
       
    • ftp主要有3个配置文件,位于/etc/vsftpd/目录下,分别是:
       
      • vsftpd.conf —vsftpd的主配置文件
         
      • ftpusers: 黑名单,该文件用来指定那些用户不能访问ftp服务器。
         
      • user_list: 白名单,指定的用户是否可以访问ftp服务器,通过vsftpd.conf文件中的userlist_deny的配置来决定配置中的用户是否可以访问,userlist_enable=YES ,userlist_deny=YES ,userlist_file=/etc/vsftpd/user_list 这三个配置允许文件中的用户访问FTP
         
    • vsftpd之chroot权限的设置有几种方法:
       
      • 1,直接在配置文件中添加:
         
        • allow_writeable_chroot=YES 所有的用户都将拥有chroot权限。都可以访问家目录外的目录
           
      • 2,所有用户都没有chroot权限,都限制在自己的家目录为根目录。
         
        • chroot_local_user=YES 
           
      • 3,可以自定义用户是否有chroot权限
         
        • chroot_local_user:用户是否限制在家目录
           
        • chroot_list_enable:是否启用例外名单,默认NO
           
        • chroot_list_file:例外名单文件
           
        • 示例:
           
          • chroot_local_user=NO
             
          • chroot_list_enable=YES 
             
          • chroot_list_file=/etc/vsftpd/chroot_list
             
          • 意思是:启用例外名单,除名单为/etc/vsftpd/chroot_list中用户以外的用户都只能访问用户家目录
             
  • FTP认证模式配置
     
    • 1、匿名用户模式
       
      • 去掉配置文件vsftpd.conf 里面以下注释#,重启服务:
         
        • anon_upload_enable=YES
           
        • anon_mkdir_write_enable=YES
           
        • 就可以完成匿名用户的配置,此时匿名用户既可以登录上传、下载文件。记得修改配置文件后需要重启服务
           
      • 配置文件如下:
         
        • 修改/var/ftp/pub目录属组权限,否则匿名用户无法上传文件
           
          • chmod ftp:ftp /var/ftp/pub
             
        • mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 备份配置文件
           
        • cat<<EOF>>/etc/vsftpd/vsftpd.conf
           
        • anonymous_enable=YES
           
        • local_enable=YES
           
        • write_enable=YES
           
        • local_umask=022
           
        • dirmessage_enable=YES
           
        • xferlog_enable=YES
           
        • connect_from_port_20=YES
           
        • xferlog_std_format=YES
           
        • listen=YES
           
        • pam_service_name=vsftpd
           
        • userlist_enable=YES
           
        • tcp_wrappers=YES
           
        • anon_upload_enable=YES #允许上传文件
           
        • anon_mkdir_write_enable=YES #允许新建文件夹
           
        • chroot_local_user=YES #
           
        • anon_other_write_enable=yes #允许删除文件
           
        • EOF
           
      • 登录测试
         
        • ftp 127.0.0.1(使用ftp或者anonymous,无需输入密码)
           
    • 本地用户模式
       
      • 这里特别要注意的是如果新建用户的时候设置了无登录权限
         
        • useradd zsk -s /sbin/nologin,需将/etc/pam.d/vsftpd文件中pam_shells.so替换为pam_nologin.so,否则ftp即使配置的在正确,也会无法登录的,报pam_nologin.so/530 Login incorrect。
           
      • 配置本地模式
         
        • 创建本地ftp用户cftp
           
          • groupadd ftpusers
             
          • useradd -g ftpusers -m -d /ftp/cftp -s /sbin/nologin cftp
             
          • echo '1001'| passwd --stdin cftp
             
          • mkdir -p /ftp/cftp
             
          • chown -R cftp:ftpusers /ftp/cftp 
             
          • chmod 755 /ftp/cftp 
             
        • 配置vsftp的PAM认证
           
          • 如果ftp用户无登录权限,即useradd zsk -s /sbin/nologin
             
          • 需将/etc/pam.d/vsftpd文件中pam_shells.so替换为pam_nologin.so,否则ftp即使配置的在正确,也会无法登录的,报pam_nologin.so/530 Login incorrect。
             
        • 配置本地模式
           
          • mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 备份配置文件
             
          • cat <<EOF>/etc/vsftpd/vsftpd.conf
             
          • anonymous_enable=NO
             
          • local_enable=YES
             
          • write_enable=YES
             
          • local_umask=022
             
          • dirmessage_enable=YES
             
          • xferlog_enable=YES
             
          • connect_from_port_20=YES
             
          • xferlog_std_format=YES
             
          • ascii_upload_enable=YES
             
          • ascii_download_enable=YES
             
          • ftpd_banner=Welcome to FTP service.
             
          • chroot_local_user=YES
             
          • chroot_list_enable=YES
             
          • chroot_list_file=/etc/vsftpd/chroot_list
             
          • allow_writeable_chroot=YES
             
          • listen=YES
             
          • #listen_ipv6=YES
             
          • pam_service_name=vsftpd
             
          • tcp_wrappers=YES
             
          • local_root=/ftp/cftp
             
          • userlist_enable=YES
             
          • userlist_deny=no
             
          • userlist_file=/etc/vsftpd/user_list
             
          • EOF
             
          • 注意:多个用户,使用不同目录时,可以参考虚拟用户配置
             
            • user_config_dir=/etc/vsftpd/vuser_conf
               
            • 配置不同用户的根目录和权限
               
    • 虚拟用户模式
       
      • 创建本地用户cftp
         
        • groupadd ftpuser
           
        • useradd -g ftpuser -M -d /ftp -s /sbin/nologin cftp
           
        • echo '1001' | passwd --stdin cftp
           
      • 建立虚拟用户及要访问的目录并设置相应的权限:
         
        • mkdir -p /ftp/cftp-1
           
        • mkdir -p /ftp/cftp-2
           
        • chown -R cftp:ftpuser /ftp
           
        • chmod -R 755 /ftp
           
        • 或者 chmod 700 /ftp/cftp-2
           
      • 创建虚拟账户密码信息文件(奇数行为用户名 ,偶数行为密码)
         
        • cat<<EOF>/etc/vsftpd/vuser_passwd.txt
           
        • cftp-1
           
        • 1001
           
        • cftp-2
           
        • 1002
           
        • cftp-3
           
        • 1003
           
        • EOF
           
      • 生成vsftpd 的db认证文件
         
        • db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/cftp.db
           
        • chmod 600 /etc/vsftpd/cftp.db
           
      • 建立虚拟用户所需的PAM配置文件(注意文件名与vsftpd配置文件中pam_service_name参数一致)--32位系统路径为/lib/security/pam_userdb.so
         
        • cat<<EOF>/etc/pam.d/vsftpd_vir
           
        • auth required pam_nologin.so
           
        • auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/cftp
           
        • account required /lib64/security/pam_userdb.so db=/etc/vsftpd/cftp
           
        • EOF
           
      • 对不同的虚拟用户设置不同的权限(注意文件名与虚拟用户名一致,local_root与前面创建的根目录一致)
         
        • 为虚拟用户建立单独的配置文件 
           
          • 在/etc/vsftpd/vuser_conf目录中可以为每个虚拟用户建立独立的配置文件,配置文件名称和用户名相同。
             
          • anon_world_readable_only=NO --表示用户可以浏览FTP目录和下载文件,YES理解比较复杂,建议设置NO即可
             
          • anon_upload_enable=YES --表示用户可以上传文件 
             
          • anon_mkdir_write_enable=YES --表示用户具有建立和删除目录的权利 
             
          • anon_other_write_enable=YES --表示用户具有文件改名和删除文件的权限 
             
          • 通过对以上配置项的组合设置,vsftpd可以为每个虚拟用户配置不同的FTP权限,用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。 
             
        • mkdir -p /etc/vsftpd/vuser_conf
           
        • cat<<EOF>/etc/vsftpd/vuser_conf/cftp-1
           
        • local_root=/ftp/cftp-1
           
        • write_enable=YES
           
        • anon_umask=022
           
        • anon_world_readable_only=NO
           
        • anon_upload_enable=YES
           
        • anon_mkdir_write_enable=YES
           
        • anon_other_write_enable=YES
           
        • EOF
           
        • cat<<EOF>/etc/vsftpd/vuser_conf/cftp-2
           
        • local_root=/ftp/cftp-1
           
        • write_enable=YES
           
        • anon_umask=022
           
        • anon_world_readable_only=NO
           
        • anon_upload_enable=YES
           
        • anon_mkdir_write_enable=YES
           
        • anon_other_write_enable=YES
           
        • EOF
           
        • 配置参数说明: 
           
          • 1.设置主配置文件 
             
            • 在vsftpd.conf配置文件中添加user_config_dir配置项,并设置用户配置文件的保存目录 
               
              • user_config_dir=/etc/vsftpd/vuser_conf
                 
            • 在上面的配置实例中,设置在/etc/vsftpd/vuser_conf目录中保存虚拟用户的配置文件
               
          • 2.建立用户配置文件目录 
             
            • 使用mkdir命令建立虚拟用户配置文件的保存目录 
               
            • mkdir /etc/vsftpd_user_conf
               
      • 修改vsftpd.conf主配置文件 
         
        • 1、禁用匿名账户 anonymous_enable=NO
           
        • 2、配置虚拟用户
           
          • #启用pam认证
             
          • pam_service_name=vsftpd_vir
             
          • #启用虚拟用户
             
          • guest_enable=YES
             
          • #虚拟用户映射本地操作系统用户cftp
             
          • guest_username=cftp
             
          • #虚拟用户与本地用户权限相同
             
          • virtual_use_local_privs=YES
             
          • #虚拟用户配置文件目录
             
          • user_config_dir=/etc/vsftpd/vuser_conf
             
        • 3、(可选)访问权限控制
           
          • 将用户目录限制为根目录(看不到家目录的其他目录)
             
          • allow_writeable_chroot=YES
             
          • # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录
             
          • chroot_local_user=NO
             
          • #是否启用chroot列表文件,写入文件中的用户将锁定家目录
             
          • chroot_list_enable=NO
             
          • #指定用户列表文件的文件路径
             
          • chroot list file=/etc/vsftpd/chroot_list
             
        • 参考配置
           
          • anonymous_enable=NO
             
          • local_enable=YES
             
          • write_enable=NO
             
          • local_umask=022
             
          • dirmessage_enable=YES
             
          • xferlog_enable=YES
             
          • connect_from_port_20=YES
             
          • xferlog_std_format=YES
             
          • ascii_upload_enable=YES
             
          • ascii_download_enable=YES
             
          • ftpd_banner=Welcome to FTP service.
             
          • chroot_local_user=YES
             
          • chroot_list_enable=YES
             
          • chroot_list_file=/etc/vsftpd/chroot_list
             
          • listen=NO
             
          • listen_ipv6=YES
             
          • pam_service_name=vsftpd_vir
             
          • userlist_enable=YES
             
          • tcp_wrappers=YES
             
          • use_localtime=YES
             
          • listen_port=21
             
          • idle_session_timeout=300
             
          • guest_enable=YES
             
          • guest_username=cftp
             
          • user_config_dir=/etc/vsftpd/vuser_conf
             
          • #allow_writeable_chroot=YES
             
          • data_connection_timeout=1
             
          • virtual_use_local_privs=YES
             
          • pasv_min_port=40000
             
          • pasv_max_port=40010
             
          • accept_timeout=5
             
          • connect_timeout=1
             
          • userlist_enable=YES
             
          • userlist_deny=no
             
          • userlist_file=/etc/vsftpd/user_list
             
    • vsftpd 服务器的其它主要设置 : 
       
      • 1 .最大传输速率设置: 
         
        • 设置匿名用户的最大传输率为20Kbps,修改/etc/vsftpd/vsftpd.conf 添加语句:
           
          • anon_max_rate=20000
             
        • 设置本地帐号最大传输率为1Mbps,修改/etc/vsftpd/vsftpd.conf 添加语句:
           
          • local_max_rate=1000000
             
      • 2 .服务器最大并发数和用户最大线程数设置: 
         
        • 例如设置服务器允许的最大并发数为99,而每个用户同一时段的最大并发线程数为5,修改/etc/vsftpd/vsftpd.conf 添加两行语句:
           
          • max_clients=99
             
          • max_per_ip=5
             
      • 3 .修改默认端口: 
         
        • 默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf 
           
        • 添加语句(例):listen_port=4449 该语句指定了修改后FTP服务器的端口号,应尽量大于4000,修改后访问
           
        • #ftp 192.168.57.2 4449 (需加上正确的端口号了,否则不能正常连接) 
           
      • 4 .设置用户组,增强FTP服务器安全性: 
         
        • 举例: 
           
          • #mkdir –p /home/try 递归创建新目录 
             
          • #groupadd try 新建组 
             
          • #useradd –g try –d /home/try try1 新建用户try1并指定家目录和属组 
             
          • #useradd –g try –d /home/try try2 新建用户try2并指定家目录和属组 
             
          • #useradd –g try –d /home/try try3 新建用户try3并指定家目录和属组 
             
          • #chown try1 /home/try 设置目录属主为用户try1 
             
          • #chown .try /home/try 设置目录属组为组try 
             
          • #chmod 750 /home/try 设置目录访问权限try1为7;try2、try3为5
             
          • 由于本地用户登录FTP服务器后进入自己主目录,而try1,try2 try3对主目录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建目录 ;try2ty3访问权限为下载,浏览,不能建目录和上传。实现了群组中用户不同访问级别,加强了对FTP服务器的分级安全管理。 
             
      • 5、常见的vsftpd日志解决方案如下:
         
        • xferlog_enable=YES ( 表明FTP服务器记录上传下载的情况) 
           
        • xferlog_std_format=YES (表明将记录的上传下载情况写在xferlog_file所指定的文件中,即xferlog_file选项指定的/var/log/xferlog文件中) 
           
        • xferlog_file=/var/log/xferlog 
           
        • dual_log_enable=YES (表明启用了双份日志,在用xferlog文件记录服务器上传下载情况的同时,vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况) 
           
        • vsftpd_log_file=/var/log/vsftpd.log 
           
  • 常见错误:
     
    • ftp连接报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
       
      • 原因:
         
        • 至2.3.5之后,vsftpd增强了安全检查,如果用户被限定在其主目录下,则该用户的主目录不能再具有写权限,如果检查发现还有写权限,就会报如上图红框部分的错误。
           
      • 解决办法(两种):
         
        • 第一种:去除用户主目录的写权限(chmod a-w “该用户主目录”)
           
        • 第二种:在/etc/vsftpd/vsftpd.conf文件中加入参数allow_writeable_chroot=YES(允许可写的chroot)
           

评论

登录后才可以发表评论