如何掛載遠端 Windows 共享資源

沒錯,我們生活在 Linux 的美好世界裡。然而對我們當中不少人來說,面對 Windows 是生活的一部份。例如你可能想應用一個 Linux 伺服器來備份 Windows 檔案。將 Windows 共享資源掛載在伺服器上可以簡化這個程序。你將能夠存取 Windows 檔案如同它們是本地的一樣,基本上所有 Linux 指令都可以使用。掛載 Windows(或其它 samba)共享資源要應用到內核裡的 cifs 虛擬檔案系統客戶端(cifs vfs),與及 samba 軟件系列中的 mount.cifs 掛載輔助程式。

下列名稱會用在我們的例子裡。

警告:mount.cifs 預設是不會為已掛載的共享資源加上安全性保障(http://bugs.centos.org/view.php?id=4537)。假如你管理多重用戶的系統,請考慮為你的掛載點加入 dir_modefile_mode 的設定。

1. 所需套件

請確保以下套件已被安裝:

[root@host]# yum install samba-client samba-common cifs-utils

這樣亦會加入所有依賴性套件。留意 cifs-utils 只限 CentOS-6(或更新版本)。

2. 基本的方法

建立一個本地掛載點。例如:

[root@host]# mkdir /mnt/win

編輯 /etc/fstab 檔並加入如下一行:

\\winbox\getme /mnt/win cifs user,uid=500,rw,suid,username=sushi,password=yummy 0 0

Windows 共享資源將會在開機時被掛載。如果你想利用 mount /mnt/win 這個指令來手動掛載它,請加入 noauto 這個選項。在這個範例裡,本地用戶(uid=500)將會成為掛載檔案的擁有人。使用 uid 這個選項是選擇性的。然而,某些對權限較挑剔的應用程式(例如 Acrobat)或許會需要它。

你可能會想為 cifs 設定其它選項。舉例說,nocase 容許檔案路徑不按大小寫配對。請執行 man mount.cifs 來查看更多選項。

[註:如果你在較早版本的 CentOS 內使用 smbfs,你必須在 CentOS 5 內以 cifs 代替,因為 smbfs 已不宜使用。]

3. 較好的方法

以上的方法有一個小毛病 —— 用戶名稱與密碼是人人可見的。我們可以透過憑證檔案來避免這個問題。

\\winbox\getme /mnt/win cifs user,uid=500,rw,noauto,suid,credentials=/root/secret.txt 0 0

註:以下是 IRC 用戶 jbroome 提供的一個實際例子

\\jellyfish\DBRefreshLogs\beta2 /media/DBRefreshLogs/beta2 cifs credentials=/root/secret.txt,_netdev,uid=oracle,gid=dba 0 0

至於 /root/secret.txt 檔就看似這樣:

username=sushi
password=yummy

這個檔案可以放置在任何地方。你不能採用被加密的密碼。請確定它不能被所有人閱讀。另外請留意它不容有空格。

(註:用戶名稱的格式可以是 username=<域名>/<主機名>

4. 更好的方法

當遠端的共享資源透過 /etc/fstab 被掛載後,它會維持這個狀況直至你卸下它。假若遠端的共享資源變為無效這便會構成問題,因為過時的掛載將會出現。舉個例說,你連線的 Windows 機器或許會當機(想不到吧!),或者網絡會倒閉。

這時自動掛載便大派用場(如果你仍未有 autofs,請使用 yum install autofs 來安它)。下面是你須要做的步驟。首先,建立一個掛載點

[root@host]# mkdir /mymount

[註:你可以使用任何目錄;請確定那個目錄存在]

/etc/auto.master 檔內加入如下一行:

/mymount /etc/auto.mymount

接著編輯你剛輸入的 /etc/auto.mymount 檔:

winbox  -fstype=cifs,rw,noperm,user=sushi,pass=yummy ://winbox/getme

或者如上面使用同一個憑證檔案:

winbox  -fstype=cifs,rw,noperm,credentials=/root/secret.txt ://winbox/getme

[註:你可以取消其它人對 /etc/auto.mymount 的閱讀權限,因此憑證檔案的應用並不像在上個方法中重要。]

[註:假若你無法用機器名稱,但可以透過它的 IP 位址連線,請在 etc/nsswitch.confhosts 行內加入 wins。]

當一切準備妥當後,請以 root 的身份執行 /sbin/service autofs restart

現在嘗試透過 ls /mymount/winboxcd /mymount/winbox 來存取共享資源。它會在被存取時自動被掛載。當活動靜止一段時間後(預設 60 秎),共享資源便會自動被卸下。

[註:進行卸下時,你可能會在 /var/log/messages 內看見 mount_cifs.so: cannot open shared object file 這個錯誤。這是無害的,可以安全地忽略。]

5. 另一個更好的方法

假若你有多個共享資源是用同一個憑證來掛載的,這裡有一個很方便的設置方法。

建立一個本地的掛載點(依你的喜好):

[root@host]# mkdir /mnt/smb

/etc/auto.master 內加入這行:

/mnt/smb /etc/auto.smb.top

建立 /etc/auto.smb.top 如下:

* -fstype=autofs,-Dhost=& file:/etc/auto.smb.sub

建立 /etc/auto.smb.sub 如下(按需要作修改):

* -fstype=cifs,credentials=/root/secret.txt,uid=500,gid=100 ://${host}/&

讓我們確保權限是正確的,然後重新啟動服務:

[root@host]# chmod 644 /etc/auto.smb.*
[root@host]# /sbin/service autofs restart

現在要存取共享資源,你只須簡單地輸入:

[root@host]# cd /mnt/smb/winbox/getme

(多謝 Mia Via 提供這個提示)

額外提示:

假若你擁有多個設有不同用戶名稱及/或密碼的外置伺服器和共享資源,請採用這個格式:

* -fstype=cifs,credentials=/root/${host}.secret.txt,uid=${UID},gid=${EUID} ://${host}/&

如果要讓用戶在他們的主目錄內放置個別的用戶名稱/密碼(或許會進一步削弱安全性):

* -fstype=cifs,credentials=${HOME}/${host}.secret.txt,uid=${UID},gid=${EUID} ://${host}/&

要提升 Samba 伺服器的安全性的話,你也可以加入 sec=ntlmv2,並且以這個方法隱藏憑證檔案:

* -fstype=cifs,sec=ntlmv2,credentials=${HOME}/.${host}.secret.txt,uid=${UID},gid=${EUID} ://${host}/&

有關 sec- 及其它 cifs 掛載參數的細節,請參閱 mount.cifs 的使用手冊。

(多謝 Tapio Ryhänen 提供這個提示)

如何瀏覽 Windows 共享資源

如果你只是想瀏覽 Windows 檔案,你下必掛載它們。你可以透過檔案瀏覽器更容易地存取它們。

在 Konqueror:開始 -> 網絡資料夾 -> Samba 共享
在 Nautilus:位置 -> 網絡 -> Windows 網絡

要更快捷地前往指定的共享資源,你可以在 konqueror 的位置欄正接輸入:

smb://winbox/getme

假如你使用 nautilus,請先輸入一個 '/' 字元(多謝 JohnnyHughes 提供這個提示)。


Translation of revision 70

zh-tw/TipsAndTricks/WindowsShares (last edited 2014-01-22 03:21:12 by TimothyLee)