如何挂载远程 Windows 共享资源
没错,我们生活在 Linux 的美好世界里。然而对我们当中不少人来说,面对 Windows 是生活的一部份。例如你可能想应用一个 Linux 服务器来备份 Windows 文件。将 Windows 共享资源挂载在服务器上可以简化这个程序。你将能够访问 Windows 文件如同它们是本地的一样,基本上所有 Linux 指令都可以使用。挂载 Windows(或其它 samba)共享资源要应用到内核里的 cifs 虚拟文件系统客户端(cifs vfs),与及 samba 软件系列中的 mount.cifs 挂载辅助程序。
下列名称会用在我们的例子里。
远程 Windows 机器 winbox
winbox 上的共享资源名称:getme
用户名称:sushi
口令:yummy
警告:mount.cifs 缺省是不会为已挂载的共享资源加上安全性保障(http://bugs.centos.org/view.php?id=4537)。假如你管理多重用户的系统,请考虑为你的挂载点加入 dir_mode 及 file_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.conf 的 hosts 行内加入 wins。]
当一切准就绪当后,请以 root 的身份执行 /sbin/service autofs restart。
现在尝试通过 ls /mymount/winbox 或 cd /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 提供这个提示)。
这页的英文版本由 AkemiYagi 著作及维护。欢迎提供修正/推荐。
Translation of revision 76