FTP部署及简单应用

文件服务:

ftp:应用层,C/S,文件共享;file transfer protocol;
nfs,cifs:文件系统接口,网络文件系统;
    nfs:network file system
    cifs:common internet file system
        samba

网络存储:
    NAS:Network Attached Storage,文件服务器,nfs或cifs,文件级别;
    SAN:Storage Area Network,块级别共享服务,分区-->格式化-->创建文件系统;IPSAN, FCSAN;

ftp:

file transfer protocol,21/tcp也可以说监听在20号端口做数据连接的传输通道!(主动模式下使用 TCP 20号端口,被动模式使用随机端口,被动模式下向客户端发送数据时发送一个 除以 256 得商和余数的数据让客户端去请求这个端口)

C/S:
    Client --> ftp-->Server
        Client:Connect 
        Server:Listen

连接:
    命令连接:命令传输,连接一直存在;
    数据连接:数据传输,按需创建;

    数据连接的建立模式:
        主动模式:服务器通过20/tcp主动连接客户端的命令连接端口向后最近一个空闲端口;PORT;

        被动模式:客户端发出数据请求后,服务端会响应一个打开的临时使用的随机端口号发送给客户端,客户端对此端口进行请求;PASV;

    数据传输模式:
        文本格式:ASCII
        二进制格式:BINARY

    协议安全:
        明文:数据、认证时传输账号和密码均是明文 ;

        安全增强:
            ftp over ssl/tls:ftps
            ftp over ssh:sftp 

        虚拟用户账号;

    c/s:
        Server:
            Windows:Serv-U, IIS, ...
            开源解决方案:
                wuftpd:Washington University ftp daemon
                vsftpd:Very Secure ftp daemon
                proftpd, pureftpd, ...

        Client:
            GUI:flashfxp, cute, filezilla, gftp, ...
            CLI:ftp, lftp, ...

vsftpd:

程序环境:

  • 主程序:/usr/sbin/vsftpd
     Unit File:/usr/lib/systemd/system/vsftpd.service

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

  • 文档路径映射:

          fedora, /home/fedora/pub/a.txt --> ftp://HOST:PORT/pub/a.txt
          用户的家目录映射:访问vsftpd服务必须以某个系统用户的身份进行;此用户的家目录即为文档映射的根目录;
          匿名用户:anonymous,映射为一个系统用户,此用户为ftp;

配置:vsftpd.conf

  • 格式 :directive VALUE,…

          directive:指令之前不能存在任何字符,包括空白;
  • 匿名用户配置:

      anonymous_enable=YES
    
      anon_upload_enable=YES  才能上传
    
      anon_mkdir_write_enable=YES  才能新建目录
      anon_other_write_enable=YES 开放其他的写权限,这样才能删除
  • 本地用户:root用户不能登录ftp

      local_enable=YES
      write_enable=YES
    
      注意:凡是在/etc/vsftpd/ftpusers中的用户都不能登录
  • 认证服务:

pam_service_name=vsftpd                        

/etc/pam.d/vsftpd 

