美文网首页Kali Linux程序员Linux学习之路
2017 10-13 网络文件共享服务

2017 10-13 网络文件共享服务

作者: 楠人帮 | 来源:发表于2017-10-14 19:43 被阅读0次
    • 主要学习内容

    • FTP服务 
    • NFS服务
    • SAMBA服务

    一.文件传输协议(ftp)

    • File Transfer Protocol 早期的三个应用级协议之一
    • 基于C/S结构
    • 双通道协议:数据和命令连接
    • 数据传输格式:二进制(默认)

    (1) FTP的连接模式
    客户端和服务器端之间由双套接字通道进行连接,其中第一条链接通道是命令连接通道用来传输指令,并且服务器端口是固定的,端口号21,客户端端口是随机的
    第二条通道是数据连接通道,用来实现数据的传输,数据端口是随机的
    数据的端口是通过命令连接通道与客户端进行协商,确定出来的端口号

    端口计算如图: image.png
    image.png

    (2)FTP的两种模式

    被动模式: 客户端主动连接服务器
    客户端向服务器端建立命令连接通道,此时客户端打开一个随机端口,服务器端打开21tcp端口
    数据端:客户端向数据端建立数据连接通道,数据端通过命令连接通道和客户端协商,为数据端口生成一个随机端口
    主动模式:
    命令连接方式不变
    数据端主动向客户端发送连接请求,建立一个数据通道,并且端口为固定端口20
    主动模式与被动模式的切换方式


    image.png
    image.png
    image.png

    二.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
    • 状态码:
      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服务

    (1)由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 
    系统用户共享文件位置:用户家目录 
    虚拟用户共享文件位置:为其映射的系统用户的家目录
    (2)相关服务配置

    • 命令端口
      listen_port=21——该端口为默认设置,也可以手动添加到配置文件中
    • 主动模式端口
      connect_from_port_20=YES
      ftp_data_port=2020——修改新的主动模式端口
      vim /etc/vsftp/vsftp.conf


      image.png

      重启服务systemctl restart vsftpd


      image.png
      image.png
    • 被动模式端口范围
      在linux客户端默认使用被动模式
      windows客户端使用主动模式
      pasv_min_port=6000
      pasv_max_port=6010
      手动加入配置文件中
    • 使用当地时间
      use_localtime=YES 使用当地时间(默认时间为NO,使用GMT时间)
      如果是本地时间,不要改变,或改为NO
      如果是别的时区,要改为YES
    • 有关匿名用户的设置


      image.png

      no_anon_password=YES


      image.png
    • anon_upload_enable=YES——去掉注释生效
      注意:匿名账号不能有写权限,如果有写权限,则无法登录
      mkdir /var/ftp/upload——创建一个子目录
      setfacl -m u:ftp:rwx /var/ftp/upload


      image.png

      去掉注释后此时可以进行上传

    • anon_mkdir_write_enable=YES——去掉注释可以创建子目录或是文件


      image.png
    • anon_world_readable_only ——默认是yes,不需要写入,代表只有所有人都有读权限才可以下载
      如果在/var/ftp/upload中,并不是所有人都有读权限的话,无法进行下载
    • anon_other_write_enable=YES 可删除和修改上传的文件
      将上述内容写入配置文件中,不写默认是无法删除和修改上传的文件


      image.png

      写入配置文件后,重启服务即可生效


      image.png
      image.png
    • anon_umask=077 指定匿名上传umask
      将umask值改为022就可以实现匿名上传和下载功能——文件权限为644
    • 指定上传文件的默认的所有者和权限
      chown_uploads=YES(默认NO)
      chown_username=who ——修改所有者
      chown_upload_mode=0644——写入配置文件中



      image.png
      image.png

    (3)linux系统用户设置
    在默认情况下是可以以系统用户的身份进行进行登录
    即使将系统用户的shell类型改变依然可以进行登录

    • guest_enable=YES——所有系统用户都映射到guest中,并且和guest_username=who配合使用,一起生效
      这样所有系统用户都被映射成who的身份
      注意权限问题,要去掉who的家目录的写权限 chmod 555 /home/who,这样做可以使其他用户的权限受到限制,使系统更安全


      image.png

      设置映射后效果


      image.png
      image.png
      image.png
    • local_enable=YES——改为no后linux系统用户无法登录
    • wirte_enable=YES——改为no后也无法上传文件
    • local_root=/app—指定非匿名用户登录时所在的家目录


      image.png
    • chroot_local_user=YES——禁锢所有系统用户在家目录中


      image.png

      chmod u-w /home/zhangnan


      image.png
      image.png
    • chroot_list_enable=YES
    • chroot_list_file=/etc/vsftpd/chroot_list
      以上两个命令实现对特定用户的禁锢
      mkdir /etc/vsftpd/chroot_list——在该文件中加入要禁锢的系统用户
      chroot_list_enable=YES——如果yes改为no,则加入列表的用户会被禁锢,如果是yes,则加入的用户为白名单不会被禁锢

    (4)有关ftp的日志设置

    • 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(默认)可自动生成

    (5)登录提示信息

    ftpd_banner=“welcome to upload server"


    image.png

    banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效 ——将登录信息写入该文件中
    cp /etc/issue /etc/vsftpd/ftp.txt


    image.png
    目录访问提示信息 dirmessage_enable=YES (默认)
    cd /var/ftp/pub

    mkdir .message
    echo 'profile ok ' > .message——为了效果明显可以加入颜色来显示
    vim .message
    ctrl+v[[35m 'profile ok'ctrl+v[[0m——进入vim编辑模式后,执行ctrl+v[的命令
    message_file=.message(默认)
    信息存放在指定目录下.messag


    image.png

    (6)使用pam完成用户认证

    使用pam(Pluggable Authentication Modules)完成用户认证
    pam_service_name=vsftpd
    pam配置文件:/etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers 默认文件中用户拒绝登录


    image.png

    如果在/etc/pam.d/vsftpd将deny改为allow,那么在名单中的用户为可登陆的,不在名单中的为不可登陆的


    image.png
    是否启用控制用户登录的列表文件
    userlist_enable=YES 默认有此设置
    userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单
    userlist_file=/etc/vsftpd/users_list 此为默认值
    image.png

    (7) 配置FTP服务以非独立服务方运行
    listen=NO,默认为独立方式

     cat  /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 
    

    重启vsftpd服务后 service xinetd start 实现非独立控制

    三.实现基于文件验证的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
    实验步骤

    1 还原配置文件 cp /etc/vsftpd/vsftp.conf.bak vsftpd.conf
    2 创建用户数据库文件 
    vim /etc/vsftpd/ftpvusers
    ftp1
    centos
    ftp2
    magedu
    3 cd /etc/vsftpd
    db_load -T -t hash -f ftpvusers  ftpvusers.db
    chmod 600 ftpvusers.db
    4创建用户和访问FTP目录 
    useradd -d /var/ftpsite -s /sbin/nologin ftpvuser
    chmod 555 /var/ftpsite
    mkdir /var/ftpsite/upload
    chown ftpvuser /var/ftpsite/upload
    
    5创建pam配置文件
    vim /etc/pam.d/vsftpd.vuser 
    auth required pam_userdb.so db=/etc/vsftpd/ftpvusers
    account required pam_userdb.so db=/etc/vsftpd/ftpvusers
    
    6指定pam配置文件
    vim /etc/vsftpd/vsftpd.conf
    pam_service_name=vsftpd.vuser
    guest_enable=YES
    guest_username=ftpvuser
    user_config_dir=/etc/vsftpd/ftpvusers.conf.d/
    
    7
    建立虚拟用户各自的配置文件
    mkdir /etc/vsftpd/ftpvusers.conf.d/
    cd /etc/vsftpd/ftpvusers.conf.d/
    
    vim /etc/vsftpd/ftpvusers.conf.d/ftp1
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    
    vim  /etc/vsftpd/ftpvusers.conf.d/ftp2
    local_root=/app/ftp2
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    
    8
     准备ftp2的目录
    mkdir -p /app/ftp2/upload
    chown ftpvuser /app/ftp2/upload
    
    9
     测试
    

    四.实现基于MYSQL验证的VSFTP虚拟用户

    1 首先准备配置环境,两台centos主机,一个作为ftp服务器,一个作为mysql服务器

    2 在ftp服务器上。yum install mariadb-server vsftpd mariadb-devel pam-devel openssl-devel mariadb

    3 (主机是centos7)编译安装pam_mysql 在ftp服务器上
    tar xvf pam_mysql-0.7RC1.tar.gz
    cd pam_mysql-0.7RC1/
    ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
    ls /lib64/security/pam_mysql.so
    make && make install

    4 在mysql 服务器,准备用户和数据表
    yum install mariadb-server
    systemctl start mariadb
    mysql

    create database ftpdb;
    create table ftpvusers (id int unsigned auto_increment primary key,username char(30),password char(48));
    insert ftpvusers (username,password) values ('ftpuser1',password('centos')),('ftpuser2',password('centos'));
    insert ftpvusers (username,password) values ('ftpuser2',password('centos')),('ftpuser2',password('centos'));
    grant all on ftpdb.* to ftpuser@'192.168.25.107' identified by 'centos';
    flush privileges;

    5 在ftp服务器,创建PAM配置文件
    vim /etc/pam.d/ftp.mysql
    auth required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2
    account required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2

    6 修改vsftpd配置文件
    vim /etc/vsftpd/vsftpd.conf
    pam_service_name=ftp.mysql
    guest_enable=YES
    guest_username=ftpvuser
    user_config_dir=/etc/vsftpd/vusers.conf.d/

    7创建dir目录
    mkdir /etc/vsftpd/vusers.conf.d/
    vim /etc/vsftpd/vusers.conf.d/ftpuser1
    anon_upload_enable=YES

    vim /etc/vsftpd/vusers.conf.d/ftpuser2
    local_root=/app/ftpsite2/
    anon_upload_enable=YES

    mkdir -pv /app/ftpsite2/upload
    chown ftpvuser /app/ftpsite2/upload

    相关文章

      网友评论

        本文标题:2017 10-13 网络文件共享服务

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