[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

如何掛載遠端 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 檔案,你不必掛載它們。你可以透過檔案瀏覽器更容易地存取它們。

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

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

smb://winbox/getme

假如你使用 Nautilus 而看不見位置欄,你可輸入一個 '/' 字元來顯示它(多謝 JohnnyHughes 提供這個提示)。


Translation of revision 76


2023-09-11 07:23