Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節簡述:

本章首先通過比較文件傳輸和文件共享這兩種資源交換方式來引入Samba服務的理論知識,并介紹SMB協議與Samba服務程序的起源和發展過程。然后通過實驗的方式部署文件共享服務來深入了解Samba服務中相關參數的作用,并在實驗最后分別使用Windows系統和Linux系統訪問共享的文件資源,確保讀者徹底掌握文件共享服務的配置方法

本章還講解了如何配置網絡文件系統(Network File System,NFS)服務來簡化Linux系統之間的文件共享工作,以及通過部署NFS服務在多臺Linux系統之間掛載并使用資源。在管理設備掛載信息時,使用autofs服務不僅可以正常滿足設備掛載的使用需求,還能進一步提高服務器硬件資源和網絡帶寬的利用率。

劉遄老師相信,當各位讀者認真學習完本章內容之后,一定會深刻理解在Linux系統之間共享文件資源以及在Linux系統與Windows系統之間共享文件資源的工作機制,并徹底掌握相應的配置方法。

12.1 SAMBA文件共享服務

上一章講解的FTP文件傳輸服務確實可以讓主機之間的文件傳輸變得簡單方便,但是FTP協議的本質是傳輸文件,而非共享文件,因此要想通過客戶端直接在服務器上修改文件內容還是一件比較麻煩的事情。

1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,服務器消息塊)協議,旨在解決局域網內的文件或打印機等資源的共享問題,這也使得在多個主機之間共享文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為了解決Linux系統與Windows系統之間的文件共享問題,基于SMB協議開發出了SMBServer服務程序。這是一款開源的文件共享軟件,經過簡單配置就能夠實現Linux系統與Windows系統之間的文件共享工作。當時,Tridgwell想把這款軟件的名字SMBServer注冊成為商標,但卻被商標局以SMB是沒有意義的字符而拒絕了申請。后來Tridgwell不斷翻看詞典,突然看到一個拉丁舞蹈的名字—Samba,而且這個熱情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服務程序的名字由此誕生(見圖12-1)。Samba服務程序現在已經成為在Linux系統與Windows系統之間共享文件的最佳選擇。

samba服務logo

圖12-1? Samba服務程序的logo

Samba服務程序的配置方法與之前講解的很多服務的配置方法類似,首先需要先通過Yum軟件倉庫來安裝Samba服務程序(Samba服務程序的名字也恰巧是軟件包的名字):

[[email protected] ~ ]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分輸出信息………………
Installing:
 samba x86_64 4.1.1-31.el7 rhel 527 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 527 k
Installed size: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : samba-4.1.1-31.el7.x86_64 1/1 
 Verifying : samba-4.1.1-31.el7.x86_64 1/1 
Installed:
 samba.x86_64 0:4.1.1-31.el7 
Complete!

