ID:Computer-network

本文将学习如何将文件系统中精心定义的部分呈现给可信的客户端,以便其能在这些文件和文档上进行协作。不需要像使用Nextcloud那样创建单独的文档存储,因为客户将能够访问位于本地上的文档。这在许多常见的场景中都很实用:

● 当希望员工能够登录到整座大楼的所有物理工作站,并能够立即访问他们自己的主目录中的文件时。

● 当希望无论何时何地都能给适当团队的成员提供特定的可用数据集合时。

● 当想给某些工作者提供完整的文档读/写权限,而只给予其他人只读权限时。

随后我们将介绍如何设置Samba,它是与客户端共享基于的文档的首选工具。但是我们的大部分注意力将集中在使用NFS来实现多个系统之间的整体协作。

1、通过网络文件系统共享文件

个人是如何仅通过网络共享文档的全部访问权限的呢?如图1所示,网络文件系统的工作方式允许客户机挂载驻留在上的特定目录,就像它们是本地分区一样。一旦挂载,无论是命令行级别还是桌面GUI,目录的内容将在客户端系统上可见。

图1 在远程客户端上挂载的共享文件将显示为本地资源

通过挂载外设媒体驱动器的方式允许来自文件系统的访问。如下所示:

这里将使用mount命令,将NFS上的目录挂载为本地分区。不过,在到达那一步之前,我们还有一些事情要处理。在这里,将一步一步告诉大家怎么做:

1)在上安装NFS;

2)通过/etc/exports文件定义客户端对资源的访问;

3)在上更新NFS;

4)在客户端安装NFS;

5)挂载一个NFS共享;

6)配置NFS共享以在启动时挂载;

7)打开任正在运行的(如果有必要的话)。

(1)设置NFS服务器

下面展示如何在上共享主目录,以便多个用户能够访问内容。对于CentOS,要安装的软件包是nfs-utils。在Ubuntu上,则是nfs-kernel-server。

也可以在LXC(Linux Container)上安装NFS软件,并使它误认为可以对内核进行足够的访问以正常运行,但不值得花费时间。如果想虚拟化这个实践,请坚持使用VirtualBox。

无论哪种方式,将要使用的配置文件被称为exports,它位于/etc/目录中。至少在Ubuntu上,该文件附带了一些有用的示例指令,每个指令都禁用了#注释字符。对于我们的简单示例(假设客户端使用的IP地址是192.168.1.11)来说,这是文件需要的唯一活动行:

让我们来分析一下:

●/home告诉NFS,希望在上公开/home目录及其所有的子目录。只要不涉及敏感的系统数据或个人数据,就可以随意公开任何喜欢的目录。

●192.168.1.11是想要访问的NFS客户端的IP地址。

●rw将公开目录中文件的读写权限分配给该客户端。

●sync在回复请求前将更改写入磁盘,以此来维护一个稳定的环境。

默认的NFS值包括ro(只读,意味着写操作被禁止)和root_squash(客户端用户不允许在上以root身份执行操作,无论他们在自己的系统上处于什么状态)。这两种设置都为及其文件提供了保护。如果正在尝试开放一些作为某种知识库的资源,那么默认值设置将发挥最佳作用。

如果想重写root_squash默认值并允许用户执行root操作,则需要添加一个名为no_root_squash的值。尽管这样做可能存在严重的安全,但当需要客户端用户对系统文件执行管理工作时,no_root_squash有时会是必要的。其形式如下所示:

假设存在一个用例场景,该场景为公司所有用户提供一个基于网络主目录层次的结构,希望开放对多个客户端的访问。下一个示例将允许来自本地网络任何地方的任何人挂载并使用的/home/目录。其假设所有可以访问192.168.1.0网络的用户都是所信任的。然而,如果可以通过服务访问该网络,那么这可能不是一个好主意:

在中标点符号和拼写同样重要。请注意,192.168.1.11(rw,sync)意味着来自192.168.1.11的客户端将获得读/写权限。但为了直接读取192.168.1.11(rw,sync),在IP地址和括号之间增加一个空格会给所有人提供rw权限,而从192.168.1.11 IP地址登录的客户端将获得默认的只读权限!

完成对导出文件的编辑后,需要运行exportfs来强制NFS采用新设置。或许会看到一个通知:告诉子树检查在默认情况下是禁用的。这次更改的目标是默认行为,它是默认行为的原因是对于多数现代用例,通常不值得为其费心:

exportfs_exportfs_exportfs

