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  

     

     

            

     

     

     

     

     

     

     

     

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10803432.html
Copyright © 2011-2022 走看看