16.5 挂载Samba文件系统

smbmount

smbumount

使用smbclient访问Samba共享,真太好了。不过,与使用GUI相比,或者想在共享资源上做很多事情,使用命令行界面还是很痛苦的体验。这时,应该使用smbmount,它会将Samba共享挂载到本地文件系统中,好像它就是硬盘驱动器上的一部分。在挂载好以后,你就可以用自己喜欢的文件管理器来方便地访问共享中的文件,甚至还能够打开像文字处理器之类的程序,不必再为直接打开多个程序而忙得团团转。

为了在文件系统中挂载Samba,必须先创建一个载入点(mount point),以便Linux可以载入共享。例如,如果想挂载来自ELIOTdocuments共享,可能需要创建如下所示的目录:

  1. $ mkdir /home/scott/eliot_documents

现在就可以运行smbmount命令,同时也提供了很多完整的选项。

  1. $ smbmount //eliot/documents /home/scott/eliot_
  2. documents -o credentials=/home/scott/bin
  3. ➥/credentials_eliot,fmask=644,dmask=755,uid=1001,
  4. gid=1001,workgroup=TURING
  5. smbmnt must be installed suid root for direct user
  6. mounts (1000,1000)
  7. smbmnt failed: 1

在介绍这些选项之前,先来看看上面的smbmount命令为什么会失败。第二行提示了失败的原因:smbmntsmbmount调用的一个命令)只能由root用户运行。如果非root用户挂载Samba共享,就会出现问题了。权宜之计就是为smbmnt设置suid root(参见7.10节中对suid的介绍)。

说明 你正在赋予普通用户能够使用smbmnt的权力,好像他们是root用户一样。不过,这并不是什么大问题。与告诉他们root的密码,或是每次他们想挂载Samba共享时都要你亲临现场相比,这样的效果要好多了。

以下是如何为smbmnt设置suid root的方法。

说明 为了节省篇幅,这里删除了一些使用ls-l命令时通常会看到的详细信息。

  1. # ls /usr/bin/smbmnt
  2. -rwxr-xr-x 1 root root /usr/bin/smbmnt
  3. # chmod u+s /usr/bin/smbmnt
  4. # ls -l /usr/bin/smbmnt
  5. -rwsr-xr-x 1 root root /usr/bin/smbmnt

现在再试一下smbmount命令。

  1. $ smbmount //eliot/documents /home/scott/eliot_
  2. documents -o credentials=/home/scott
  3. ➥/credentials_eliot,fmask=644,dmask=755,uid=1001,
  4. gid=1001,workgroup=TURING
  5. $ ls -F /home/scott/eliot_documents
  6. 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_historyps中看到这里输入的密码信息。千万不要这么做!最后一种选择将在运行过程中提示输入密码,这是一种安全的方法,因为密码信息不会在.bash_historyps中出现。但是,如果想让挂载Samba共享的处理自动进行,那最后这种选择也不行。

还得使用credentials=/home/scott/credentials_eliot。这是在告诉smbmount,用户名和密码保存在一个文件中,其格式为:

  1. username = scott
  2. password = 123456

这与16.4节中介绍的凭证文件类似,在创建好凭证文件以后,要使用chmod命令来严格控制谁可以查看这个文件。如果你不在意必须自动登录处理,那就务必使用username=scott选项,提示用户输入密码,这肯定是种安全的方式。

fmaskdmask选项分别控制在挂载后的Samba共享中创建的新文件和目录的默认权限。644为文件产生rw-r--r--的权限,而755最终将为目录产生rwxr-xr-x的权限。

说明 没有忘记前面介绍的内容吧?再看一下7.6节。

实际上,所有用户名和组名称都有一个对应的数字,分别在/etc/passwd/etc/group这两个文件中可以看到这些信息。在当前的计算机上,你的用户ID可能是1000;但是在Samba服务器上,1000可能代表另一个完全不同的用户。组ID也存在同样的问题。所以在命令中用uid=1001gid=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文件中,就可以自动挂载共享。

  1. //eliot/documents /home/scott/eliot_documents smbfs
  2. credentials=/home/scott/credentials_eliot,fmask=644,
  3. dmask=755,uid=1001,gid=1001,workgroup=TURING 0 0

警告 修改/etc/fstab文件时要非常小心,因为任何错误都将可能造成系统无法启动。虽然有办法能修复这个问题(参考Hacking Knoppix一书中的一些提示建议),但这也是件麻烦事,所以最好小心谨慎,避免出错。有关fstab文件的更多信息,可以在系统上查看man fstab

如果以后不需要再访问eliot_documents上的Samba共享,可以使用smbumount命令(注意,这个命令是umount,而不是unmount)卸载(unmount)。

  1. $ smbumount eliot_documents
  2. smbumount must be installed suid root

真烦人!还要为smbumount设置suid root。

  1. $ ls -l /usr/bin/smbumount
  2. -rwxr-xr-x 1 root root /usr/bin/smbumount
  3. $ sudo chmod u+s /usr/bin/smbumount
  4. $ ls -l /usr/bin/smbumount
  5. -rwsr-xr-x 1 root root /usr/bin/smbumount

只有挂载eliot_documents的用户才能够卸载eliot_documents。当然,root用户也能够卸载,因为root可以做任何他想做的事。

  1. $ smbumount eliot_documents

就这么简单。如果想验证smbumount是否成功执行,试一下ls eliot_documents。如果成功,这个目录下将没有任何东西,表明已经从Samba共享断开了。