子树检查的作用是,确保文件使用与管理基于的系统和导出树两者的策略相一致。

可以用exportfs查看任何当前公开给客户的NFS文件系统:

为了便于从客户端测试共享文件,在上的主目录中创建一个新文件,并添加一些文本。如果在CentOS上运行NFS,不要忘记打开(默认情况下是完全运行的)并启动NFS(默认情况下会停止)。其形式如下所示:

exportfs_exportfs_exportfs

现在已经做好在客户端上设置NFS的前期准备了。

(2)建立客户端

相较于设置而言,客户端的建立是简单快捷的。安装与CentOS上相同的nfs-utils包,在Ubuntu上安装nfs-common包。到目前为止还剩下两个步骤要做。

首先,创建一个用以挂载文件系统的新目录。然后使用NFS的IP地址和在/etc/export配置文件中公开的文件系统地址挂载它:

此时,应该能够打开和编辑共享文件。到创建的挂载点,应该至少找到一个子目录,它属于的主用户(本例中是ubuntu)。进入目录,尝试打开、编辑和保存文件,然后返回,看看是否可以看到更新后的新版本:

exportfs_exportfs_exportfs

下面是一些可供考虑的故障排除技巧:

● 确保在客户端和之间有基本的网络连接,并且能够真正进行通信。从ping客户端的IP地址和从客户端ping的IP地址(例如,ping 192.168.1.23),并确认得到了适当的响应。

● 确保没有阻止通信。默认情况下,NFS需要打开 2049端口来完成工作。如果使用的是ufw,则不需要记住端口号:ufw allow nfs将会完成这项工作(关于可用服务别名的完整列表,请参阅/etc/services文件)。

● 确保NFS在上正常运行。使用exportfs检查配置,使用exportfs-a验证是否使用了最新版本的NFS。

● 确保的IP地址没有被改变。如果从DHCP动态地获取IP,很容易发生IP地址改变。理想情况下,NFS应该使用静态地址。可以通过更新/etc/fstab中的指令暂时解决这个问题。

如果想从客户端卸载NFS,请使用umount命令:

(3)在引导时挂载NFS共享

可以在每次引导时运行mount命令,但这种习惯可能不会持续太久。相反,可以通过编辑/etc/fstab文件(如图2所示),让在每次引导时自动挂载共享。

图2典型的/etc/fstab文件的内容

一个活动的fstab行将包括6个字段,包含列表中每个设备的信息片段(参见表1)。

表1 fstab文件中的字段

一些fstab选项包括exec(或noexec),用于控制二进制文件是否可以从文件系统执行,ro将访问限制为只读,rw用于允许读写访问,defaults调用默认设置(rw、suid、dev、exec、auto、nouser和async)。

fstab文件最初是在安装期间对附加硬件设备进行引用填充的。作为管理员,有权添加自己的设备,以便将它们也挂载在引导程序中。记住设备被引用的方式。为NFS共享添加新行(在客户端的fstab文件中)可能是这样的:

重新启动客户端。这一次,不要手动挂载NFS共享,而是立即转到应该挂载它的目录(/nfs/home/),以确保能够看到基于的文件。如果它在那里,那么知道fstab已经完成了工作。自行运行mount命令,除了一长串其他文件系统之外,还应该看到新的NFS共享与分配给它的选项,如图3所示。

图3客户机上挂载的文件系统的部分输出

(4)NFS安全性

如果将NFS放在自己的设备上,它将不会对在之间来回传输的数据进行加密。应该只在私人空间使用它。

当不能从外部使用常规访问规则访问网络时,我们称其为私有网络。不会墨守成规。或者更准确地说,他们可能会生成并部署他们自己的自制规则。

如果NFS共享的安全性取决于对办公室人员的信任程度,那么它可能需要一些改进。这并不是说永远都不应该相信认识并一起工作的人,而是说不能总是确信他们的工作站和账户没有被外人。也不能确定没有人从外面监听网络流量。

通常的处理方法是遵循最小特权原则(principle of least privilege):永远不要打开绝对必要范围以外的资源,也不要给用户(或客户)提供超出他们完成工作所需的访问权限。例如,如果客户端不需要编辑文件,那么一定要在/etc/exports文件中传递ro(只读)选项。或者,如果客户端只需要访问目录层次结构中的一些文件,那么将其他所有文件排除在外。

防火墙规则

一个重要的防线是。如果可信私有网络中有任何独立的工作站不需要访问NFS,请锁定它们:

