内容简介:NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。..
一、了解一下
1.NFS
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
好处:
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
.
.
2.Samba
Samba是在 Linux 和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
好处:
- 分享档案与打印机服务;
- 提供使用者登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据;
- 进行 Windows 网络上的主机名称解析 (NetBIOS name)
- 进行装置的分享 ( 例如 Zip, CDROM... )
.
.
3.FTP
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。
好处:
- 分享文件和资料
- 用户访问控制,身份认证
- 多平台可以访问ftp服务器,比如:Linux,Windows,Mac os等等
- 定向共享文件,文件访问权限设置
- 限制登录用户的根目录
.
.
.
二、动手实现
1.NFS
1.1语法:
nfsstat(选项) -s:仅列出NFS服务器端状态; -c:仅列出NFS客户端状态; -n:仅列出NFS状态,默认显示nfs客户端和服务器的状态; -2:仅列出NFS版本2的状态; -3:仅列出NFS版本3的状态; -4:仅列出NFS版本4的状态; -m:打印以加载的nfs文件系统状态; -r:仅打印rpc状态。
1.2 安装
[root@linuxview ~]# yum install -y nfs-utils
1.3配置
NFS的常用目录 /etc/exports NFS服务的主要配置文件 /usr/sbin/exportfs NFS服务的管理命令 /usr/sbin/showmount 客户端的查看命令 /var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值 /var/lib/nfs/xtab 记录曾经登录过的客户端信息 [root@linuxview ~]# vim /etc/exports [root@linuxview ~]# cat /etc/exports /server/source 192.168.0.0/16(rw,no_root_squash,sync) [root@linuxview ~]# systemctl restart nfs [root@linuxview ~]# cd /server/source/ [root@linuxview source]# touch linuxview.txt [root@linuxview source]# echo hello >> linuxview.txt [root@linuxview source]# ls linuxview.txt [root@linuxview source]# systemctl status nfs ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Active: active (exited) since Thu 2018-09-13 22:36:14 CST; 6s ago Process: 2695 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS) Process: 2692 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS) Process: 2690 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS) Process: 2715 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 2708 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS) Process: 2707 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 2715 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Sep 13 22:36:14 linuxview systemd[1]: Starting NFS server and services... Sep 13 22:36:14 linuxview systemd[1]: Started NFS server and services. [root@linuxview source]#
1.4 客户端挂载
[root@web2 ~]# showmount -e 192.168.1.9 Export list for 192.168.1.9: /server/source 192.168.0.0/16 [root@web2 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 17811456 2445572 15365884 14% / devtmpfs 1919556 0 1919556 0% /dev tmpfs 1931784 4 1931780 1% /dev/shm tmpfs 1931784 11824 1919960 1% /run tmpfs 1931784 0 1931784 0% /sys/fs/cgroup /dev/sda1 1038336 145092 893244 14% /boot tmpfs 386360 0 386360 0% /run/user/0 [root@web2 ~]# mount -t nfs 192.168.1.9:/server/source /mnt/ [root@web2 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 17811456 2445592 15365864 14% / devtmpfs 1919556 0 1919556 0% /dev tmpfs 1931784 4 1931780 1% /dev/shm tmpfs 1931784 11828 1919956 1% /run tmpfs 1931784 0 1931784 0% /sys/fs/cgroup /dev/sda1 1038336 145092 893244 14% /boot tmpfs 386360 0 386360 0% /run/user/0 192.168.1.9:/server/source 17811456 2445312 15366144 14% /mnt [root@web2 ~]# cd /mnt/ [root@web2 mnt]# ls linuxview.txt [root@web2 mnt]# cat linuxview.txt hello [root@web2 mnt]#
1.5 参数说明
exports文件的编写格式
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
输出目录为NFS目录,客户端为要连接到NFS的客户端,访问权限指客户端的操作权限,用户映射可以限制用户权限
客户端常用的指定方式
指定ip地址的主机 192.168.0.200
指定子网中的所有主机 192.168.0.0/24
指定域名的主机 a.liusuping.com
.liusuping.com
访问权限选项
设置输出目录只读 ro
设置输出目录读写 rw
用户映射选项
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash 与all_squash取反(默认设置);
root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash 与rootsquash取反;
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async 将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
no_wdelay 若有写操作则立即执行,应与sync配合使用;
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
2.Samba
2.1 安装
[root@linuxview ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@linuxview ~]# uname -a Linux linuxview 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@linuxview ~]# getenforce Disabled [root@linuxview ~]# yum install -y samba samba-client samba-swat
2.2 共享文件
[root@linuxview ~]# useradd linuxview [root@linuxview ~]# smbpasswd -a linuxview New SMB password: Retype new SMB password: Added user linuxview. [root@linuxview ~]# vim /etc/samba/smb.conf [smbshare] comment = share path = /server/data browseable = yes writable = yes available = yes admin users = linuxview valid users = linuxview public = yes [root@linuxview ~]# mkdir -p /server/data [root@linuxview ~]# systemctl restart smb [root@linuxview ~]# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2018-09-16 13:57:17 CST; 3s ago Main PID: 28641 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service ├─28641 /usr/sbin/smbd --foreground --no-process-group ├─28643 /usr/sbin/smbd --foreground --no-process-group ├─28644 /usr/sbin/smbd --foreground --no-process-group └─28645 /usr/sbin/smbd --foreground --no-process-group Sep 16 13:57:17 linuxview systemd[1]: Starting Samba SMB Daemon... Sep 16 13:57:17 linuxview smbd[28641]: [2018/09/16 13:57:17.272004, 0] ../lib/u...y) Sep 16 13:57:17 linuxview smbd[28641]: STATUS=daemon 'smbd' finished starting ...ns Sep 16 13:57:17 linuxview systemd[1]: Started Samba SMB Daemon. Hint: Some lines were ellipsized, use -l to show in full.
2.3 客户端挂载
Windows访问
Linux访问挂载
[root@client ~]# smbclient -U linuxview //192.168.1.9/smbshare Enter SAMBA\linuxview's password: Try "help" to get a list of possible commands. smb: \> ls . D 0 Sun Sep 16 17:59:15 2018 .. D 0 Sun Sep 16 13:50:31 2018 test N 0 Sun Sep 16 17:05:39 2018 17811456 blocks of size 1024. 15328676 blocks available 挂载文件 [root@client /]# #mount //192.168.1.9/smbshare /mnt -o username=linuxview [root@client /]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 17811456 2472244 15339212 14% / devtmpfs 1919556 0 1919556 0% /dev tmpfs 1931784 4 1931780 1% /dev/shm tmpfs 1931784 11836 1919948 1% /run tmpfs 1931784 0 1931784 0% /sys/fs/cgroup /dev/sda1 1038336 145092 893244 14% /boot tmpfs 386360 0 386360 0% /run/user/0 [root@client /]# mount //192.168.1.9/smbshare /mnt -o username=linuxview Password for linuxview@//192.168.1.9/smbshare: ****** [root@client /]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 17811456 2472244 15339212 14% / devtmpfs 1919556 0 1919556 0% /dev tmpfs 1931784 4 1931780 1% /dev/shm tmpfs 1931784 11836 1919948 1% /run tmpfs 1931784 0 1931784 0% /sys/fs/cgroup /dev/sda1 1038336 145092 893244 14% /boot tmpfs 386360 0 386360 0% /run/user/0 //192.168.1.9/smbshare 17811456 2482316 15329140 14% /mnt [root@client /]# cd /mnt/ [root@client mnt]# ls test [root@client mnt]#
2.4 Samba共享目录下操作命令
smb: \> help ? allinfo altname archive backup blocksize cancel case_sensitive cd chmod chown close del deltree dir du echo exit get getfacl geteas hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer notify open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink posix_whoami print prompt put pwd q queue quit readlink rd recurse reget rename reput rm rmdir showacls setea setmode scopy stat symlink tar tarmode timeout translate unlock volume vuid wdel logon listconnect showconnect tcon tdis tid logoff .. ! smb: \>
3.FTP
3.1 安装
[root@linuxview ~]# yum install -y vsftpd
3.2 创建ftp用户
[root@linuxview ~]# useradd ftpuser [root@linuxview ~]# passwd ftpuser Changing password for user ftpuser. New password: BAD PASSWORD: The password is a palindrome Retype new password: passwd: all authentication tokens updated successfully. [root@linuxview ~]# getenforce Disabled [root@linuxview ~]#
3.3 启动ftp服务
[root@linuxview ~]# service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@linuxview ~]# ps -aux |grep vsftpd Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 2587 0.0 0.0 52124 812 ? Ss 21:34 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 2591 0.0 0.0 103324 856 pts/0 S+ 21:35 0:00 grep vsftpd [root@linuxview ~]#
3.4 客户端访问并挂载
浏览器访问:
命令行访问:
三、原理分析
1.NFS
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
工作流程原理:
当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程如下几点:
首先用户访问网站程序,由程序在NFS客户端上发出NFS文件存取功能的询问请求,这时NFS客户端(即执行程序的服务器)RPC服务(portmap 或rpcbind服务)就会通过网络向NFS服务端的RPC服务(即portmap或rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
NFS服务端的RPC服务(即portmap或rpcbind服务)找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务(即portmap或rpcbind服务)。
此时NFS客户端就可获取到正确的端口,然后就直接与NFS daemon联机存取数据了。
NFS客户端把数据存取成功后,返回给前端程序,告诉用户存取结果,作为网站用户,我们就完成了一次存取操作。
由于NFS的各项功能都需要向RPC服务(即portmap或rpcbind)注册,所以RPC服务(即portmap或rpcbind服务)才能获取到NFS服务的各项对应的端口号(portnumber)、PID、NFS在主机所监听的IP等,而NFS客户端才能够通过向RPC服务(即portmap或rpcbind服务)询问从而找到正确的端口。也就是说,NFS需要有RPC服务(即portmap或rpc服务),NFS服务只需在服务端后于RPC服务启动,客户端无需启动NFS服务。
NFS的rpc服务,在CentOS5.X下名称为portmap,在CentOS6.x下名称为rpcbind。
2.Samba
SAMBA主要提供的是SMB/CIFS或者NETBIOS协议的。
所以只要使用了SAMBA,就能实现让Linux出现在Windows的网上邻居里,或者,让Windows的文件共享在Linux上--
一旦在linux上安装之后,有两个主要进程:
1.nmbd :提供NETBIOS 名称解析的
2.smdb : 提供文件共享的。
而由于NETBIOS协议对于windows来讲监听TCP的139端口和UDP的137,138端口 ,所以nmbd在linux上模拟出了udp的137和138端口,以及tcp的139端口,smdb上模拟出 tcp的445端口。而SAMBA将在Linux上同时监听这4个端口。
主要部分
两个守护程序:smbd 和 nmbd(对客户端提供NetBIOS名服务)
配置文件:/etc/smb.conf
使用工具:smbclient,smbstatus,smbmount,smbumount,smbprint,smbprint.sysv,smbrun
samba的启动脚本在/etc/rc.d/init.d/smb
3.FTP
FTP的传输使用的是TCP封包协议。 FTP服务器使用了两个联机,分别是: 命令信道 数据流通道(ftp-data)
两个联机通道的关系是怎么样的?以FTP预设的主动式(active)联机来做说明:
主动指的是FTP服务器主动联机客户端,作为数据通道;
建立命令通道的联机
客户端会随机取一个大于 1024 以上的端口 (port AA) 来与 FTP服务器端的 port 21 达成联机, 这个过程当然TCP三次握手了!
达成联机后客户端便可以透过这个联机来对 FTP 服务器下达指令, 包括查询文件名、下载、上传等指令
通知 FTP 服务器端,使用 active 且告知连接的端口号
客户端在需要数据的情况下,会告知服务器端要用什么方式来联机,如果是主动式 (active) 联机时, 客户端会先随机启用一个端口号 (图21.1-1 当中的 port BB) ,且透过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的联机;
FTP 服务器『主动』向客户端联机
FTP 服务器由命令通道了解客户端的需求后,会主动的由 20 这个端口号向客户端的 port BB 联机, 这个联机当然也会经过TCP三次握手!此时 FTP 的客户端与服务器端共会建立两条联机,分别用在命令的下达与数据的传递。 而预设 FTP服务器端使用的主动联机端口号就是 port 20 !
如此一来则成功的建立起『命令』与『数据传输』两个信道!不过,要注意的是,数据传输信道是在有数据传输的行为时才会建立的通道喔!并不是一开始连接到FTP 服务器就立刻建立的通道
由上可见,主动式联机使用到的端口号:
命令通道的 ftp (默认为 port 21)
数据传输的 ftp-data (默认为 port 20)
在主动联机的 FTP 服务器与客户端之间具有防火墙的联机问题
一般来说,很多的局域网络都会使用防火墙(iptables) 的 NAT 功能,那么在 NAT 后端的 FTP 用户如何连接到 FTP 服务器呢?
服务器主动连到 NAT 等待转递至客户端的联机问题:
由于透过 NAT 的转换后, FTP 服务器只能得知 NAT 的 IP 而不是客户端的IP , 因此 FTP 服务器会以 port 20 主动的向 NAT 的 port BB 发送主动联机的要求。 但你的 NAT 并没有启动 port BB 来监听 FTP 服务器的联机啊!
解决办法:
使用iptables所提供的FTP侦测模块
ip_conntrack_ftp 及 ip_nat_ftp 等模块主动的分析『目标是 port 21 的联机』信息,得到port BB 的资料,
此时若接受到 FTP 服务器的主动联机,就能够将该封包导向正确的后端主机了。
客户端选择被动式(Passive)联机模式
主动式,是指 服务器主动联机客户端。那被动式,就是客户端联机服务器。这里都是指的数据传输联机。
21.1.3 客户端选择被动式联机模式
用户与服务器建立命令信道
客户端发出 PASV 的联机要求
发出联机要求,病等待服务器的回应
FTP 服务器启动数据端口口,并通知客户端联机
这个端口号码不是主动式的port 20 ,而是随机的。
告知客户端这个 port PASV;
客户端随机取用大于 1024 的端口号进行连接
以上所述就是小编给大家介绍的《运维进阶:文件共享服务全攻略》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- XXE萌新进阶全攻略
- 浏览器缓存机制全攻略 - 前端
- Spark Streaming应用与实战全攻略
- 图数据库 TigerGraph 使用全攻略
- 少女风vue组件库制作全攻略~~
- Wordpress 容器化、HTTPS化全攻略
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。