• Linux之网络文件共享服务(FTP)


    一、FTP概念
    •File Transfer Protocol 早期的三个应用级协议之一
    •基于C/S结构
    •双通道协议:数据和命令连接
    •数据传输格式:二进制(默认)和文本 
    •两种模式:服务器角度

    二、FTP两种传输模式 

    FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

    下面介绍一个这两种方式的工作原理:
    Standard模式
    FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

     

    Passive模式
    在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。多数为被动连接,让客户端发请求。
    三、FTP软件和服务介绍
    FTP软件: 
      FTP服务器:
    • Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
    • vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器
    • 高速,稳定,下载速度是WU-FTP的两倍
    • ftp.redhat.com数据:单机最多可支持15000个并发

      客户端软件:

    • ftp,lftp,lftpget,wget,curl
    • ftp -A ftpserver port  -A主动模式 –p 被动模式
    • lftp –u username ftpserver  
    • lftp username@ftpserver
    • lftpget ftp://ftpserver/pub/file 
    • gftp:GUI centos5  最新版2.0.19 (11/30/2008)
    • filezilla,CuteFtp,FlashFXP,LeapFtp
    • IE  ftp://username:password@ftpserver
    FTP服务
      状态码:
    • 1XX:信息 125:数据连接打开
    • 2XX:成功类状态 200:命令OK 230:登录成功
    • 3XX:补充类 331:用户名OK
    • 4XX:客户端错误 425:不能打开数据连接
    • 5XX:服务器错误 530:不能登录
      用户认证:
    • 匿名用户:ftp,anonymous,对应Linux用户ftp
    • 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
    • 虚拟用户:特定服务的专用用户,独立的用户/密码文件
    • nsswitch:network service switch名称解析框架
    • pam:pluggable authentication module 用户认证
    • /lib64/security  /etc/pam.d/  /etc/pam.conf 
    四、VSFTPD服务及配置
    vsftpd服务

    •由vsftpd包提供

    •不再由xinetd管理

    •用户认证配置文件:/etc/pam.d/vsftpd

    •服务脚本: /usr/lib/systemd/system/vsftpd.service、/etc/rc.d/init.d/vsftpd

    •配置文件:/etc/vsftpd/vsftpd.conf

    man 5 vsftpd.conf

    格式:option=value 

    注意:= 前后不要有空格

    •匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp

    •系统用户共享文件位置:用户家目录

    •虚拟用户共享文件位置:为其映射的系统用户的家目录

    vsftpd服务配置
    •命令端口
    listen_port=21
    •主动模式端口
    connect_from_port_20=YES 主动模式端口为20
    ftp_data_port=20 (默认) 指定主动模式的端口
    •被动模式端口范围
    linux 客户端默认使用被动模式
    windows 客户端默认使用主动模式
    pasv_min_port=6000 0为随机分配
    pasv_max_port=6010
    •使用当地时间
    use_localtime=YES 使用当地时间(默认为NO,使用GMT)
    受限于文件系统权限和软件访问控制权限
     
    •匿名用户
    anonymous_enable=YES 支持匿名用户
    no_anon_password=YES(默认NO) 匿名用户略过口令检查 
    anon_world_readable_only (默认YES)只能下载全部读的文件
    anon_upload_enable=YES 匿名上传,注意:文件系统权限
    anon_mkdir_write_enable=YES 匿名建目录
    anon_umask=0333 指定匿名上传文件的umask,默认077
    anon_other_write_enable=YES 可删除和修改上传的文件
    指定上传文件的默认的所有者和权限
    chown_uploads=YES(默认NO)
    chown_username=wang
    chown_upload_mode=0644
     
    •Linux系统用户
    local_enable=YES 是否允许linux用户登录
    write_enable=YES 允许linux用户上传文件
    local_umask=022 指定系统用户上传文件的默认权限
    guest_enable=YES 所有系统用户都映射成guest用户
    guest_username=ftp 配合上面选项才生效,指定guest用户
    local_root=/ftproot guest用户登录所在目录
    •禁锢所有系统用户在家目录中
    chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户
    •禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反 chroot_list_enable=YES 
    chroot_list_file=/etc/vsftpd/chroot_list
    当chroot_local_user=YES时,则chroot_list中用户不禁锢
    当chroot_local_user=NO时,则chroot_list中用户禁锢
     
     •wu-ftp日志:默认启用
    xferlog_enable=YES (默认)启用记录上传下载日志
    xferlog_std_format=YES (默认) 使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog (默认)可自动生成
    •vsftpd日志:默认不启用
    dual_log_enable=YES 使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成
    •登录提示信息
    ftpd_banner=“welcome to mage ftp server" 
    banner_file=/etc/vsftpd/ftpbanner.txt  优先上面项生效
    •目录访问提示信息
    dirmessage_enable=YES (默认)
    message_file=.message(默认) 信息存放在指定目录下.message
     
    •使用pam(Pluggable Authentication Modules)完成用户认证
    pam_service_name=vsftpd
    pam配置文件:/etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers 默认文件中用户拒绝登录
    •是否启用控制用户登录的列表文件
    userlist_enable=YES 默认有此设置
    userlist_deny=YES(默认值) 黑名单,不提示口令,NO为白名单
    userlist_file=/etc/vsftpd/users_list 此为默认值
    •vsftpd服务指定用户身份运行
    nopriv_user=nobody (默认值)
    •连接数限制
    max_clients=0 最大并发连接数
    max_per_ip=0 每个IP同时发起的最大连接数
     
     
    •传输速率:字节/秒
    anon_max_rate=0 匿名用户的最大传输速率
    local_max_rate=0 本地用户的最大传输速率
    •连接时间:秒为单位
    connect_timeout=60 主动模式数据连接超时时长 
    accept_timeout=60 被动模式数据连接超时时长
    data_connection_timeout=300  数据连接无数据输超时时长
    idle_session_timeout=60 无命令操作超时时长
    •优先以文本方式传输
    ascii_upload_enable=YES
    ascii_download_enable=YES
     
    •配置FTP服务以非独立服务方运行
    vim /etc/vsftpd/vsftpd.conf/
    listen=NO,默认为独立方式
    vim  /etc/xinetd.d/vsftpd
    service ftp
    {
     flags = REUSE
     socket_type = stream
     wait = no
     user = root
     server = /usr/sbin/vsftpd
     log_on_failure += USERID
     disable = no
    }
    实现基于SSL的FTPS
    •查看是否支持SSL
    ldd `which vsftpd` 查看到libssl.so
    •创建自签名证书
    cd /etc/pki/tls/certs/
    make vsftpd.pem
    openssl  x509 -in vsftpd.pem -noout –text
    •配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
    ssl_enable=YES 启用SSL
    allow_anon_ssl=NO 匿名不支持SSL
    force_local_logins_ssl=YES 本地用户登录加密
    force_local_data_ssl=YES 本地用户数据传输加密
    rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
    •用filezilla等工具测试
    View Code
    vsftpd虚拟用户
    •虚拟用户:
    所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
    各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
    •虚拟用户帐号的存储方式:
    文件:编辑文本文件,此文件需要被编码为hash格式
    奇数行为用户名,偶数行为密码
    db_load -T -t hash -f vusers.txt vusers.db
    关系型数据库中的表中:
    实时查询数据库完成用户认证
    mysql库:pam要依赖于pam-mysql
    /lib64/security/pam_mysql.so
    /usr/share/doc/pam_mysql-0.7/README
     五、企业级FTP应用
      1、实现基于文件验证的vsftpd虚拟用户
      2、实现基于MYSQL验证的vsftpd虚拟用户
     
    实现基于文件验证的vsftpd虚拟用户

    一、创建用户数据库文件

    • vim /etc/vsftpd/vusers.txt
    wang
    wangpass
    mage
    magepass
    • cd /etc/vsftpd/
    • db_load -T -t hash -f vusers.txt vusers.db
    • chmod 600 vusers.db
    
     
    View Code
    实现基于MYSQL验证的vsftpd虚拟用户
    •说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服
    务器
    •一、安装所需要包和包组:
    •在数据库服务器上安装包:
    •Centos7:在数据库服务器上安装
    yum –y install mariadb-server
    systemctl start mariadb.service
    systemctl enable mariadb
    •Centos6:在数据库服务器上安装
    yum –y install  mysql-server
    •在FTP服务器上安装vsftpd和pam_mysql包
    centos6:pam_mysql由epel6的源中提供
     yum install vsftpd pam_mysql
     
    实现基于MYSQL验证的vsftpd虚拟用户
    •centos7:无对应rpm包,需手动编译安装
    yum -y groupinstall "Development Tools"
    yum -y install mariadb-devel  pam-devel vsftpd 
    下载pam_mysql-0.7RC1.tar.gz
     ftp://172.16.0.1/pub/Sources/sources/pam/
    tar xvf pam_mysql-0.7RC1.tar.gz
    cd pam_mysql-0.7RC1/
    ./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --
    with-pam=/usr 
     
    make
    make install 
     
    实现基于MYSQL验证的vsftpd虚拟用户
    •二、在数据库服务器上创建虚拟用户账号
    •1.建立存储虚拟用户数据库和连接的数据库用户
    mysql> CREATE DATABASE vsftpd;
    mysql> SHOW DATABASES;
    • ftp服务和mysql不在同一主机:
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@'172.16.%.%'  IDENTIFIED BY 'magedu';
    • ftp服务和mysql在同一主机:
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@localhost IDENTIFIED BY 'magedu';
    mysql> GRANT SELECT ON vsftpd.* TO 
    vsftpd@'127.0.0.1'  IDENTIFIED BY 'magedu';
    mysql> FLUSH PRIVILEGES;
     
     
    实现基于MYSQL验证的vsftpd虚拟用户
    •2.准备相关表
    mysql> USE vsftpd;
    Mysql> SHOW TABLES;
    mysql> CREATE TABLE users (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    name CHAR(50) BINARY NOT NULL,
    password CHAR(48) BINARY NOT NULL
    );
    mysql>DESC users;
    测试连接
    mysql -uvsftpd -h mysqlserver  -pmagedu
    mysql> SHOW DATABASES;
     
    实现基于MYSQL验证的vsftpd虚拟用户
    •3.添加虚拟用户
    •根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密
    其密码后存储
    mysql> DESC users;
    mysql> INSERT INTO users(name,password) values(‘wang',password('magedu'));
    mysql> INSERT INTO users(name,password) values(‘mage',password('magedu'));
    mysql> SELECT * FROM users;
     
    实现基于MYSQL验证的vsftpd虚拟用户
    •三、在FTP服务器上配置vsftpd服务
    •1.在FTP服务器上建立pam认证所需文件
    vi /etc/pam.d/vsftpd.mysql 添加如下两行
    auth required pam_mysql.so user=vsftpd passwd=magedu 
    host=mysqlserver db=vsftpd table=users usercolumn=name 
    passwdcolumn=password crypt=2
    account required pam_mysql.so user=vsftpd passwd=magedu 
    host=mysqlserver db=vsftpd table=users usercolumn=name 
    passwdcolumn=password crypt=2
    注意:参考README文档,选择正确的加密方式
    crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql 
    password()函数加密,3表示md5加密,4表示sha1加密
     
    FTP总结:
    • 数据连接
      文本
      二进制
    •主动、被动
    • 命令连接
    • vsftpd
      /etc/vsftpd/vsftpd.conf
    • 三类用户
      匿名、系统、虚拟
  • 相关阅读:
    VSS使用
    Delphi简单数据库连接程序
    为表增加字段与拷贝数据到另一个表
    VSTS 使用
    Delphi实现个相似的功能界面共用一个窗体
    看代码笔记
    数据库安全管理
    函数
    【USACO】Ordered Fractions 顺序的分数
    C# 专业数据库连接配置界面
  • 原文地址:https://www.cnblogs.com/duanxin1/p/9832045.html
Copyright © 2020-2023  润新知