在CentOS平台上,锁定方式如下:

exportfs_exportfs_exportfs

说到锁定,在NFS上更改规则之后,可能需要在NFS共享完全被阻塞之前重新启动客户机。

有时候,希望托管的不仅仅是NFS文件,还包括开发人员或管理团队在他们自己的上工作时所需的不相关的数据存储和配置文件。下面是如何阻止IP为192.168.1.10的笔记本的开发人员访问上的NFS,同时保持对其他资源的完全访问:

要测试这一点,请考虑在NFS上安装Apache 和NFS。如果NFS共享在客户端上加载失败,但是您仍然可以访问上的应用程序,那么就知道自己找到了最佳位置:

exportfs_exportfs_exportfs

加密

与往常一样,限制对资源的访问并不意味着在和客户机之间传输的数据是安全的——至少在数据没有被加密的情况下是这样。如果只在本地私有网络中传输数据,并且确信它确实是本地的和私有的,那么依赖于已经做的工作,是可以被原谅的。但是,任何跨越不安全网络的数据都需要额外的保护。

下面是一些简单的解决问题的方法:

● 可以在VPN上运行NFS共享,就像在使用VPN加密数据传送一样。

● IPSec协议通过防止IP欺骗和包篡改来保护IP网络级别上的数据。它使用会话密钥对IP包中包含的所有数据进行加密。可以将IPSec配置为隧道,从广义上讲,它将以类似于OpenVPN隧道的方式工作。

● NFS可以配置为另一种运行底层SSH会话的隧道。如果遇到不寻常的用例,有多个可用选项总是好的。注意,这是非标准选项。

● 假设已经在运行Kerberos身份验证并将其作为基础设施的一部分,使用的是NFS v.4及以上版本,那么在NFS配置中添加一行sec=krb5p将把问题的管理工作交给Kerberos。

● 最后,替代NFS的一种选择是SSH文件系统(SSHFS)。类似地,SSHFS将文件系统挂载为本地卷,但是使用用户空间文件系统(FUSE)软件接口通过SFTP协议工作。

2、使用Samba与Windows用户共享文件

如果办公室网络中包括需要从 PC端访问基于的文件的用户,那么Samba是一种既简单又极其复杂的解决方案。建立一个如同将要演示的基本连接并不需要太多的工作。但是,将身份验证与活动目录域集成,或者在上与SELinux较劲,可能会带来更大的麻烦。

可以通过只在Ubuntu上安装samba和smbclient包的方式绕过这一难点。对于CentOS,运行yum相比于samba*可以更简单地获取整个与Samba相关的工具集合(请记住:*字符解释为返回包含前面文本的所有结果)。接下来的过程是这样展开的:

1)在上创建一个Samba用户账户;

2)指定一个共享目录;

3)通过编辑smb.conf文件定义共享;

4)测试配置;

5)从客户端连接。

需要使用名为smbpasswd的程序来设置一个Samba用户作为客户端用于登录的账户。但是,由于Samba权限将被添加到现有账户中,因此首先应该创建一个新的账户。这里把账户命名为sambauser,可以选择任何喜欢的名字:

接下来,可以创建一个用作共享的目录。我们将沿用NFS共享模式。为了便于以后的测试,将在新目录中创建一个文件。因为多个客户端可能最终会使用这个目录中的文件,所以可以通过使用chmod命令将目录权限提升到777(所有用户都拥有读写和执行权限)来避免潜在的权限问题:

exportfs_exportfs_exportfs

到现在为止,Samba环境就全部构建完成了。现在可以向/etc/samba/目录下的smb.conf文件中添加一个配置。应该浏览配置文件,对定制的可能性大小以及事情的复杂程度有一个直观的感受:

只需要添加一个单独的部分来定义共享。把共享叫作共享之家,如图4所示。这两个条目都绝对包含path,它指向计划用于共享文档的目录,并且假设希望客户机能够创建和编辑文件,将writable属性值设为yes。完成之后,保存文件并关闭文本编辑器。

exportfs_exportfs_exportfs

图4/etc/samba/smb.conf文件中的文件共享配置部分

现在使用systemctl命令启用Samba守护。Ubuntu用smbd标识Samba,但是在CentOS上记作smb(没有d):

(1)测试Samba配置

在深入研究之前测试配置总是一个好主意,因此运行testparm命令将展示添加的部分是否可以被Samba服务正确读取。以下输出表明一切正常:

