我们先把话说在前面如果你是奔着RH134红帽系统管理II准备考试去的第9章“访问网络附加存储”这个知识点看着轻巧但考试里出现的概率一点都不低而且实操中一旦踩坑比本地磁盘挂载麻烦得多。这一章的核心不是让背一堆命令而是搞清楚NFS、SMB/CIFS这两种最常见的网络存储协议在Linux客户端上到底怎么挂、怎么用、权限怎么映射、坑在哪里。这篇就是把第9章拆开揉碎结合我平时在环境里实际操作的体会按“先懂原理、再上手、最后排错”的顺序给你捋一遍。1. 这一章到底在讲什么NAS协议基础与课程定位1.1 从RH134的课程地图看第9章的位置RH134是RHCSA认证的核心课程之一紧接着RH124系统管理I往下走。RH124把你训练成能用命令行舒服地管理单机系统而RH134开始把视角转向“多台机器协作了”——包括网络配置、远程shell、时间同步、日志收集以及集成存储。第9章“Accessing Network Attached Storage”正好卡在这个转折点上前面几章在讲YUM仓库、systemd、日志后面几章要讲SELinux、防火墙、调优所以这一章其实是“从本地到网络”的桥。我见过不少人备考时对这一章不太上心觉得“不就是挂载吗mount -t nfs那么一行搞定”。实际考试环境下出题往往不直接说“请你挂载”而是给你一个已存在的共享路径要求你用指定的协议挂载到指定目录并设置正确的挂载选项、确保重启后仍然有效。这些要求结合起来就考到了本章几乎所有重要知识点协议识别、客户端包安装、挂载选项、fstab持久化、autofs甚至还会触碰SELinux的布尔值。所以这一章不仅是一个独立知识模块更是后续系统管理工作的基础设施。1.2 两种主流的网络附加存储协议NFS和SMB/CIFS网络附加存储Network Attached StorageNAS说白了就是一台专门提供文件服务的机器通过网络共享目录其他机器像访问本地文件夹一样访问它。但实现这个“像本地一样”的方式行业里主流就两种。第一种是NFSNetwork File System最早由Sun公司开发现在几乎成为Linux和Unix世界的标准协议。它的核心设计是“服务器导出目录客户端挂载到本地路径”数据流走NFS协议通常用在纯Linux环境、高性能计算、虚拟化存储等场景。NFS的版本有NFSv3和NFSv4RH134考试涉及的通常以NFSv4为主但命令和挂载方式也能兼容v3。NFS优点是性能好、与Linux权限模型深度集成缺点是Windows原生支持很差。第二种是SMB/CIFSServer Message Block / Common Internet File System这是Windows文件共享的原生协议后来经过Samba项目在Linux/Unix上实现了兼容。企业里大量NAS设备群晖、威联通、FreeNAS等为了兼顾Windows和Linux客户端往往同时开NFS和SMB。如果你是Linux小白可能在安装软件时配过yum源里面就有samba-client、cifs-utils之类的包。SMB在跨平台场景下几乎是必须掌握的本事特别是从Linux去访问Windows共享或者反过来让Linux服务器提供Windows共享给同事用。1.3 为什么红帽要单独用一章讲NAS访问红帽课程编排的目的从来不是“教你怎么用一条命令”而是培养一名合格的系统管理员。在真实企业环境中存储不可能每台机器都配本地大容量硬盘一定是集中式存储比如NAS、SAN或者云存储。NAS因为价格便宜、部署简单、支持多协议被大量中小型企业使用。作为Linux管理员你必须能在命令行下把外部共享挂到服务器上还要考虑安全、权限、自动挂载、故障恢复这些生产要求。另外从RHCSA考试大纲来看网络存储挂载是一个明确要被验证的能力点。考试环境会模拟一个局域网里面有存储服务器也有客户端你要在客户端上完成挂载任务。许多考生在本地磁盘操作很熟练一遇到网络挂载就慌原因就是没搞清楚NFS、SMB和本地挂载之间的差异。红帽单独用一章来讲就是逼你系统化掌握这些差异。2. 访问NFS共享的完整实操从客户端挂载到开机自动挂载2.1 安装客户端工具包与手工挂载要用NFS客户端挂载前提是装上对应软件包。RHEL/Rocky/Alma这些发行版上NFS客户端工具是nfs-utils包。很多人以为系统已经自带实际上最小化安装默认不装。你可以在安装阶段勾选或者事后执行dnf install -y nfs-utils安装完成后先检查一下服务器导出了哪些共享。排查问题时这个命令特别有用showmount -e 192.168.1.10输出类似Export list for 192.168.1.10: /data/share 192.168.1.0/24这表示服务器把/data/share目录导出给192.168.1.0/24网段。然后你就可以在客户端手工挂载mkdir -p /mnt/nfs mount -t nfs 192.168.1.10:/data/share /mnt/nfs注意格式这里没有冒号加端口而是“IP:/共享绝对路径”的结构这就是NFS挂载的标准写法。执行后用df -h验证一下df -h /mnt/nfs这里很容易忽略一个细节服务器导出的目录路径必须是绝对路径。如果是相对路径showmount可能会显示但挂载几乎肯定会失败。2.2 配置NFS挂载选项rw、sync、noexec等手工裸挂一个NFS共享生产的配置往往是不够的。mount命令支持通过-o参数指定一堆选项而这些选项很多都会直接影响数据安全性。我在RH134的学习资料里看到常用选项包括rw可读写如果漏写默认是只读你会发现只能在里面读文件一写就报“Read-only file system”。sync同步写入意思是数据先真正写到服务器端才返回给客户端。生产环境推荐开避免异常掉电丢数据。async异步写入性能好一点但可能丢数据个人测试可以用生产不建议。noexec禁止在挂载目录下执行二进制文件安全加固时常用防止有人在共享目录里丢一个脚本然后执行。nosuid不允许setuid位生效同样是加固选项防止特权提升。nodev不识别设备文件加固常用。vers指定NFS版本比如vers4.2当你需要精确控制协议版本时用。一个典型的完整挂载命令如下mount -t nfs -o rw,sync,noexec,nosuid,nodev 192.168.1.10:/data/share /mnt/nfs这里要提醒一句NFSv4有一个特性挂载选项中的某些参数其实是在服务器端全局控制的客户端指定的选项部分无效特别是文件权限相关的属性。真正细究起来有很多官方文档级别的细节考试阶段记住常用选项即可实际运维时再根据环境细调。2.3 使用fstab实现开机自动挂载以及常见的坑课程里考试几乎必考“确保重启后仍然挂载”。生产环境也一样不能让管理员每次开机手动mount。所以必须把挂载条目写进/etc/fstab。正确写法是在fstab里加一行192.168.1.10:/data/share /mnt/nfs nfs rw,sync,noexec,nosuid,nodev 0 0字段从左到右分别是设备、挂载点、文件系统类型、选项、dump备份标志、fsck检查顺序。NFS挂载一般最后两个字段都写0。写完以后立刻测试不要直接重启机器用mount -amount -a会重新读取fstab中所有未挂载的条目并尝试挂载。如果有语法错误或网络不通它会直接报错。但请注意如果当前/mnt/nfs已经被占用了mount -a可能会提示already mounted这时不必惊慌这恰恰说明fstab里那一条没问题。fstab踩坑我整理过几个特别典型的网络未就绪导致挂载失败如果系统里用了NetworkManager管理网络而NFS挂载条目写在fstab中系统启动早期会尝试挂载所有fstab条目此时网络可能还没起来挂载就会失败。解决办法是给fstab条目加上_netdev选项例如nfs rw,sync,_netdev告诉系统等网络就绪后再挂载。端口不是默认的NFSv3依赖portmaprpcbind如果服务器改了端口fstab里也要能对应。NFSv4虽然固定用2049端口但挂载时服务器宕机会导致hang住可以考虑加hard,intr选项让系统在硬挂载失败时能中断等待。fstab写错挂载点挂载点目录必须提前存在写一个不存在的路径会直接挂载失败。这个看似简单很多人就是会忘mkdir。2.4 通过autofs按需挂载NFS共享除了开机自动挂载RH134还介绍了autofs也就是自动挂载服务。autofs的优点在于“用到时挂载不用时自动卸载”非常适合共享目录多、流量大的环境能省资源也能避免滥用mount导致系统维护困难。使用autofs需要安装autofs包dnf install -y autofs配置文件主要有两个主配置是/etc/auto.master子配置一般是/etc/auto.misc或者自定义的映射文件。比如我们想实现“访问 /mnt/nfsdata 下的子目录时自动挂载对应NFS共享”可以在/etc/auto.master里加一行/mnt/nfsdata /etc/auto.nfsdata然后在/etc/auto.nfsdata里写share -fstypenfs,rw,sync 192.168.1.10:/data/share这样只要有人访问/mnt/nfsdata/share系统就会自动执行挂载。要注意的是autofs的挂载点和传统mount有点区别你看到的/mnt/nfsdata是autofs的“父目录”而真正的NFS挂载点会在你访问子路径时才创建。如果想要重启后autofs配置生效需要systemctl enable --now autofs systemctl restart autofs考试里如果问“用autofs挂载”考试环境可能没有图形界面然后你要正确书写映射文件。最稳妥的办法是把auto.master和映射文件的语法都背下来特别是-fstype开头的选项别漏掉连字符。3. 访问SMB/CIFS共享与Windows生态互通的关键3.1 安装客户端工具cifs-utils与mount.cifsLinux访问Windows共享或者Samba共享用的协议是SMB/CIFS。DHCP环境下最常见的场景公司文件服务器是Windows Server或者某个NAS设备开了SMB服务Linux办公机要连上去。首先安装客户端工具包。RHEL系叫cifs-utilsdnf install -y cifs-utils装完后你会多出mount.cifs这个命令通常是/bin/mount.cifs它会被mount命令自动调用。手动挂载的基本格式是mount -t cifs //192.168.1.20/share /mnt/smb -o usernamealice,passwordxxx注意这里的资源路径是//服务器IP/共享名和NFS完全不同。NFS写的是服务器端目录绝对路径SMB写的是共享逻辑名称。如果不想在命令行显式写密码可以用credentials选项指向一个权限为600的凭据文件。我用这个方式很久了安全且便于脚本调用。3.2 凭据文件与安全认证避免明文密码凭据文件是SMB挂载中很实用的管理方式。先在/etc/下创建私密文件例如vim /etc/smb-credentials内容三行usernamealice passwordMyPassw0rd domainEXAMPLE然后设置权限这是重点如果权限太宽cifs挂载会直接拒绝读取chmod 600 /etc/smb-credentials挂载时mount -t cifs //192.168.1.20/share /mnt/smb -o credentials/etc/smb-credentials,vers3.0vers3.0是协议版本。老版本SMB1有严重安全漏洞现在基本不会遇到但为了兼容老设备你可以用vers2.0或vers3.0来限定。如果不指定版本现代客户端会自动协商最高版本但如果服务器是老版本可能协商失败这时就需要显式指定。另外在域环境中Linux客户端如果用域用户访问共享需要设置domain参数。最简单的验证方式挂载成功后用ls -l /mnt/smb看看能否看到文件。3.3 处理Windows域、文件权限与selinux标签当你用SMB挂载Windows共享最头疼的是权限和SELinux。先聊SELinux。RHEL系默认启用SELinux强制模式为Enforcing。当你要挂载SMB共享给Apache服务或者FTP服务使用时SELinux会阻止这些进程读取共享目录。这时候要调整SELinux布尔值。例如如果你想允许Apache访问SMB挂载目录需要开启httpd_use_cifssetsebool -P httpd_use_cifs on如果允许FTP服务访问就是ftpd_use_cifs。这些布尔值在备考RH134时不一定直接考但它是第9章和后面SELinux章节结合得很紧密的知识点实际上机环境里经常会遇到“NFS/SMB挂载后服务进程读不了文件”的问题。文件权限映射是另一个难点。Windows NTFS权限和Linux权限不可能一一对应Samba通过uid/gid映射来近似实现。默认情况下挂载后的共享目录归属于执行挂载命令的用户也可以指定uid1000,gid1000来改变所有者。如果你希望所有文件都以某个用户的身份读写就加上mount -t cifs ... -o uid1000,gid1000,forceuid,forcegid这样操作后ls看到的文件属主会伪装成1000实际文件在Windows侧还是NTFS权限控制但这足以让本地程序按预期工作。还有一个经典坑root用户默认不能通过SMB挂载写文件除非在挂载参数里加上nounix,noserverino等具体取决于服务器端是否支持非标准扩展。4. 权限、安全与SELinuxNAS挂载后真正让你头疼的部分4.1 客户端权限映射UID/GID与文件权限网络存储的权限问题尤其是NFS经常让新管理员怀疑人生。NFSv3时代服务器信任客户端的UID/GID也就是说如果你在本地有一个UID为1000的用户叫alice服务器对应UID 1000的用户是bob那alice访问共享时在服务器看来就是bob。这种信任机制在局域网内还行但会造成很大的安全隐患。NFSv4引入了基于Kerberos的安全认证支持用户级身份验证但配置复杂度高考试一般不会深入。RH134考察的更多是理解“UID映射”这个概念以及如何用anonuid,anongid在服务器端把所有匿名用户映射为指定账户。客户端能做的就很有限关键是在挂载选项里正确设置uid/gid。比如NFS默认挂载后root会被压制成nobody所以你在root下创建一个文件在服务器上看到的所有者是nobody。如果希望root拥有真实权限可以在服务器端导出选项中加no_root_squash但这属于服务器配置不是客户端能改的。实战中我建议所有网络共享统一规划好用户和UID用LDAP或FreeIPA同步用户账户避免UID不一致导致文件所有权错乱。不过对学RH134的读者来说只要知道“服务器怎么看UID、客户端怎么传UID”就够应付考试了。4.2 SELinux对网络挂载的影响RHEL系默认SELinux是Enforcing这意味着网络上挂载来的文件系统默认会被打上nfs_t或cifs_t标签。普通用户访问没问题但像httpd、vsftpd这些有专属SELinux策略的服务进程默认是不允许读写这些标签的文件系统的。我遇过一个排查了很久的案例一台RHEL9 Web服务器把站点文件放在NFS共享上Apache通过DocumentRoot指过去。结果curl访问总是403本地文件权限完全正常SELinux日志里也没有明显AVC。后来发现是没有打开httpd_use_nfs这个布尔值。一条命令解决setsebool -P httpd_use_nfs onSMB同理用httpd_use_cifs。如果你打算用Samba提供共享然后让本地其他服务访问这个共享务必先检查SELinux布尔值。另外挂载点本身的标签也可能需要调整用chcon -t httpd_sys_content_t /mnt/nfs可以临时修改但不如布尔值标准。4.3 firewall配置与多路径冗余简单提及访问NAS不只涉及客户端服务器那边的防火墙也要放行相应服务。NFS依赖的服务端口比较多特别是NFSv3依赖rpcbind动态端口范围很大NFSv4则相对简单主要放行2049/tcp。作为客户端一般不需要改防火墙但如果你是NFS服务器要确保firewall-cmd --add-servicenfs --permanent firewall-cmd --add-servicerpc-bind --permanent firewall-cmd --add-servicemountd --permanent firewall-cmd --reloadSMB服务器则放行samba服务firewall-cmd --add-servicesamba --permanent firewall-cmd --reload多路径冗余这个知识点在RH134只是一笔带过重要是理解NFS本身并不支持基于多路径的负载均衡它更依赖服务器端存储架构。如果网络不稳定客户端可以设置timeo、retrans等NFS调优参数。比如mount -t nfs -o timeo50,retrans3,hard 192.168.1.10:/data/share /mnt/nfstimeo单位是0.1秒50代表5秒。这是一个实际运维经常要用到的参数调节方式考试可能会选其中一两个考察。5. 常见问题排查与考试易错点5.1 NFS挂载后无法写入最经典的现象mount成功能ls但touch文件报“Permission denied”。排查思路按顺序来检查服务器导出目录权限服务器端对导出目录是否有写权限比如目录属主是nobody但客户端映射成某个用户了。检查导出时是不是设置了ro选项cat /etc/exports如果写的是/data/share 192.168.1.0/24(ro)那所有客户端都是只读。 3. 检查是否启用了root_squash如果客户端以root挂载写文件到服务器时会被映射为nobody而nobody在共享目录上没写权限。可以在服务器临时改成no_root_squash测试但生产不要用。 4. 检查SELinux特别是如果共享目录被用于httpd等服务。5.2 SMB中文乱码与挂载参数跨语言环境的SMB共享容易出现中文文件名乱码。因为Windows默认用GBK编码文件名而Linux大多用UTF-8。挂载时加iocharsetutf8可以解决大部分问题mount -t cifs //192.168.1.20/share /mnt/smb -o credentials/etc/smb-credentials,iocharsetutf8如果服务器端文件名是GBK且客户端用UTF-8显示可以试试codepagecp936但现代SMB协议一般能自动协商字符集。另外一个常见的报错是“CIFS VFS: cifs_mount failed w/return code -13”这多半是认证失败检查凭据文件路径、密码是否错误、是否使用域用户。5.3 autofs常见细节autofs的报错往往让你摸不着头脑明明配置没问题访问目录却提示no such file or directory。这时要检查一行/etc/auto.master中父目录权限和挂载点目录是否存在。autofs不会自动创建父目录你要先mkdir -p。然后是映射文件权限——通常autofs要求映射文件是644不能是600。还有一点映射文件里写的子目录名不能带斜杠share -fstypenfs,rw,sync 192.168.1.10:/data/share千万不要写/share。访问时就是cd /mnt/nfsdata/share。调试常用命令automount -f -v在前台运行并输出详细调试信息能看到它尝试执行什么命令。这招在实际排错时比反复看日志快得多。5.4 考试易错点清单根据我自己备考和带人经验整理了一张表考前过一遍很管用。易错点正确做法错误示范NFS挂载点目录不存在先mkdir再mount直接mount报“mount point does not exist”fstab缺少_netdev加上_netdev重启后挂载失败卡在等待网络SMB凭据文件权限过大chmod 600“Credentials file is insecure”autofs映射文件写错子目录不加前导/访问时匹配不上NFS选项漏掉rw显式写rw挂载成功但只读SELinux布尔值没打开setsebool -P httpd_use_nfs onApache拒绝访问NFS目录使用vers指定SMB版本根据服务器设置vers3.0老设备协商不了直接挂载失败考试时机考环境经常故意不给提示比如一个共享挂载完成后你可以尝试创建文件验证rw是否有效。另外NFS协议里sync这个选项我在课程里强调过考试如果要求设置千万别漏。有的考试模拟器还会检查fstab里的选项顺序是否和题目一致多写一个选项有时也不给分所以先看题目对挂载选项的明示要求。最后再分享一个实际工作中的体会网络存储挂载这件事情平时看着简单真出了问题性能瓶颈、数据安全、权限混乱都会在这里暴露。我见过有人把NFS挂载服务端配置成async结果服务器重启后整个数据库目录损坏气得项目经理直拍桌子。所以即使你只是在学RH134也建议你从一开始就养成习惯——每一次挂载都明确三个问题用什么协议、用什么选项、掉电后能不能容忍数据丢失。把这些想清楚了无论是考试还是工作网络存储都不会再成为你的拦路虎。
阅读完成 · 觉得有帮助?