安裝完畢后打開Samba服務程序的主配置文件,發現竟然有320行之多!有沒有被嚇到?但仔細一看就會發現,其實大多數都是以井號(#)開頭的注釋信息行。有劉遄老師在,肯定是不會讓大家去“死啃”這些內容的。

[[email protected] ~]# cat /etc/samba/smb.conf 
# This is the main Samba configuration file. For detailed information about the
# options listed here, refer to the smb.conf(5) manual page. Samba has a huge
# number of configurable options, most of which are not shown in this example.
#
# The Official Samba 3.2.x HOWTO and Reference Guide contains step-by-step
# guides for installing, configuring, and using Samba:
# http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
#
# The Samba-3 by Example guide has working examples for smb.conf. This guide is
# generated daily: http://www.samba.org/samba/docs/Samba-Guide.pdf
#
# In this file, lines starting with a semicolon (;) or a hash (#) are
# comments and are ignored. This file uses hashes to denote commentary and
# semicolons for parts of the file you may wish to configure.
#
# Note: Run the "testparm" command after modifying this file to check for basic
# syntax errors.
#
………………省略部分輸出信息………………

由于在Samba服務程序的主配置文件中,注釋信息行實在太多,不便于分析里面的重要參數,因此先把主配置文件改個名字,然后使用cat命令讀入主配置文件,再在grep命令后面添加-v參數(反向選擇),分別去掉所有以井號(#)和分號(;)開頭的注釋信息行,對于剩余的空白行可以使用^$參數來表示并進行反選過濾,最后把過濾后的可用參數信息通過重定向符覆蓋寫入到原始文件名稱中。執行過濾后剩下的Samba服務程序的參數并不復雜,為了更方便讀者查閱參數的功能,表12-1羅列了這些參數以及相應的注釋說明。

表12-1????????????????????????????????????? Samba服務程序中的參數以及作用

[global] #全局參數。
workgroup = MYGROUP #工作組名稱
server string = Samba Server Version %v #服務器介紹信息,參數%v為顯示SMB版本號
log file = /var/log/samba/log.%m #定義日志文件的存放位置與名稱,參數%m為來訪的主機名
max log size = 50 #定義日志文件的最大容量為50KB
security = user #安全驗證的方式,總共有4種
#share:來訪主機無需驗證口令;比較方便,但安全性很差
#user:需驗證來訪主機提供的口令后才可以訪問;提升了安全性
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理賬戶)
#domain:使用域控制器進行身份驗證
passdb backend = tdbsam #定義用戶后臺的類型,共有3種
#smbpasswd:使用smbpasswd命令為系統用戶設置Samba服務程序的密碼
#tdbsam:創建數據庫文件并使用pdbedit命令建立Samba服務程序的用戶
#ldapsam:基于LDAP服務進行賬戶驗證
load printers = yes #設置在Samba服務啟動時是否共享打印機設備
cups options = raw #打印機的選項
[homes] #共享參數
comment = Home Directories #描述信息
browseable = no #指定共享信息是否在“網上鄰居”中可見
writable = yes #定義是否可以執行寫入操作,與“read only”相反
[printers] #打印機共享參數
comment = All Printers
path = /var/spool/samba #共享文件的實際路徑(重要)。
browseable = no
guest ok = no #是否所有人可見,等同于"public"參數。
writable = no
printable = yes

[[email protected] ~]# mv /etc/samba/smb.conf?/etc/samba/smb.conf.bak
[[email protected] ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
[[email protected] ~]# cat /etc/samba/smb.conf
12.1.1 配置共享資源

Samba服務程序的主配置文件與前面學習過的Apache服務很相似,包括全局配置參數和區域配置參數。全局配置參數用于設置整體的資源共享環境,對里面的每一個獨立的共享資源都有效。區域配置參數則用于設置單獨的共享資源,且僅對該資源有效。創建共享資源的方法很簡單,只要將表12-2中的參數寫入到Samba服務程序的主配置文件中,然后重啟該服務即可。

表12-2??? 用于設置Samba服務程序的參數以及作用

參數 作用
[database] 共享名稱為database
comment =?Do not arbitrarily modify the database file 警告用戶不要隨意修改數據庫
path = /home/database 共享目錄為/home/database
public = no 關閉“所有人可見”
writable = yes 允許寫入操作

第1步:創建用于訪問共享資源的賬戶信息。在RHEL 7系統中,Samba服務程序默認使用的是用戶口令認證模式(user)。這種認證模式可以確保僅讓有密碼且受信任的用戶訪問共享資源,而且驗證過程也十分簡單。不過,只有建立賬戶信息數據庫之后,才能使用用戶口令認證模式。另外,Samba服務程序的數據庫要求賬戶必須在當前系統中已經存在,否則日后創建文件時將導致文件的權限屬性混亂不堪,由此引發錯誤。

pdbedit命令用于管理SMB服務程序的賬戶信息數據庫,格式為“pdbedit [選項] 賬戶”。在第一次把賬戶信息寫入到數據庫時需要使用-a參數,以后在執行修改密碼、刪除賬戶等操作時就不再需要該參數了。pdbedit命令中使用的參數以及作用如表12-3所示。

表12-3?????????????????????????????????????? 用于pdbedit命令的參數以及作用

參數 作用
-a 用戶名 建立Samba用戶
-x 用戶名 刪除Samba用戶
-L 列出用戶列表
-Lv 列出用戶詳細信息的列表

[[email protected] ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[[email protected] ~]# pdbedit -a -u linuxprobe
new password:此處輸入該賬戶在Samba服務數據庫中的密碼
retype new password:再次輸入密碼進行確認
Unix username: linuxprobe
NT username: 
Account Flags: [U ]
User SID: S-1-5-21-507407404-3243012849-3065158664-1000
Primary Group SID: S-1-5-21-507407404-3243012849-3065158664-513
Full Name: linuxprobe
Home Directory: \\localhost\linuxprobe
HomeDir Drive: 
Logon Script: 
Profile Path: \\localhost\linuxprobe\profile
Domain: LOCALHOST
Account desc: 
Workstations: 
Munged dial: 
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Mon, 13 Mar 2017 04:22:25 EDT
Password can change: Mon, 13 Mar 2017 04:22:25 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第2步:創建用于共享資源的文件目錄。在創建時,不僅要考慮到文件讀寫權限的問題,而且由于/home目錄是系統中普通用戶的家目錄,因此還需要考慮應用于該目錄的SELinux安全上下文所帶來的限制。在前面對Samba服務程序配置文件中的注釋信息進行過濾時,這些過濾的信息中就有關于SELinux安全上下文策略的說明,我們只需按照過濾信息中有關SELinux安全上下文策略中的說明中給的值進行修改即可。修改完畢后執行restorecon命令,讓應用于目錄的新SELinux安全上下文立即生效。

[[email protected] ~]# mkdir /home/database
[[email protected] ~]# chown -Rf linuxprobe:linuxprobe /home/database
[[email protected] ~]# semanage fcontext -a -t samba_share_t /home/database
[[email protected] ~]# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0

第3步:設置SELinux服務與策略,使其允許通過Samba服務程序訪問普通用戶家目錄。執行getsebool命令,篩選出所有與Samba服務程序相關的SELinux域策略,根據策略的名稱(和經驗)選擇出正確的策略條目進行開啟即可:

[[email protected] ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
[[email protected] ~]# setsebool -P samba_enable_home_dirs on

第4步:在Samba服務程序的主配置文件中,根據表12-2所提到的格式寫入共享信息。在原始的配置文件中,[homes]參數為來訪用戶的家目錄共享信息,[printers]參數為共享的打印機設備。這兩項如果在今后的工作中不需要,可以像劉遄老師一樣手動刪除,這沒有任何問題。

[[email protected] ~]# vim /etc/samba/smb.conf?
[global]
 workgroup = MYGROUP
 server string = Samba Server Version %v
 log file = /var/log/samba/log.%m
 max log size = 50
 security = user
 passdb backend = tdbsam
 load printers = yes
 cups options = raw
[database]
 comment = Do not arbitrarily modify the database file
 path = /home/database
 public = no
 writable = yes

第5步:Samba服務程序的配置工作基本完畢。接下來重啟smb服務(Samba服務程序在Linux系統中的名字為smb)并清空iptables防火墻,然后就可以檢驗配置效果了。

[[email protected] ~]# systemctl restart smb
[[email protected] ~]# systemctl enable smb
 ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
[[email protected] ~]# iptables -F
[[email protected] ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
12.1.2 Windows掛載共享

無論Samba共享服務是部署Windows系統上還是部署在Linux系統上,通過Windows系統進行訪問時,其步驟和方法都是一樣的。下面假設Samba共享服務部署在Linux系統上,并通過Windows系統來訪問Samba服務。Samba共享服務器和Windows客戶端的IP地址可以根據表12-4來設置。

表12-4?????????????? Samba服務器和Windows客戶端使用的操作系統以及IP地址

主機名稱 操作系統 IP地址
Samba共享服務器 RHEL 7 192.168.10.10
Linux客戶端 RHEL 7 192.168.10.20
Windows客戶端 Windows 7 192.168.10.30

要在Windows系統中訪問共享資源,只需在Windows的“運行”命令框中輸入兩個反斜杠,然后再加服務器的IP地址即可,如圖12-2所示。

Windows運行框輸入遠程主機信息

圖12-2? 在Windows系統中訪問共享資源

如果已經清空了Linux系統上iptables防火墻的默認策略(即執行iptables -F命令),現在就應該能看到Samba共享服務的登錄界面了。劉遄老師在這里先使用linuxprobe賬戶的系統本地密碼嘗試登錄,結果出現了如圖12-3所示的報錯信息。由此可以驗證,在RHEL 7系統中,Samba服務程序使用的果然是獨立的賬戶信息數據庫。所以,即便在Linux系統中有一個linuxprobe賬戶,Samba服務程序使用的賬戶信息數據庫中也有一個同名的linuxprobe賬戶,大家也一定要弄清楚它們各自所對應的密碼。

圖12-3? 訪問Samba共享服務時,提示出錯

正確輸入linuxprobe賬戶名以及使用pdbedit命令設置的密碼后,就可以登錄到共享界面中了,如圖12-4所示。此時,我們可以嘗試執行查看、寫入、更名、刪除文件等操作。

使用SMB服務并創建文件

圖12-4? 成功訪問Samba共享服務

由于Windows系統的緩存原因,有可能您在第二次登錄時提供了正確的賬戶和密碼,依然會報錯,這時只需要重新啟動一下Windows客戶端就沒問題了(如果Windows系統依然報錯,請檢查上述步驟是否有做錯的地方)。

12.1.2 Linux掛載共享

上面的實驗操作可能會讓各位讀者誤以為Samba服務程序只是為了解決Linux系統和Windows系統的資源共享問題而設計的。其實,Samba服務程序還可以實現Linux系統之間的文件共享。請各位讀者按照表12-5來設置Samba服務程序所在主機(即Samba共享服務器)和Linux客戶端使用的IP地址,然后在客戶端安裝支持文件共享服務的軟件包(cifs-utils)。

表12-5?????????? Samba共享服務器和Linux客戶端各自使用的操作系統以及IP地址

主機名稱 操作系統 IP地址
Samba共享服務器 RHEL 7 192.168.10.10
Linux客戶端 RHEL 7 192.168.10.20
Windows客戶端 Windows 7 192.168.10.30

[[email protected] ~]# yum install cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package cifs-utils.x86_64 0:6.2-6.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 cifs-utils x86_64 6.2-6.el7 rhel 83 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 83 k
Installed size: 174 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : cifs-utils-6.2-6.el7.x86_64 1/1 
 Verifying : cifs-utils-6.2-6.el7.x86_64 1/1 
Installed:
 cifs-utils.x86_64 0:6.2-6.el7 
Complete!

在Linux客戶端,按照Samba服務的用戶名、密碼、共享域的順序將相關信息寫入到一個認證文件中。為了保證不被其他人隨意看到,最后把這個認證文件的權限修改為僅root管理員才能夠讀寫:

[[email protected] ~]# vim auth.smb
username=linuxprobe
password=redhat
domain=MYGROUP
[[email protected] ~]# chmod -Rf 600 auth.smb

現在,在Linux客戶端上創建一個用于掛載Samba服務共享資源的目錄,并把掛載信息寫入到/etc/fstab文件中,以確保共享掛載信息在服務器重啟后依然生效:

[[email protected] ~]# mkdir /database
[[email protected] ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
[[email protected] ~]# mount -a

Linux客戶端成功地掛載了Samba服務的共享資源。進入到掛載目錄/database后就可以看到Windows系統訪問Samba服務程序時留下來的文件了(即文件Memo.txt)。當然,我們也可以對該文件進行讀寫操作并保存。

[[email protected] ~]# cat /database/Memo.txt
i can edit it .

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

12.2 NFS網絡文件系統

如果大家覺得Samba服務程序的配置太麻煩,而且恰巧需要共享文件的主機都是Linux系統,劉遄老師非常推薦大家在客戶端部署NFS服務來共享文件。NFS(網絡文件系統)服務可以將遠程Linux系統上的文件共享資源掛載到本地主機的目錄上,從而使得本地主機(Linux客戶端)基于TCP/IP協議,像使用本地主機上的資源那樣讀寫遠程Linux系統上的共享文件。

由于RHEL 7系統中默認已經安裝了NFS服務,外加NFS服務的配置步驟也很簡單,因此劉遄老師在授課時會將NFS戲謔為Need For Speed。接下來,我們準備配置NFS服務。首先請使用Yum軟件倉庫檢查自己的RHEL 7系統中是否已經安裝了NFS軟件包:

[[email protected] ~]# yum install nfs-utils
Loaded plugins: langpacks, product-id, subscription-manager
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
Nothing to do

第1步:為了檢驗NFS服務配置的效果,我們需要使用兩臺Linux主機(一臺充當NFS服務器,一臺充當NFS客戶端),并按照表12-6來設置它們所使用的IP地址。

表12-6???????????????????????????? 兩臺Linux主機所使用的操作系統以及IP地址

主機名稱 操作系統 IP地址
NFS服務端 RHEL 7 192.168.10.10
NFS客戶端 RHEL 7 192.168.10.20

另外,不要忘記清空NFS服務器上面iptables防火墻的默認策略,以免默認的防火墻策略禁止正常的NFS共享服務。

[[email protected] ~]# iptables -F
[[email protected] ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

第2步:在NFS服務器上建立用于NFS文件共享的目錄,并設置足夠的權限確保其他人也有寫入權限。

[[email protected] ~]# mkdir /nfsfile
[[email protected] ~]# chmod -Rf 777 /nfsfile
[[email protected] ~]# echo "welcome to linuxprobe.com" > /nfsfile/readme

第3步:NFS服務程序的配置文件為/etc/exports,默認情況下里面沒有任何內容。我們可以按照“共享目錄的路徑 允許訪問的NFS客戶端(共享權限參數)”的格式,定義要共享的目錄與相應的權限。

例如,如果想要把/nfsfile目錄共享給192.168.10.0/24網段內的所有主機,讓這些主機都擁有讀寫權限,在將數據寫入到NFS服務器的硬盤中后才會結束操作,最大限度保證數據不丟失,以及把來訪客戶端root管理員映射為本地的匿名用戶等,則可以按照下面命令中的格式,將表12-7中的參數寫到NFS服務程序的配置文件中。

表12-7????????????????????????????????? 用于配置NFS服務程序配置文件的參數

參數 作用
ro 只讀
rw 讀寫
root_squash 當NFS客戶端以root管理員訪問時,映射為NFS服務器的匿名用戶
no_root_squash 當NFS客戶端以root管理員訪問時,映射為NFS服務器的root管理員
all_squash 無論NFS客戶端使用什么賬戶訪問,均映射為NFS服務器的匿名用戶
sync 同時將數據寫入到內存與硬盤中,保證不丟失數據
async 優先將數據保存到內存,然后再寫入硬盤;這樣效率更高,但可能會丟失數據

請注意,NFS客戶端地址與權限之間沒有空格。

[[email protected] ~]# vim /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash)

第4步:啟動和啟用NFS服務程序。由于在使用NFS服務進行文件共享之前,需要使用RPC(Remote Procedure Call,遠程過程調用)服務將NFS服務器的IP地址和端口號等信息發送給客戶端。因此,在啟動NFS服務之前,還需要順帶重啟并啟用rpcbind服務程序,并將這兩個服務一并加入開機啟動項中。

[[email protected] ~]# systemctl restart rpcbind
[[email protected] ~]# systemctl enable rpcbind
[[email protected] ~]# systemctl start nfs-server
[[email protected] ~]# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'

NFS客戶端的配置步驟也十分簡單。先使用showmount命令(以及必要的參數,見表12-8)查詢NFS服務器的遠程共享信息,其輸出格式為“共享的目錄名稱 允許使用客戶端地址”。

表12-8????????????????????????????????? showmount命令中可用的參數以及作用

參數 作用
-e 顯示NFS服務器的共享列表
-a 顯示本機掛載的文件資源的情況NFS資源的情況
-v 顯示版本號

[[email protected] ~]# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/nfsfile 192.168.10.*

然后在NFS客戶端創建一個掛載目錄。使用mount命令并結合-t參數,指定要掛載的文件系統的類型,并在命令后面寫上服務器的IP地址、服務器上的共享目錄以及要掛載到本地系統(即客戶端)的目錄。

[[email protected] ~]# mkdir /nfsfile
[[email protected] ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile

掛載成功后就應該能夠順利地看到在執行前面的操作時寫入的文件內容了。如果希望NFS文件共享服務能一直有效,則需要將其寫入到fstab文件中:

[[email protected] ~]# cat /nfsfile/readme
welcome to linuxprobe.com
[[email protected] ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0
12.3 AutoFs自動掛載服務

無論是Samba服務還是NFS服務,都要把掛載信息寫入到/etc/fstab中,這樣遠程共享資源就會自動隨服務器開機而進行掛載。雖然這很方便,但是如果掛載的遠程資源太多,則會給網絡帶寬和服務器的硬件資源帶來很大負載。如果在資源掛載后長期不使用,也會造成服務器硬件資源的浪費。可能會有讀者說,“可以在每次使用之前執行mount命令進行手動掛載”。這是一個不錯的選擇,但是每次都需要先掛載再使用,您不覺得麻煩嗎?

autofs自動掛載服務可以幫我們解決這一問題。與mount命令不同,autofs服務程序是一種Linux系統守護進程,當檢測到用戶試圖訪問一個尚未掛載的文件系統時,將自動掛載該文件系統。換句話說,我們將掛載信息填入/etc/fstab文件后,系統在每次開機時都自動將其掛載,而autofs服務程序則是在用戶需要使用該文件系統時才去動態掛載,從而節約了網絡資源和服務器的硬件資源。

[[email protected] ~]# yum install autofs
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package autofs.x86_64 1:5.0.7-40.el7 will be installed
--> Processing Dependency: libhesiod.so.0()(64bit) for package: 1:autofs-5.0.7-40.el7.x86_64
--> Running transaction check
---> Package hesiod.x86_64 0:3.2.1-3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 autofs x86_64 1:5.0.7-40.el7 rhel 550 k
Installing for dependencies:
 hesiod x86_64 3.2.1-3.el7 rhel 30 k
Transaction Summary
================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 579 k
Installed size: 3.6 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
Total 9.4 MB/s | 579 kB 00:00 
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : hesiod-3.2.1-3.el7.x86_64 1/2 
 Installing : 1:autofs-5.0.7-40.el7.x86_64 2/2 
 Verifying : hesiod-3.2.1-3.el7.x86_64 1/2 
 Verifying : 1:autofs-5.0.7-40.el7.x86_64 2/2 
Installed:
 autofs.x86_64 1:5.0.7-40.el7 
Dependency Installed:
 hesiod.x86_64 0:3.2.1-3.el7 
Complete!

處于生產環境中的Linux服務器,一般會同時管理許多設備的掛載操作。如果把這些設備掛載信息都寫入到autofs服務的主配置文件中,無疑會讓主配置文件臃腫不堪,不利于服務執行效率,也不利于日后修改里面的配置內容,因此在autofs服務程序的主配置文件中需要按照“掛載目錄 子配置文件”的格式進行填寫。掛載目錄是設備掛載位置的上一級目錄。例如,光盤設備一般掛載到/media/cdrom目錄中,那么掛載目錄寫成/media即可。對應的子配置文件則是對這個掛載目錄內的掛載設備信息作進一步的說明。子配置文件需要用戶自行定義,文件名字沒有嚴格要求,但后綴建議以.misc結束。具體的配置參數如第7行的加粗字所示。

[[email protected] ~]# vim /etc/auto.master
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#
/media /etc/iso.misc
/misc /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
# "nosuid" and "nodev" options unless the "suid" and "dev"
# options are explicitly given.
#
/net -hosts
#
# Include /etc/auto.master.d/*.autofs
#
+dir:/etc/auto.master.d
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master

在子配置文件中,應按照“掛載目錄 掛載文件類型及權限 :設備名稱”的格式進行填寫。例如,要把光盤設備掛載到/media/iso目錄中,可將掛載目錄寫為iso,而-fstype為文件系統格式參數,iso9660為光盤設備格式,ro、nosuid及nodev為光盤設備具體的權限參數,/dev/cdrom則是定義要掛載的設備名稱。配置完成后再順手將autofs服務程序啟動并加入到系統啟動項中:

[[email protected] ~]# vim /etc/iso.misc
iso ??-fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
[[email protected]probe ~]# systemctl start autofs 
[[email protected] ~]# systemctl enable autofs 
ln -s '/usr/lib/systemd/system/autofs.service' '/etc/systemd/system/multi-user.target.wants/autofs.service'

接下來將發生一件非常有趣的事情。我們先查看當前的光盤設備掛載情況,確認光盤設備沒有被掛載上,而且/media目錄中根本就沒有iso子目錄。但是,我們卻可以使用cd命令切換到這個iso子目錄中,而且光盤設備會被立即自動掛載上。我們也就能順利查看光盤內的內容了。

[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
[[email protected] ~]# cd /media
[[email protected] media]# ls
[[email protected] media]# cd iso
[[email protected] iso]# ls -l
total 812
dr-xr-xr-x. 4 root root 2048 May 7 2017 addons
dr-xr-xr-x. 3 root root 2048 May 7 2017 EFI
-r--r--r--. 1 root root 8266 Apr 4 2017 EULA
-r--r--r--. 1 root root 18092 Mar 6 2012 GPL
dr-xr-xr-x. 3 root root 2048 May 7 2017 images
dr-xr-xr-x. 2 root root 2048 May 7 2017 isolinux
dr-xr-xr-x. 2 root root 2048 May 7 2017 LiveOS
-r--r--r--. 1 root root 108 May 7 2017 media.repo
dr-xr-xr-x. 2 root root 774144 May 7 2017 Packages
dr-xr-xr-x. 24 root root 6144 May 7 2017 release-notes
dr-xr-xr-x. 2 root root 4096 May 7 2017 repodata
-r--r--r--. 1 root root 3375 Apr 1 2017 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root 3211 Apr 1 2017 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root 1568 May 7 2017 TRANS.TBL
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/cdrom 3.5G 3.5G 0 100% /media/iso
/dev/sda1 497M 119M 379M 24% /boot

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

本章節的復習作業(答案就在問題的下一行哦,用鼠標選中即可看到的~)

1.要想實現Linux系統與Windows系統之間的文件共享,能否使用NFS服務?

答:不可以,應該使用Samba服務程序,NFS服務僅能實現Linux系統之間的文件共享。

2.用于管理Samba服務程序的獨立賬戶信息數據庫的命令是什么?

答:pdbedit命令用于管理Samba服務程序的賬戶信息數據庫。

3.簡述在Windows系統中使用Samba服務程序來共享資源的方法。

答:在開始菜單的輸入框中按照\\192.168.10.10的格式輸入訪問命令并回車執行即可。在Windows的“運行”命令框中按照“\\192.168.10.10”的格式輸入訪問命令并按回車鍵即可。

4.簡述在Linux系統中使用Samba服務程序來共享資源的步驟方法。

答:首先應創建密碼認證文件以及掛載目錄,然后把掛載信息寫入到/etc/fstab文件中,最后執行mount -a命令掛載使用。

5.如果在Linux系統中默認沒有安裝NFS服務程序,則需要安裝什么軟件包呢?

答:NFS服務程序的軟件包名字為nfs-utils,因此執行yum install nfs-utils命令即可。

6.在使用NFS服務共享資源時,若希望無論NFS客戶端使用什么帳戶來訪問共享資源,都會被映射為本地匿名用戶,則需要添加哪個參數。

答:需要添加all_squash參數,以便更好地保證服務器的安全。

7.客戶端在查看到遠程NFS服務器上的共享資源列表時,需要使用哪個命令?

答:使用showmount命令即可看到NFS服務器上的資源共享情況。

8.簡述autofs服務程序的作用。

答:實現動態靈活的設備掛載操作,而且只有檢測到用戶試圖訪問一個尚未掛載的文件系統時,才自動掛載該文件系統。

本文原創地址:http://www.52437949.com/chapter-12.html編輯:劉遄,審核員:暫無