zoukankan      html  css  js  c++  java
  • 网络共享服务(一)之FTP

    网络共享服务:ftp,nfs,samba比较

    从跨平台角度说, 
    samba, ftp差不多, 而nfs不支持windows平台 
    从挂载角度说, 
    samba, nfs可以把远程目录挂载到本地目录上, 对用户是透明的. 而ftp则不行 
    从使用范围上说, 
    samba, nfs最好是限定在局域网内, 不要暴露在公网上. 而ftp则不同, 既可以面向内网, 也可以是公网. 
    从面向对像来说, 
    三者都支持文件, 但samba还支持打印机, 以及作windows域管理器 

    FTP(File Transfer Protocol,文件传输协议)是INTERNET上仍常用的最老的网络协议之一,他为系统提供了通过网络与远程服务器进行传输的简单方法,在REDHAT ENTREPRISE LINUX7中,FTP服务器包的名称为VSFTPD,他代表Very Secure File Transfer Protocol Damon,服务器名称也叫做vsftpd

    vsftp提供三种远程的登录方式:
    (1)匿名登录方式:不需要用户名和密码,就可以登录到服务器上
    (2)本地用户方式:需要账户名和密码才能登录,而且,这些用户都必须是系统已经存在的用户
    (3)虚拟用户:同样需要用户名和密码才能登录,但是,这些用户是系统里面没有的。

    默认配置文件让ANONYMOUS用户只能下载位于CHROOT目录中的内容
    /var/ftp/这意味着远程FTP客户端能以用户ANONUMOUS或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录中下载文件(其本地ftp用户可以读取这些文件)

    FTP的两个连接:

      命令连接: 文件管理类命令,始终在线的连接

      数据连接: 数据传输,按需创建及关闭的连接   

      主动: 由服务器创建连接
          命令:
             Client:50000 --> Server: 21
          数据:
             Client: 50000+1 <-- Server: 20/tcp
      被动: 由客户端创建连接      
          命令:
             Client:50000 --> Server: 21
          数据: 
              Client: 50000+1 --> Server: 随机端口

    服务器端程序有:

     wu-ftpd:
     vsftpd: Very Secure ftp Daemon
     proftp:
     pureftpd
     FileZilla
     Serv-U

    客户端程序有:

    CLI: 
        ftp
        lftp, lftpget
    GUI:
        gftp
        Flashftp
        cuteftp
        filezilla
        gftp(Linux GUI)

    安装服务器端vsftpd程序:

    yum install vsftpd -y  //这里是192.168.1.102作为vsfptd服务器

    安装客户端ftp程序:

    yum install ftp -y  //这里是192.168.1.104作为客户端进行测试

    客户端访问:

    # ftp 192.168.1.7

    服务器端程序vsftpd程序相关文件组成

    用户认证配置文件: /etc/pam.d/vsftpd
    服务脚本: /etc/rc.d/init.d/vsftpd
    配置文件目录: /etc/vsftpd
      主配置文件: /vsftpd.conf
    匿名用户(映射为ftp用户)共享资源位置: /var/ftp
    系统用户通过ftp访问的资源的位置: 用户自己的家目录
    虚拟用户通过ftp访问的资源的位置: 给虚拟用户指定的映射成为的系统用户的家目录
    主程序: /usr/sbin/vsftpd

    vsftpd配置文件及相关配置: /etc/vsftpd/vsftpd.conf

    匿名用户的配置:
      anonymous_enable=YES  //允许匿名用户登录      anon_upload_enable=YES  //允许匿名用户上传文件   anon_mkdir_write_enable=YES  //允许匿名用户创建目录   anon_other_write_enable=YES  //允许匿名用户执行delete,rmdir等这些操作
     示例:服务器端:# mkdir upload
             # setfacl -m u:ftp:rwx upload  //让ftp这个用户对upload目录拥有读写执行权限,当然也可以直接对pub目录修改权限
        客户端:以ftp用户登录,密码置空
             # cd upload
             # lcd /etc
             # put fstab  //可以上传文件到upload目录中,anon_upload_enable=YES
             # mkdir test  //也可以创建目录了,anon_mkdir_write_enable=YES
             # delete fstab  // 删除文件, anon_other_write_enable=YES
             # rmdir upload  //删除目录
    系统用户的配置:
      local_enable=YES  //允许系统用户登录   write_enable=YES  //允许系统用户上传删除操作   local_umask=022   禁锢所有的ftp本地用户于其家目录:     chroot_local_user=YES   禁锢文件中指定的ftp本地用户与家目录     chroot_list_enable=YES     chroot_list_file=/etc/vsftpd/chroot_list  //让本地用户登录后执行pwd命令后看到的都是”/“,而不是自己的家目录
      示例:
        服务器端创建一个用户:# useradd user1
         客户端登录: 以user1用户登录
                # mkdir upload  // write_enable=YES
                # lcd /etc 
                # put fstab
    日志:
        xferlog_enable=YES
        xferlog_std_format=YES
        xferlog_file=/var/log/xferlog
    改变上传文件的属主
        chown_uplodads=YES
        chown_username=whoever
    vsftpd使用pam完成用户认证,其用到的pam配置文件:
        pam_service_name=vsftpd
    是否启用控制用户登录的列表文件:
        userlist_enable=YES  //是否开启控制用户登录的功能,下面选项读取的是/etc/vsftpd/user_list文件
        userlist_deny=YES|NO  //如果为YES,user_list中的用户就不能登录,为黑名单; 如果为NO,user_list中的用户就可以登录,为白名单
    连接限制:
        max_clients: 最大并发连接数;
        max_per_ip:  每个IP可同时发起的并发请求数
        
    传输速率:
      anno_max_rate:  匿名用户的最大传输速率,单位是“字节/秒”
      local_max_rate: 本地用户的最大传输速率
    虚拟用户所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录
         各虚拟用户可被赋予不同的访问权限
        通过匿名用户的权限控制参数进行指定    
    
    
    虚拟用户账号的存储方式:
      1.文件: 编辑文件
           奇数行为用户
           偶数行为密码
       但是此文件需要被编码为hash格式,所以修改不是很方便
      2.关系型数据库中的表中:
           即时查询数据库完成用户认证
           vsftpd是基于pam认证用户的,所以pam要依赖于pam-mysql模块,没有这个模块所以要安装第三方程序:EPEL源中的pam_mysql    

    vsftpd基于mysql进行用户认证 

    1. 安装pam_mysql及mysql客户端

    这里以192.168.1.102作为vsftpd服务器:
      安装mysql客户端: yum install mysql -y
      安装pam_mysql依赖包: yum install pam_mysql

    2. 创建虚拟用户账号

    1. 准备数据库及相关表
        这里准备的是192.168.1.105上安装的mariadb数据库,并且已经正常启动,建立存储虚拟用户的数据库,比如这里将其创建为vsftpd数据库
      mysql> CREATE DATABASE vsftpd;
      mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.1.%' IDENTIFIED BY 'www.alen.com';
      mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'www.alen.com';
      mysql> FLUSH PRIVILEGES;

      mysql> USE vsftpd;
      mysql> CREATE table users(
        -> id int AUTO_INCREMENT NOT NULL,
        -> name char(20) binary NOT NULL,
        -> password char(48) binary NOT NULL,
        -> PRIMARY KEY(id)
        -> );

      在vsftpd服务器上测试连接mysql服务器:# mysql -uvsftpd -h 192.168.1.105 -pwww.alen.com
    2. 添加测试的虚拟用户
        根据需要添加所需要的用户,这里将其密码为了安全应该使用PASSWORD函数加密后存储
        mysql> INSERT INTO users(name,password) VALUES('tom',PASSWORD('alen'));
       mysql> INSERT INTO users(name,password) VALUES('jerry',PASSWORD('alen'));

    3. 配置vsftpd

    1. 建立pam认证所需文件
    # vi /etc/pam.d/vsftpd.mysql
    添加如下两行:crypt的值参照rpm -q pam_mysql命令结果中的readme文档中的crypt条目0:明文 2: 数据库password加密的方式
    auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    account required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

    注意: 由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。   
    2. 修改vsftpd的配置文件,使其适应mysql认证
          建立虚拟用户映射的系统用户及相应目录
            # useradd -s /sbin/nologin -d /var/ftproot vuser  //-d ftpserver/pub 可以是一个单独的文件系统
            # chmod go+rx /var/ftproot
    
          确保/etc/vsftpd.conf中已经启用了以下选项
            anonymous_enable=YES
            local_enable=YES
           write_enable=YES
           anon_upload_enable=NO
           anon_mkdir_write_enable=NO
           chroot_local_user=YES
        
        而后添加以下选项
          guest_enable=YES
          guest_username=vuser
        
        并确保pam_service_name选项的值如下所示
          pam_service_name=vsftpd.mysql

    4. 启动vsftpd服务

    # service vsftpd start
    # chkconfig vsftpd on
    
    查看端口开启情况
    # netstat -tnlp | grep :21
    
    使用虚拟用户登录,验证配置结果,以下为在192.168.1.104上的命令方式测试,你也可以在其他Win Box上用IE或者FTP客户端工具登录验证
    # ftp 192.168.1.102

    5. 配置虚拟用户具有不同的访问权限

    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名,配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
    1. 配置vsftpd为虚拟用户使用配置文件目录
    # vim vsftpd.conf
    添加如下选项
    user_config_dir=/etc/vsftpd/vusers_config
    
    2.创建所需要目录,并为虚拟用户提供配置文件
    # mkdir /etc/vsftpd/vusers_config
    # cd /etc/vsftpd/vusers_config
    # touch tom jerry
    
    3. 配置虚拟用户的访问权限
    虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的,比如,如果需要让tom用户具有上传文件权限,可以改/etc/vsftpd/vusers_config/
    anon_world_readable_only=NO anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} ano_other_write_enable={YES|NO}

    6. 常见权限配置

    local_root=/var/www/html/web1 //虚拟用户登录后的新的根目录
    virtual_use_local_privs=NO //虚拟用户和本地用户有相同的权限,默认是NO
    anon_umask=022 //设置上传或创建目录的权限
    write_enable=YES //开放本地用户写权限
    anon_world_readable_only=NO //开放下载权限,写成YES,将不能列出文件和目录
    anon_upload_enable=YES //开放上传权限
    anon_mkdir_write_enable=YES //开放创建目录权限
    anon_other_write_enable=YES ////开放删除、重命名权限

    补充:

      其他下载工具 :axel, lftpget, wget, curl  

     

     

            

     

     

     

     

     

     

     

     

  • 相关阅读:
    在基础数据类型和在对象中 使用 == 与equals的差别
    对Java中静态代理和动态代理的简单理解
    MyBatis中sqlSession的创建及执行流程
    Spring相关概念
    AOP相关
    IOC容器和Bean的配置
    如何将本地项目上传到GitHub进行托管
    稀疏数组
    Java集合回忆
    JSTL标签库
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10803432.html
Copyright © 2011-2022 走看看