Samba Project是一个开源项目,支持 Linux、UNIX 和其他类似 UNIX 的操作系统与 Windows 互操作。大部分 Linux 发行版的存储库中都包含 Samba,而且一般通过安装和配置来支持 Linux 系统能够加入一个现有的 Windows 工作组或域并与其互操作,常常用作一个可供 Windows 系统使用的通用互联网文件系统 (Common Internet File System, CIFS) 文件服务器。Samba 4.x 安装还允许 Samba 服务器充当 Windows 域的一个活动目录域服务 (Active Directory Domain Service) 控制器和集成的域名系统 (Domain Name System)。
尽管 Samba 服务器提供了一种优秀机制来从 Windows 系统提供 Linux 资源,使 Linux 系统可打印到 Windows 打印机,但如果您感兴趣的只是偶尔从 WIndows 共享检索文件,安装和配置 Samba 服务器可能会大材小用。Samba 客户端包 (samba-client) 包含多个专为这类偶尔交互所设计的实用程序,包括 smbclient 应用程序,该应用程序提供了一个交互式命令行接口 (CLI) 来远程访问 Windows 共享。
如果不确定远程 Windows 服务器上提供的共享名称,则可使用 smbclient 应用程序查询一个服务器,在服务器的名称或 IP 地址后键入 -L 选项来列出该服务器上的可用资源,如 清单 1 中所示。
清单 1. 使用 smbclient 列出 Windows 服务器资源
$ smbclient -U barlowliu -L Barlow-pc
Enter barlowliu's password:
Domain=[CKING] OS=[Windows 7 Professional 7601 Service Pack 1] Server=[Windows 7 Professional 6.1]Sharename Type Comment
--------- ---- -------
ADMIN$ Disk 远程管理
C$ Disk 默认共享
D$ Disk 默认共享
E$ Disk 默认共享
F$ Disk 默认共享
IPC$ IPC 远程 IPC
soft Disk
Domain=[CKING] OS=[Windows 7 Professional 7601 Service Pack 1] Server=[Windows 7 Professional 6.1]Server Comment
--------- -------
BARLOW-PCWorkgroup Master
--------- -------
CKING BARLOW-PC
MSHOME PC-20100408VZXV
WORKGROUP CKINGACC
注:-U指定远程登录的用户名,-L后指定Windows 服务器。
确定希望连接到的共享的名称后(如上述的soft共享),可使用 smbclient 应用程序连接到一个特定的共享,以检查或检索文件,如 清单 2 中所示。
清单 2. 使用 smbclient 从 Windows 共享中检索文件
$ smbclient -U barlowliu //barlow-pc/soft
Enter barlowliu's password:
Domain=[CKING] OS=[Windows 7 Professional 7601 Service Pack 1] Server=[Windows 7 Professional 6.1]
smb: \> ls
. D 0 Wed Mar 27 10:01:01 2013
.. D 0 Wed Mar 27 10:01:01 2013
OS D 0 Sat Apr 27 17:13:50 2013
办公软件 D 0 Wed Mar 27 14:11:32 2013
即时通讯 D 0 Wed Mar 27 09:53:40 2013
数据库 D 0 Mon Jun 3 08:59:15 2013
浏览器 D 0 Wed Mar 27 09:53:59 2013
系统工具 D 0 Wed Apr 24 15:24:18 201337501 blocks of size 4194304. 21943 blocks available
smb: \> cd 系统工具
smb: \系统工具\> ls
. D 0 Wed Apr 24 15:24:18 2013
.. D 0 Wed Apr 24 15:24:18 2013
Dell服务器软件 D 0 Wed Apr 24 14:22:40 2013
Hypertrm D 0 Thu Mar 28 14:53:33 2013
NSCP-0.4.1.90-x64.msi A 29418492 Sun Apr 7 17:19:56 2013
putty D 0 Wed Mar 27 09:27:36 2013
vnc-4_1_3-x86_win32.exe A 741744 Wed Oct 15 17:14:08 2008
Windows Loader v2.2.1 D 0 Tue Jan 29 14:33:00 201337501 blocks of size 4194304. 21943 blocks available
smb: \系统工具\> get NSCP-0.4.1.90-x64.msi
getting file \系统工具\NSCP-0.4.1.90-x64.msi of size 29418492 as NSCP-0.4.1.90-x64.msi (836.7 KiloBytes/sec) (average 836.7 KiloBytes/sec)
清单 2 中的示例表明,smbclient 提供了一个 CLI 来连接远程服务器。此接口支持熟悉的 Linux 命令,比如 cd(用于在远程服务器上的目录中移动)和 ls(用于列出给定目录的内容)。找到希望检索的文件后,可使用 get 命令检索该文件,将其存储在您希望从中执行 smbclient 的目录中。要将检索到的文件存储在另一个目录中,可使用 lcd(本地更改目录)命令来更改 smbclient 视为当前目录的目录。
如果仅需要偶尔访问 Windows 共享中的一个或多个文件,且并不关心使用文件管理器(比如 Gigolo、GNOME Nautilus、KDE Dolphin、Konqueror 或 Thunar)来以图形方式浏览 Windows 共享,那么可以放心地使用 smbclient 应用程序。smbclient 应用程序使一个远程共享可在该应用程序的上下文中使用,而不是在您的整个系统中使用。要浏览 Windows 共享并将其提供给您选择的应用程序,则必须采用挂载本地文件系统的相同方式将该共享挂载到您的系统上。
永久挂载 Windows 共享
永久挂载 Windows 共享
可将 Windows 共享手动挂载在系统上的目录上,方法是以 root 用户身份使用 mount 命令或使用 sudo 应用程序,如 清单 3 中所示。mount 命令的 -t 选项及其 cifs 参数指定您挂载的文件系统类型,而且在此情况下,会导致一般性的 mount 命令调用 /bin/mount.cifs 命令。使用您系统的 package-management 命令安装 cifs-utils 程序包,该程序包是 Samba 套件的一部分。
清单 3. 挂载并列出手动挂载的 Windows 共享的内容
$ sudo mkdir /media/share ##创建挂载目录
$ sudo mount -t cifs //barlow-pc/soft /media/share ##挂载远程Windows共享目录,需要支持匿名访问
示例 mount 命令使远程共享可通过/media/share 目录使用,但具有一些缺点:
简单地将此命令添加到 /etc/fstab 文件中无法自动挂载该共享,因为您在执行 mount 命令后会被提示输入密码。如果尚未确定要用于验证的特定用户,就必须为用于执行 su 或 sudo 命令的用户提供远程 Windows 密码。
以 root 用户身份执行 mount 命令,将共享挂载为 root 用户所有的资源。如果仅希望读取该共享中的文件,尽管可通过此方式挂载共享,但您只能以 root 用户身份向挂载的共享写入数据,这通常很不方便。
要解决这些问题,可在执行 mount 命令时指定特殊的 CIFS 相关选项,以挂载一个 CIFS 共享。这些选项包括:
username= - 指定将用于对远程共享进行验证的用户。可将此选项缩写为 user=。
password= - 指定将对远程共享进行验证的用户(您将该用户指定为将使用的用户)的密码。
uid= - 指定将拥有所挂载共享中的文件和目录的用户 ID (UID)。如果在 Linux 桌面上使用密码文件身份验证方式,则可使用 grep 命令在系统的密码文件中搜索您的登录名,以找到您的 UID,如以下示例中所示。
$ id barlowliu
uid=16777216(barlowliu) gid=16777218(domain users) 组=16777218(domain users),16777219(domain admins),16777220(enterprise admins),16777221(schema admins),16777222(denied rodc password replication group),16777217(BUILTIN\users),16777216(BUILTIN\administrators)
##注:我的Barlowliu用户是Windows AD域用户。
具体使用方法如下:
$ sudo mount -t cifs -o username=barlowliu,password=密码,uid=16777216,gid=16777219 //liuxingwang/soft /media/share
$ ll /media/share/
总用量 0
drwxr-xr-x 0 barlowliu domain admins 0 4月 27 17:13 OS
drwxr-xr-x 0 barlowliu domain admins 0 3月 27 14:11 办公软件
drwxr-xr-x 0 barlowliu domain admins 0 3月 27 09:53 即时通讯
drwxr-xr-x 0 barlowliu domain admins 0 3月 27 09:53 浏览器
drwxr-xr-x 0 barlowliu domain admins 0 6月 3 08:59 数据库
drwxr-xr-x 0 barlowliu domain admins 0 4月 24 15:24 系统工具
这样使用barlowliu用户登录后就具有读写权限了!