16.5 挂载Samba文件系统
smbmount
smbumount
使用smbclient
访问Samba共享,真太好了。不过,与使用GUI相比,或者想在共享资源上做很多事情,使用命令行界面还是很痛苦的体验。这时,应该使用smbmount
,它会将Samba共享挂载到本地文件系统中,好像它就是硬盘驱动器上的一部分。在挂载好以后,你就可以用自己喜欢的文件管理器来方便地访问共享中的文件,甚至还能够打开像文字处理器之类的程序,不必再为直接打开多个程序而忙得团团转。
为了在文件系统中挂载Samba,必须先创建一个载入点(mount point),以便Linux可以载入共享。例如,如果想挂载来自ELIOT
的documents
共享,可能需要创建如下所示的目录:
$ mkdir /home/scott/eliot_documents
现在就可以运行smbmount
命令,同时也提供了很多完整的选项。
$ smbmount //eliot/documents /home/scott/eliot_
➥documents -o credentials=/home/scott/bin
➥/credentials_eliot,fmask=644,dmask=755,uid=1001,
➥gid=1001,workgroup=TURING
smbmnt must be installed suid root for direct user
➥mounts (1000,1000)
smbmnt failed: 1
在介绍这些选项之前,先来看看上面的smbmount
命令为什么会失败。第二行提示了失败的原因:smbmnt
(smbmount
调用的一个命令)只能由root用户运行。如果非root用户挂载Samba共享,就会出现问题了。权宜之计就是为smbmnt
设置suid
root(参见7.10节中对suid
的介绍)。
说明 你正在赋予普通用户能够使用
smbmnt
的权力,好像他们是root用户一样。不过,这并不是什么大问题。与告诉他们root的密码,或是每次他们想挂载Samba共享时都要你亲临现场相比,这样的效果要好多了。
以下是如何为smbmnt
设置suid
root的方法。
说明 为了节省篇幅,这里删除了一些使用
ls-l
命令时通常会看到的详细信息。
# ls /usr/bin/smbmnt
-rwxr-xr-x 1 root root /usr/bin/smbmnt
# chmod u+s /usr/bin/smbmnt
# ls -l /usr/bin/smbmnt
-rwsr-xr-x 1 root root /usr/bin/smbmnt
现在再试一下smbmount
命令。
$ smbmount //eliot/documents /home/scott/eliot_
➥documents -o credentials=/home/scott
➥/credentials_eliot,fmask=644,dmask=755,uid=1001,
➥gid=1001,workgroup=TURING
$ ls -F /home/scott/eliot_documents
presentations/ to_print/
接下来浏览一下刚才使用的命令。在smbmount
之后,//eliot/documents
指定了准备连接的Samba服务器和Samba共享。接下来的参数是载入点的路径/home/scott/eliot_documents
。-o
表示接下来还要指定选项。
除了使用credentials=/home/scott/credentials_eliot
,还能够使用以下任何参数形式:
username=scott,password=123456
username=scott%123456
username=scott
第一种和第二种方法一点也不安全,因为可以在.bash_history
和ps
中看到这里输入的密码信息。千万不要这么做!最后一种选择将在运行过程中提示输入密码,这是一种安全的方法,因为密码信息不会在.bash_history
或ps
中出现。但是,如果想让挂载Samba共享的处理自动进行,那最后这种选择也不行。
还得使用credentials=/home/scott/credentials_eliot
。这是在告诉smbmount
,用户名和密码保存在一个文件中,其格式为:
username = scott
password = 123456
这与16.4节中介绍的凭证文件类似,在创建好凭证文件以后,要使用chmod
命令来严格控制谁可以查看这个文件。如果你不在意必须自动登录处理,那就务必使用username=scott
选项,提示用户输入密码,这肯定是种安全的方式。
fmask
和dmask
选项分别控制在挂载后的Samba共享中创建的新文件和目录的默认权限。644
为文件产生rw-r--r--
的权限,而755
最终将为目录产生rwxr-xr-x
的权限。
说明 没有忘记前面介绍的内容吧?再看一下7.6节。
实际上,所有用户名和组名称都有一个对应的数字,分别在/etc/passwd
和/etc/group
这两个文件中可以看到这些信息。在当前的计算机上,你的用户ID可能是1000;但是在Samba服务器上,1000可能代表另一个完全不同的用户。组ID也存在同样的问题。所以在命令中用uid=1001
和gid=1001
就可以告诉Samba服务器你是Samba服务器上的哪个用户。换句话说,需要查看一下Samba服务器(不是你的本机)上/etc/passwd
和/etc/group
这两个文件中的这些ID编号。否则,即便你可能创建了文件和目录,结果发现还是不能真正拥有它们,也不能像你希望的那样来随意使用这些文件和目录。
最后,workgroup=TURING
指定工作组,其作用一目了然。
在挂载好共享以后,就能够打开文件管理器,开始浏览eliot_ documents
的内容;也能够启动OpenOffice.org
,直接打开eliot_ documents/presentations/
中的文件;或者打开eliot_documents/to_print
中的某个PDF文件,直接将其发送到打印机。将以下几行代码放到计算机的/etc/fstab文件中,就可以自动挂载共享。
//eliot/documents /home/scott/eliot_documents smbfs
➥credentials=/home/scott/credentials_eliot,fmask=644,
➥dmask=755,uid=1001,gid=1001,workgroup=TURING 0 0
警告 修改
/etc/fstab
文件时要非常小心,因为任何错误都将可能造成系统无法启动。虽然有办法能修复这个问题(参考Hacking Knoppix一书中的一些提示建议),但这也是件麻烦事,所以最好小心谨慎,避免出错。有关fstab
文件的更多信息,可以在系统上查看man fstab
。
如果以后不需要再访问eliot_documents
上的Samba共享,可以使用smbumount
命令(注意,这个命令是umount
,而不是unmount
)卸载(unmount)。
$ smbumount eliot_documents
smbumount must be installed suid root
真烦人!还要为smbumount
设置suid
root。
$ ls -l /usr/bin/smbumount
-rwxr-xr-x 1 root root /usr/bin/smbumount
$ sudo chmod u+s /usr/bin/smbumount
$ ls -l /usr/bin/smbumount
-rwsr-xr-x 1 root root /usr/bin/smbumount
只有挂载eliot_documents
的用户才能够卸载eliot_documents
。当然,root用户也能够卸载,因为root可以做任何他想做的事。
$ smbumount eliot_documents
就这么简单。如果想验证smbumount
是否成功执行,试一下ls eliot_documents
。如果成功,这个目录下将没有任何东西,表明已经从Samba共享断开了。