pam: pluggable authencate module:插入式认证模块
  • 切换目录时的提示信息:

      dirmessage_enable=YES
    
      匿名用户就是创建/var/ftp/*/.messages 文件, *表示你想在那个目录下显示提示信息 ,提示信息写在 此文件内 
  • 修改上传文件的属主:

      chown_uploads=YES
      chown_username=USERNAME (这里改成要改的属主名,不指名默认root)
  • 数据传输模式

      connect_from_port_20=YES 是否启用PORT模式
  • 设定会话超时时长

      idle_session_timeout=600
      data_connection_timeout=120 数据传输闲时时长
  • 设定连接及传输速率

      local_max_rate:本地用户的最大传输速率,单位字节;默认为0,表示无限制;
      anon_max_rate:匿名用户的最大传输速率
      max_clients:最大并发连接数;
      max_per_ip:每个IP允许发起的最大连接数;
  • 禁锢用户于自己的家目录:

    会引入别的风险,因此,要求用户对自己的家目录不能有写权限;

       先touch /etc/vsftpd/chroot_list 此文件用来存用户名
        (1) 禁锢所有用户
            chroot_local_user=YES

        (2) 禁锢部分用户
            (a) 白名单:名单中的用户不被禁锢;
                chroot_local_user=YES
                chroot_list_enable=YES
                chroot_list_file=/etc/vsftpd/chroot_list
            (b) 黑名单:名单中的用户被禁锢
                chroot_local_user=NO
                chroot_list_enable=YES
                chroot_list_file=/etc/vsftpd/chroot_list
  • /etc/vsftpd/user_list控制用户访问vsftpd:

      (1) 白名单,仅此文件中的用户能登录
          userlist_enable=YES
          userlist_deny=NO 
    
      (2) 黑名单,默认
          userlist_enable=YES
          userlist_deny=YES

    具体可以参考 man vsftpd.conf

虚拟用户账号:

vsftpd依赖pam完成认证,pam存储支持的认证方式,vsftpd都可调用;

   pam:认证框架
        模块化:/lib64/security/pam*.so
        配置文件:/etc/pam.conf和/etc/pam.d/*

账号密码存储于何处?
        文件、MySQL、ldap、redis、...

pam_mysql模块

        CentOS 6:epel
        CentOS 7:编译安装

/etc/pam.d/vsftpd
FTP部署及简单应用

 编译安装pan:
    (1) 编译环境;
    (2) 依赖关系:mariadb-devel, pam-devel

    # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/
        # make install

FTP部署及简单应用

    MySQL设置:
        mysql> CREATE DATABASE vsftpd;  创建数据库

        mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu'; 创建用户并授权

        mysql>  CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); 
        创建表在vsftp下叫users

        mysql> use vsftpd 进入vsftp

        mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu'));

        MariaDB [(none)]> flush privileges;    同步数据库
    准备要映射成为的系统账号:(就是创建一个家目录)

        # mkdir -pv /ftproot/{pub,upload}
        # useradd -d /ftproot vuser
        # setfacl -m u:vuser:rwx /ftproot/upload

    准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql,把以下文件复制到此文件中
        auth required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

        account required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2                    
    配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf
        pam_service_name=vsftpd.mysql
        guest_enable=YES
        guest_username=vuser                        

        配置每虚拟用户拥有不同的权限:vsftpd.conf
        user_config_dir=/etc/vsftpd/vusers_conf


        # mkdir /etc/vsftpd/vusers_conf
            创建那个提供配置文件的目录
        # touch USERNAME
            创建配置各个虚拟用户的权限文件
                tom 、lucy 等文件(文件名必须为用户名)

        权限配置指令:(把一下的这些复制到刚创建的文件中)
        anon_upload_enable=YES   开放上传权限
        anon_mkdir_write_enable=YES    开放创建目录权限
        anon_other_write_enable=YES    开放创建文件权限

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/52840

(0)
qzxqzx
上一篇 2016-10-19 08:30
下一篇 2016-10-19 08:32

相关推荐

  • alias——Linux基本命令(4)

    1.     alias别名 (1)查看、设置别名 Linux系统提供了一个有用的工具叫alias,可以让我们将一些需要频繁使用的但又过于冗长的命令设置一个别名,这样一来,以后只需输入一个简短的别名就可以达到同样的作用。 alias显看当前已定义的别名   使用aliasaliname=’comm…

    2017-07-13
  • 11.网络解析和网络加密

    1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1.使用单向加密算法,提取A的文件的特征码。 2.使用A的私钥对提取出来的特征码进行加密,把加密后的特征码附加在A的文件的后面。 3.使用对称加密对刚刚的A的文件和加密后的特征码进行加密,生成对称加密密钥 4.使用B的公钥对第3步骤的对称加密的密钥进行加密,加密后附加在文件的后面。 解密过程 1.使用…

    2017-09-20
  • 千万不要把 bool 设计成函数参数

    我们有很多Coding Style 或 代码规范。但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。不信?我们先来看看下面的代码。 当你读到下面的代码,你会觉得这个代码是什么意思? widget->repaint(false); 是不要repaint吗?还是别的什么意思?看了文档后,我们才知道这个…

    Linux干货 2016-07-10
  • 正则表达式、扩展正则表达式

    正则表达式:支持:grep,sed,awk,vim, less,nginx,varnish等

    2018-03-16
  • 网络接口配置-bonding

    bonding      就是将多块网卡绑定同一个IP地址对外提供服务,可以实现高可用或是负载均衡,当 然,直接给两块网卡设置同一个IP地址是不可能的,通过bonding,虚拟一块网卡对外提供链接,这样即使一块网卡坏了可以经行自动切换,而不会影响业务的正常的通信 Bonding的工作模式 mode 0 轮转(…

    Linux干货 2016-09-05
  • 冒泡算法,源码安装http,yum浅谈

    生成10个随机数,采用冒泡算法进行升序或降序排序 #!/bin/bash #author:maoxiong QQ:111111111 #verson:1.0  date:2016-08  #illustrate: declare -a array #create 10 randomnum for num in {0..9} do &nbs…

    Linux干货 2016-08-26