美文网首页Linux Troubleshooting
Linux FTP文件传输服务

Linux FTP文件传输服务

作者: yangqing | 来源:发表于2019-02-24 20:43 被阅读3次
    一、vsftpd服务基础
    1.1 FTP服务概述
    1. FTP连接及传输模式
    主动模式:服务器主动发起数据连接。 客户端向服务端的21端口建立ftp控制连接,传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接
    被动模式:服务器被动等待数据连接。首先有客户端向服务端的 21 端口建立ftp控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
    在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式。
    文本模式:又称为ASCII模式,一般只用于纯文本文件的传输。
    二进制模式:又称为Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序,图片等非纯文本字符的文件。
    
    2. FTP用户类型
    使用ftp客户端软件访问服务器,通常要用到一类特殊的用户账号,其用户名为ftp和anonymous,提供任意密码都可以通过服务器的建造这样的用户称为“匿名用户”。
    除了不需要密码验证的用户以外,ftp服务器还可以直接使用本机的系统用户账号来进行验证,这些用户通常被称为“本地用户”。匿名用户也有对应的本地系统用户账号“ftp”,但对于vsftpd服务来说,本地用户指的是除了匿名用户以外的其他系统用户。
    独立数据库文件中的ftp用户账号,通常被称为“虚拟用户”。
    
    3. FTP服务器软件的种类
        Windows系统中,常见的FTP服务器软件包括IIS、Serv-U等。Linux系统中,有proftpd、pureftpd、vsftpd等。vsftpd可以支持15000个用户并发连接。
    
    4. FTP客户端工具的种类
        图形化ftp客户端工具,Windows中常用:CuteFTP、FlashFXP、LeapFTP、Filezilla等。Linux中较常用的有gftp、kuftp等。
       下载工具:FlashGet、Wget等。
    1.2 vsftpd的配置文件
    1. 用户列表文件ftpusers和user_list
    ftpusers文件:此文件中列出的用户将禁止登录vsftpd服务器,不管该用户是否在user_list文件中出现。默认已包括root、bin、daemon等用于系统运行的特殊用户。
    user_list文件:此文件中包含的用户可能被禁止登录,也可能被允许登录,具体取决于主配置文件vsftpd.conf中的设置。当存在“userlist_enables=YES”的配置项时,user_list列表文件方可生效;若指定“userlist_deny=YES”,则仅禁止此列表中的用户登录;若指定“userlist_deny=NO”,则仅允许列表中的用户登录
    ftpusers文件相当于黑名单,为vsftpd服务器提供了一份进制登录的用户列表。
    
    2. 主配置文件vsftpd.conf
    作用范围    配置项及示例  含义说明
    匿名用户    anonymous_enable=YES    是否允许匿名访问
    anon_umask=022  设置匿名用户所上传文件的默认权限掩码值
    anon_root=/var/ftp  设置匿名用户的FTP根目录(缺省为/var/ftp)
    anon_upload_enable=YES  是否允许匿名用户上传文件
    anon_mkdir_write_enable=YES 是否允许匿名用户有其他写入权限,如对文件改名、覆盖及删除文件等。
    anon_max_rate=0 限制匿名用户的最大传输速率(0为无限制),单位为字节/秒
    本地用户    local_enable=YES    是否允许本地系统用户访问
    local_umask=022 设置本地用户所上传文件的默认权限掩码值
    local_root=/var/ftp 设置本地用户的FTP根目录(缺省为用户的宿主目录)
    chroot_local_user=YES   是否将FTP本地用户禁锢在宿主目录中
    local_max_rate=0    限制本地用户的最大传输速率(0为无限制),单位为字节/秒
    全局配置    listen=YES  是否以独立运行的方式监听服务
    listen_address=0.0.0.0  设置监听FTP服务的IP地址
    listen_port=21  设置监听FTP服务的端口号
    write_enable=YES    启用任何形式的写入权限(如上传、删除文件等)都需要开启此项
    ftpd_banner=FTP Server  欢迎信息:Welcome to this FTP server!
    download_enable=YES 是否允许下载文件(建立仅限于浏览、上传的FTP服务器时可将其设为“NO”)
    dirmessage_enable=YES   用户切换进入目录时显示 .message 文件(如果存在)的内容
    xferlog_enable=YES  启用xferlog日志,默认记录到/var/log/xferlog,指定:xferlog_file=/var/log/xferlog
    xferlog_std_format=YES  启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自己的日志格式
    connect_from_port_20=YES    允许服务器主动模式(从20端口建立数据连接)
    pasv_enable=YES 允许被动模式连接
    pasv_min_port=24500 设置用于被动模式的服务器最小端口号
    pasv_max_port=24600 设置用于被动模式的服务器最大端口号
    pam_service_name=vsftpd 设置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
    userlist_enable=YES 是否启动user_list用户列表文件,注:使user_list文件生效
    userlist_deny=YES   是否禁止user_list列表文件中的用户账号,注:YES禁止(NO允许)此列表用户登录
    max_clients=0   最多允许多少个客户端同时连接(0为无限制)
    max_per_ip=0    对来自同一个IP地址的客户端,最多允许多少个并发连接(0为无限时)
    tcp_wrappers=YES    是否启用tcp_wrappers主机访问控制
    二、基于系统用户的FTP服务
    2.1 匿名访问的FTP服务
    1. 准备匿名访问的FTP服务
        在/var/ftp/目录下创建一个文件:tar zcf /var/ftp/vsftpdconf.tar.gz /etc/vsftpd
        设置一个名为pub子文件夹,拥有写入权限:chown ftp /var/ftp/pub
    
    2.开放匿名用户配置,并启动vsftpd服务。允许上传、下载,禁止删除操作,如下:
    [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    local_enable=NO
    write_enable=YES
    #local_umask=022
    anon_umask=022
    anon_root=/var/ftp
    anon_upload_enable=YES
    anon_mkdir_write_enabled=YES
    hide_ids=YES
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=NO
    tcp_wrappers=YES
    2.2 用户验证的FTP服务
    1.基本的本地用户验证
    [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
    # ===============================================================
    # 如果为 NO 一般就是选择用 xinet 启动 ftp 服务
    listen=YES
    
    # 只监听来访问10.10.10.10(适用本机多网卡、多IP的情况)的FTP服务请求
    # listen_address=10.10.10.10
    
    # 禁止匿名用户登录
    anonymous_enable=NO
    
    # 启用本地用户能够登录 ftp
    local_enable=YES
    write_enable=YES
    local_umask=022
    
    # 欢迎信息
    ftpd_banner=Welcome to the FTP server !
    
    # 上传下载配置信息
    xferlog_enable=YES
    xferlog_file=/var/log/xferlog
    xferlog_std_format=YES
    
    # 启用默认端口
    connect_from_port_20=YES
    
    # 最多可连接的客户端数
    max_clients=10
    
    # 是否隐藏文件的所有者和组信息, YES: 当用户使用"ls -al"之类的指令时,
    # 在目录列表中所有文件的拥有者和组信息都显示为ftp. 默认为NO
    hide_ids=YES
    
    # 限制用户在自己的家目录之内
    chroot_local_user=YES
    
    # 启用不被 chroot 的使用者账号(启用跳出家目录配置文件)
    chroot_list_enable=YES
    # 不被 chroot 的使用者账号的列表文件(跳出家目录用户)
    chroot_list_file=/etc/vsftpd/chroot_list
    
    # 针对不同的用户做不同的配置,这个目录下都是以用户名作为文件名
    user_config_dir=/etc/vsftpd/vsftpd_user_conf
    # [root@localhost vsftpd]# cat vsftpd_user_conf/yq 
    # local_root=/home/yq
    
    # 限制某些用户的访问
    userlist_enable=YES
    userlist_deny=YES
    userlist_file=/etc/vsftpd/user_list
    
    pam_service_name=vsftpd
    pam_service_name=/etc/pam.d/vsftpd
    # ===============================================================
    
    2.允许user_list用户列表文件登录
    # 限制某些用户的访问
    userlist_enable=YES
    userlist_deny=NO
    userlist_file=/etc/vsftpd/user_list
    
    2.3 vsftpd服务的其他常用配置
    
    1.修改vsftpd服务的监听地址、端口
    listen=YES
    listen_address=10.10.10.10
    listen_port=2121
    
    2.允许使用FTP服务器的被动模式
    pasv_enable=YES
    pasv_min_port=24500
    pasv_max_port=24600
    
    3.限制FTP连接的并发数、传输速度
    max_clients=10
    max_per_ip=1
    anan_max_rate=50000
    local_max_rate=200000
    三、基于虚拟用户的FTP服务
    3.1 建立虚拟用户的账号数据库
    1.创建文本格式的用户名、密码列表
    [root@localhost ~]# cat /etc/vsftpd/vusers.list
    yq
    123
    jack
    123
    
    2.创建BerkeleyDB格式的数据库文件
    [root@localhost ~]# cd /etc/vsftpd/
    [root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db
    [root@localhost vsftpd]# file vusers.db 
    vusers.db: Berkeley DB (Hash, version 9, native byte-order)
    [root@localhost vsftpd]# chmod 600 vusers.*
    [root@localhost vsftpd]# ll vusers.*
    -rw------- 1 root root 12288 3月  10 19:31 vusers.db
    -rw------- 1 root root    16 3月  10 19:28 vusers.list
    
    3.添加虚拟用户的映射账号、创建FTP跟目录
    [root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
    [root@localhost ~]# chmod 755 /var/ftproot/
    3.2 为vsftpd服务添加虚拟用户支持
    1.为虚拟用户建立PAM认证文件
    [root@localhost ~]# cat /etc/pam.d/vsftpd.vu 
    #%PAM-1.0
    # 需要认证 auth
    auth    required    pam_userdb.so    db=/etc/vsftpd/vusers
    # 是否合法认证 account
    account    required    pam_userdb.so    db=/etc/vsftpd/vusers
    
    2.修改vsftpd配置,添加虚拟用户支持
    [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
    local_enable=YES                        需映射本地用户,所以启动此项
    write_enable=YES                        启动上传写入支持
    anon_umask=022                         指定上传权限掩码
    guest_enable=YES                       启动用户映射功能
    guest_username=virtual               指定映射的系统用户名称
    pam_service_name=vsftpd.vu     指定新的PAM认证文件
    
    3.为不用的虚拟用户建立独立的配置文件
    [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers_dir
    [root@localhost ~]# mkdir /etc/vsftpd/vusers_dir
    [root@localhost ~]# cd /etc/vsftpd/vusers_dir
    [root@localhost vusers_dir]# cat yq
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_max_rate=200000
    
    四、配置支持SSL加密传输的FTP
    4.1 生成SSL证书
    [root@localhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
    
    4.2 配置SSL
    #vim /etc/vsftpd/vsftpd.conf 
    ssl_enable=YES 
    allow_anon_ssl=NO 
    force_local_data_ssl=YES 
    force_local_logins_ssl=YES 
    ssl_tlsv1=YES 
    ssl_sslv2=YES 
    ssl_sslv3=YES 
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
    
    SSL参数含义
    ssl_enable=yes/no                        是否启用 SSL,默认为no
    allow_anon_ssl=yes/no                 是否允许匿名用户使用SSL,默认为no
    rsa_cert_file=/path/to/file               rsa证书的位置
    dsa_cert_file=/path/to/file              dsa证书的位置
    force_local_logins_ssl=yes/no      非匿名用户登陆时是否加密,默认为yes
    force_local_data_ssl=yes/no         非匿名用户传输数据时是否加密,默认为yes
    force_anon_logins_ssl=yes/no      匿名用户登录时是否加密,默认为no
    force_anon_data_ssl=yes/no        匿名用户数据传输时是否加密,默认为no
    ssl_sslv2=yes/no                           是否激活sslv2加密,默认no
    ssl_sslv3=yes/no                           是否激活sslv3加密,默认no
    ssl_tlsv1=yes/no                            是否激活tls v1加密,默认yes
    ssl_ciphers=加密方法                    默认是DES-CBC3-SHA
    

    相关文章

      网友评论

        本文标题:Linux FTP文件传输服务

        本文链接:https://www.haomeiwen.com/subject/lcobyqtx.html