在邀请好友加入之前还有一个测试:可以使用smbclient程序从本地登录到Samba共享。首先需要将用户(su)切换到前面与Samba关联的sambauser账户。然后,可以针对共享的地址和名称(//localhost/sharehome)来运行smbclient:

exportfs_exportfs_exportfs

在本例中,正如从命令行提示符中看到的,已经被放入Samba 中。运行ls以显示内容,应该会看到创建的myfile文件:

exportfs_exportfs_exportfs

如果在CentOS上运行这个演示程序,发现自己无法访问共享中的文件,可能是因为SELinux妨碍了您:

如果有保护,那么需要打开一些端口以便Samba可以进出。但是需要的特定端口至少在一定程度上取决于在Samba配置中所包含的内容。Kerberos、LDAP、DNS和NetBIOS是与Samba一起运行的通用服务。

在上使用netstat扫描Samba使用的端口(使用smbd搜索术语)将提供基本系统上的关键端口。以下示例返回139和445,但还有更多返回值:

exportfs_exportfs_exportfs

(2)从Windows访问Samba服务器

在客户机上,创建一个指向上的Samba共享位置的桌面快捷方式。假设的IP地址是192.168.1.23,并且给Samba共享的名称是sharehome,那么将输入的地址如下:

要连接上述地址,用户必须使用前面创建的 Samba用户名和进行身份验证,除非选择将Samba身份验证与 Active Directory域集成在一起。从长远来看,这比简单的更有效,也更安全。

3、使用符号链接与自己共享文件

用户有时会想与自己共享文件。创建符号链接(也称为symlink)可以实现这一点。

前面介绍了使用NFS共享让用户访问一个中心/home/目录。目的是让任何用户在办公室的任何工作站稳住脚跟,通过创建的/nfs/home/目录立即开始使用自己的文档。

但是,如果不是所有用户都很熟悉文件系统层次结构(更不用说命令行了),又该怎么办呢?也许有些用户不知道他们的文件在文件系统中的位置。请随意创建一个符号链接,例如,一个挂载的共享目录,该目录将显示在用户的GUI桌面上。

GUI 系统上的用户账户在/home/username/目录中有一组子目录(比如文档和图片),用户可以在这些子目录中方便地组织文档。其中一个子目录被称为Desktop,保存到其中的任何文件都将作为图标显示在GUI屏幕上,用户登录时将首先看到GUI屏幕上的图标。请记住,在用户首次登录新账户之前,这些子目录不会被创建。

用ln命令创建一个符号链接,后面跟着-s参数、想要链接的文件系统对象以及想要链接所处的位置:

关键在于参数-s。s代表符号,这意味着必须创建一个与众不同的链接。实际上,默认情况下,ln会创建一个硬链接。

但是硬链接和符号链接有什么区别呢?符号链接(symbolic link)指向一个单独的文件系统对象。对符号链接进行读取、执行或编辑操作将对链接对象进行读取、执行或编辑操作。但如果移动或删除原始的符号链接,成为一个只是指向一个独立对象的指针,它就会崩溃。

相比之下,硬链接(hard link)是对目标的精确复制,以致两个文件将共享一个inode。inode是描述对象属性的元数据,特别是它在文件系统中的位置。

让我们看看这一切是如何运作的。创建两个文件,并为每个文件添加不同的文本。现在为其中一个文件创建硬链接,为另一个文件创建符号链接:

exportfs_exportfs_exportfs

使用i参数运行ls以显示inode ID。注意,硬链接的文件共享相同的inode ID号。还要注意file2-sym文件如何指向file2:

exportfs_exportfs_exportfs

如果要删除、重命名或移动file2,它的符号链接将会断开,并且根据的配色方案,以鲜明的红色背景显示出来。另一方面,硬链接将经受住对原始文件的所有改变。自己尝试一下:重命名file1和file2文件,看看它们各自的链接会发生什么变化:

再次运行ls-il时,可能会注意到,即使在使用mv重命名file1之后,file1-hard仍然存在,更重要的是,它仍然与newname1共享同一个inode。对其中一个文件的任何编辑都会在另一个文件中反映出来。不幸的是,file2-sym已经成为孤儿。

硬链接在中被广泛使用,但是它们的目的并不总是那么明显。在一个常见的用例中,即使文件保存在文件系统中的不同位置,它们也会链接在一起。这可以使备份重要但分散的配置文件更容易,而不必定期生成新副本。而且由于硬链接不会占用任何空间,不必担心额外的磁盘消耗。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注