zoukankan      html  css  js  c++  java
  • Linux之文件传输服务

    FTP简要概述

    概念

    • FTP是在互联网上提供文件存储和服务访问的计算机服务
    • 其可以在互联网上进行文件传输下载

    VSFTP

    • VSFTP是一个基于GPL类unix系统上使用的FTP服务
    • 其是一个安全高速稳定的FTP服务器

    FTP监听端口

    • 端口20:用来传输数据
    • 端口21:用来传输信道指令

    FTP模式

    主动模式

    • FTP的客户端主动向服务端的21号端口发起请求,客户端随机开启一个端口(1024以上)发送port命令到服务端,告知服务端采用主动模式并且开放端口
    • 当FTP服务端收到客户端的请求时候进行校验(用户名+密码之类的)校验通过则控制通道建立成功
    • 服务度通过20号端口向客户端的空闲端口发起请求进行数据传输

    被动模式

    • FTP客户端主动向FTP服务端21号端口发起请求连接
    • 客户端通过pasv发送用户名+密码到服务端
    • 服务端收到客户端发送来的用户信息进行校验 校验通过随机开启一个端口(大于1024)告知客户端
    • 客户端向服务端开放端口进行数据传输

    VSFTP搭建

    安装VSFTP

    [root@SR~]# rpm -ivh /mnt/cd/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm  # 使用 rpm 安装本地光盘中的 vsftp 程序包
    
    [root@SR~]# yum -y install vsftpd  # 使用 yum 直接安装(两种安装方法,选取其中一种即可)
    
    [root@SR~]# yum install -y lftp  #  安装VSFTP客户端
    

    配置文件位置

    [root@server ~]# /etc/vsftpd/vsftpd.conf              # 核心配置文件
    
    [root@server ~]# /etc/vsftpd/ftpusers                 #  指定那些用户不能访问FTP服务端 即黑名单
    
    [root@server ~]# /etc/vsftpd/ user_list                # 指定那些用户不能访问FTP服务端 即白名单
    
    [root@server ~]# /etc/vsftpd/vsftpd_conf_migrate.sh   # VSFTP操作的一些变量和脚本
    
    [root@server ~]# /var/ftp                             # 默认情况下匿名用户的根目录 
    

    服务搭建

    [root@server ~]# systemctl start vsftpdt  # 启动服务
    
    [root@server ~]# netstat -aunpt | grep 21  # 查看监听的端口
    
    [root@client ~]# lftp 1.1.1.1             # 客户端进行连接到服务器
    

    配置文件修改

    匿名用户访问

    [root@server ~]# cd /etc/vsftpd/   # 进入ftp目录下
    
    [root@server vsftpd]# cp vsftpd.conf vsftpd.conf.bak   # 备份ftp的配置文件
    
    [root@server vsftpd]# vim vsftpd.conf    # 进入配置文件并且修改如下配置
    
    anonymous_enable=YES   # 允许匿名用户访问FTP
    
    anon_upload_enable=YES  # 允许匿名用户上传文件
    
    anon_mkdir_write_enable=YES   # 允许匿名用户创建文件夹
    
    [root@server vsftpd]# systemctl restart vsftpd # 重启配置文件
    
    

    [root@server vsftpd]# ll -d /var/ftp/pub/   # 查看共享文件目录的属主/属组
    
    [root@server vsftpd]# chown ftp:ftp /var/ftp/pub/ -R   # 修改共享目录的属组/属组
    

    [root@server vsftpd]# vim vsftpd.conf
    anon_other_write_enable=YES      # 匿名用户拥有写的权限
    
    [root@server vsftpd]# systemctl restart vsftpd  # 重启服务
    

    # 上述匿名用户可以随意删除文件权限过大
    # 默认匿名用户家目录的权限是755且权限不能改变
    
    [root@server vsftpd]# mkdir /var/ftp/test  # 创建测试文件夹 专门用来共享数据
    
    [root@server vsftpd]# ll -d /var/ftp/test/ # 查看文件的属主/属组
    
    [root@server vsftpd]# chown ftp:ftp /var/ftp/test/ -R  # 修改文件属主/属组
    
    [root@server vsftpd]# vim vsftpd.conf
    # anon_other_write_enable=YES      # 关闭匿名用户拥有写的权限
    
    [root@server vsftpd]# systemctl restart vsftpd  # 重启服务
    

    用户名+密码

    
    '''
    1:公司内部现在有一台 FTP 和 WEB 服务器, FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等
    2:司现有两个部门负责维护任务,他们分别使用 ftpteam 和 webteam帐号进行管理。
    3:先要求仅允许 ftpteam 和 webteam帐号登录 FTP 服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
    4:只允许ftpteam 和 webteam两用户 可以上传, vsftp 禁止匿名。
    '''
    
    [root@server vsftpd]# useradd -s /sbin/nologin webteam  && echo 123456 | passwd --stdin webteam
    [root@server vsftpd]# useradd -s /sbin/nologin ftpteam  && echo 123456 | passwd --stdin ftpteam
    
    [root@server vsftpd]# vim /etc/vsftpd/vsftpd.conf #编辑 FTP 配置文件,修改如下
    
    	anonymous_enable=NO #禁止匿名用户登录
    
    	local_enable=YES #允许本地用户登录
    
    	local_root=/var/www/html #设置本地用户的根目录为 /var/www/html。
    
    	chroot_list_enable=YES #开启 chroot 功能。
    
    	chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名。
    
    	allow_writeable_chroot=YES #允许锁定的用户有写的权限
    
    [root@server vsftpd]# touch /etc/vsftpd/chroot_list #创建 chroot_list 文件 允许登录的用户存放位置
    
    [root@server vsftpd]# vim /etc/vsftpd/chroot_list #写入用户
    	webteam  # 允许的用户
    	ftpteam
    
    [root@server vsftpd]# ll -d /var/www/html/   # 查看权限
    
    [root@server vsftpd]# chmod -R o+w /var/www/html/ #赋予/var/www/html/目录和该目录下所有文件的写权限。
    
    [root@server vsftpd]# systemctl restart vsftpd  # 重启服务
    
    [root@server vsftpd]# cp /etc/passwd /var/www/html/  # 添加测试数据
    

    # 上述显示登陆失败
    
    [root@server ~]# vim /etc/pam.d/vsftpd
    
    # auth       required   pam_shells.so   # 注释改行
    

    SSL+FTP

    
    # 1:上述进行数据传输的时候都是基于明文传送
    # 2:使用SSL+FTP可以基于密文进行网络传输
    
    [root@server ~]# openssl req -new -x509 -nodes vsftpd.pem -keyout vsftpd.pem -days 3650  # 生成ssl证书与秘钥 保存到vsftpd.pem 设置过期时间3650
    
    [root@server vsftpd]# mkdir .sslkey      # 创建隐藏文件夹用来存放秘钥和证书
    
    [root@server vsftpd]# mv vsftpd.pem .sslkey # 将生成的证书秘钥移动到隐藏文件夹
    
    [root@server vsftpd]# chmod 400 .sslkey/vsftpd.pem      # 修改权限
    
    [root@server vsftpd]# vim vsftpd.conf  # 修改配置文件
          # 所有的配置不能添加在文件末尾 会报错
          ssl_enbale=YES      # 开启ssl功能
          allow_anon_ssl=NO      # 关闭匿名用户ssl
          force_anon_data_ssl=YES  # 强制传输数据以及登录使用ssl
          force_anon_logins_ssl=YES
          force_local_data_ssl=YES
          force_local_logins_ssl=YES      
          ssl_tlvs1=YES
          ssl_sslv2=YES   # 设置ssl版本
          ssl_sslv3=YES
          require_ssl_reuse=NO   # 紧张重复使用ssl会话
          ssl_ciphers=HIGH      # 允许用于加密 SSL 连接的 SSL 算法
          
          # 定义ssl证书和秘钥
          rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
          res_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
    [root@servervsftpd]# systemctl restart vsftpd  # 重启客户端
    
    OpenSSL 简单参数解释:
    req #是 X.509 Certificate Signing Request ( CSR,证书签名请求)管理的一个命令。
    x509 #X.509 证书数据管理。
    days #定义证书的有效日期。
    newkey #指定证书密钥处理器。
    keyout #设置密钥存储文件。
    out #设置证书存储文件,注意证书和密钥都保存在一个相同的文件
    nodes # 产生的秘钥是否以明文的形式报错到文件中 加入-nodes以明文显示
    

    NFS

    作用

    • NFS即网络文件系统,网络问卷系统是FreeBSD支持的文件系统,也被称之为NFS
    • NFS允许一个系统在一个网络内进行文件共享
    • 通过NFS用户可以像访问本地文件一样访问远程文件系统
    • 其基于C/S模式监听2049端口

    RPC

    • NFS通过网络进行文件传输,默认使用端口2049,但是由于文件系统及其复杂还需要有额外的程序启动额外的端口
    • NFS 默认使用传输的端口是随机选择的小于 1024 的端口。将端口告知客户端是需要依赖于 RPC( remote procedure call, RPC)协议。
    • 当 NFS 服务启动时,会随机选取数个端口,并向 RPC 注册,因此 RPC 就可以知道每个端口对应的NFS功能。
    • RPC 最主要的功能就是指定每个 NFS 功能所对应的端口号,并告知客户端。以便客户端连接至正确的端口号。

    安装启动NFS

    [root@server ~]# yum install -y rpcbind nfs-utils  # nfs以来rpc因此需要安装rpc
    
    [root@server ~]# systemctl start rpcbind  # 由于nfs需要想rpc进行端口注册 因此需要先开启rpc
    
    [root@server ~]# systemctl start  nfs-service.service
    
    [root@server ~]# netstat -aunpt | grep 2049  # 查看shif 启动
    
    [root@server ~]# systemctl enable nfs-server.service  # 开机启动
    
    

    配置使用

    [root@client ~]# showmount -e 1.1.1.1  # 客户端查看是否正常使用
    

    文件挂载

    [root@server ~]# vim /etc/exports
          /media *(rw)    # media 共享的目录  *表示对所有网段开放读写权限
    [root@server ~]# exportfs -rv      # 重新读取配置文件服务不会中断
    
    [root@client ~]# mount -t nfs 1.1.1.1:/media /mnt/      # 客户端进行文件挂载
    
    [root@client ~]# df -h      # 查看挂载目录
    
    [root@server ~]# vim /etc/fstab
    
          1.1.1.1:/media          /mnt                    nfs     defaults        0 0
    
    

    验证效果

    [root@client ~]# touch /mnt/a.txt  # 客户端在挂载点创建文件
          touch: 无法创建"/mnt/a.txt": 权限不够      # 报错
    [root@server ~]# ll -d /media/                  # 服务端查看文件权限
          drwxr-xr-x. 8 root root 2048 9月  12 2019 /media/
    [root@server ~]# chmod 777 /media/ -R      # 方法一:修改权限
    [root@server ~]# chown nfsnobody:nfsnobody /media/      # 方法二:修改文件属主:属组
    [root@client ~]# touch /mnt/a.txt      # 客户端创建文件
    [root@server ~]# cp /etc/passwd /media/      # 服务端添加测试数据
    [root@client ~]# ll /mnt/     # 查看恭享目录下的文件
    

    NFS共享参数

    NFS共享的常用参数
    
    '''
    以下是一些 NFS 共享的常用参数:
    ro #只读访问。
    rw #读写访问。
    sync #资料同步写入到内存与硬盘当中。
    async #资料会先暂存于内存当中,而非直接写入硬盘。
    secure #NFS 通过 1024 以下的安全 TCP/IP 端口发送。
    insecure #NFS 通过 1024 以上的端口发送。
    wdelay #如果多个用户要写入 NFS 目录,则归组写入(默认)。
    no_wdelay #如果多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置。
    hide #在 NFS 共享目录中不共享其子目录。
    no_hide #共享 NFS 目录的子目录。
    subtree_check #如果共享/usr/bin 之类的子目录时,强制 NFS 检查父目录的权限(默认)。
    no_subtree_check #和上面相对,不检查父目录权限。
    all_squash #共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。
    no_all_squash #保留共享文件的 UID 和 GID(默认)。root_squash #root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)。
    no_root_squash #root 用户具有根目录的完全管理访问权限。
    选项使用方法示例:
    [root@SR ~]# cat /etc/exports
    /tmp/a/no_root_squash *(rw,no_root_squash)
    /tmp/a/sync 192.168.0.0/24(rw,sync)
    /tmp/a/ro 192.168.1.64(ro)
    /tmp/a/all_squash 192.168.0.0/24(rw,all_squash,anonuid=500,anongid=500)
    /tmp/a/async 192.168.3.0/255.255.255.0(async)
    /tmp/a/rw 192.168.3.0/255.255.255.0(rw) 192.168.4.0/255.255.255.0(rw)
    /tmp/a/root_squash *(rw,root_squash)
    '''
    

    客户端挂载参数优化

    客户端挂载参数的优化
    
    '''
    NFS 客户端挂载参数的优化:
    NFS 高并发环境下的服务端重要优化( mount -o 参数)。
    async:异步同步,此参数会提高 I/O 性能,但会降低数据安全(除非对性能要求很高,对数据可靠
    性不要求的场合。一般生产环境,不推荐使用)。
    noatime:取消更新文件系统上的 inode 访问时间,提升 I/O 性能,优化 I/O 目的,推荐使用。
    nodiratime:取消更新文件系统上的 directory inode 访问时间,高并发环境,推荐显式应用该选
    项,提高系统性能。
    intr:可以中断不成功的挂载。
    rsize/wsize:读取( rsize) /写入( wsize)的区块大小( block size),这个设置值可以影响客户
    端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内
    存,这个值可以设置大一点,比如说 32768( bytes) ,提升缓冲区块将可提升 NFS 文件系统的传输能
    力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。
    '''
    

    内核优化

    内核优化
    
    '''
    root@server ~]# vim /etc/sysctl.conf #修改/etc/sysctl.conf,在文件最后添加如
    下。
    net.core.wmem_default = 8388608 #内核默认读缓存
    net.core.rmem_default = 8388608 #内核默认写缓存
    net.core.rmem_max = 16777216 #内核最大读缓存
    net.core.wmem_max = 16777216 #内核最大写缓存
    [root@xuegod63 ~]# sysctl -p #使用 sysctl.conf 文件内的参数生效,执行命令输出
    的结果中的参数代表生效。
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    '''
    
  • 相关阅读:
    ubuntu15.10下各种编译环境的搭建(工作平台大转移)
    win7+ubuntu15.10的安装
    Qt之串口通信
    读C++代码必备专业名词
    好书好网站积累着有空看
    大数学家与中小学教育相关的资料(持续更新)
    《x的奇幻之旅》读书笔记
    冯·诺依曼为后生解围
    从一道简单的几何题说起
    Steiner-Lehmus 定理
  • 原文地址:https://www.cnblogs.com/SR-Program/p/13217815.html
Copyright © 2011-2022 走看看