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#

Copy
[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客户端

配置文件位置#

Copy
[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 # 默认情况下匿名用户的根目录

服务搭建#

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

配置文件修改#

匿名用户访问#

Copy
[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 # 重启配置文件

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

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

Copy
# 上述匿名用户可以随意删除文件权限过大 # 默认匿名用户家目录的权限是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 # 重启服务

用户名+密码#

Copy
''' 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/ # 添加测试数据

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

SSL+FTP#

Copy
# 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#

Copy
[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 # 开机启动

配置使用#

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

文件挂载#

Copy
[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

验证效果#

Copy
[root@client ~]# touch /mnt/a.txt # 客户端在挂载点创建文件 touch: 无法创建"/mnt/a.txt": 权限不够 # 报错 [root@server ~]# ll -d /media/ # 服务端查看文件权限 drwxr-xr-x. 8 root root 2048 912 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共享的常用参数
Copy
''' 以下是一些 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) '''

客户端挂载参数优化#

客户端挂载参数的优化
Copy
''' 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 文件系统的传输能 力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。 '''

内核优化#

内核优化
Copy
''' 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 '''
posted @   SR丶  阅读(609)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS