转自:http://www.ibm.com/developerworks/cn/aix/library/au-aix_samba/?ca=drs-cn-0212
简介
Samba 是免费的开放源码软件套件,它在 Windows 客户机和 UNIX 类平台之间提供无缝的文件和打印服务。
它可以在 AIX、BSD UNIX、Linux、IBM 390 和 OpenVMS 等 UNIX 类平台上运行。Samba 使用安装在主机服务器上的 TCP/IP 协议。如果正确地配置的话,这个服务器软件使主机机器能够共享文件和打印机,让 Windows 客户机能够访问它们。
Samba 的 AIX 版本的重要特性包括:
· 通过 SMIT 安装二进制代码
· 基于 SMB 的文件和打印服务
· 创建共享和用户
· 通过基于 Web 的系统管理器 SWAT 进行配置和维护
· 跟踪和日志功能
· 发送文件 API 支持
· 长 AIX 用户名和文件名支持
· 资源浏览协议(网络邻居)
· 传递身份验证
· 访客登录支持
· 共享和域级安全支持
· Unicode 支持
· 多元 SMB 支持(Windows 终端支持)
· 不使用 NETBIOS 的连接
· SMB 签名
· Active Directory 支持
· 目录更改通知
· MSDFS 支持
· AIX Classic 和 NFSv4 ACL 支持
· 网络登录支持,包括浏览用户个人信息
· 服务器级安全性 —— 域控制器功能
· 大文件支持
· DOS 文件属性映射
· 自动中断连接
· 浏览主支持
Samba 的 AIX 版本不提供以下特性:
· Samba 作为 LDAP 服务器或客户机
· Samba 作为 Active Directory 服务器
· Kerberos 服务器支持
· DCE/DFS 支持
· DNS 更新支持
· automount / smbmount 支持
· PAM 支持
· NISPLUS 支持
· 集群支持
Samba 可以在支持 AIX 6100-02 或更高的任何计算机上运行。服务器必须至少有:
· 30MB 的 RAM
· 连接网络的支持 TCP/IP 的 LAN 适配器
每台客户机 PC 必须安装一个 LAN 适配器;应该连接网络;在客户机上应该安装 Windows 98、Server 2003、NT®、Vista® 或 XP®。
注意,Samba 与 Fast Connect 不兼容。因此,必须卸载现有的 Fast Connect 版本。
AIX 上的 Samba 需要以下包:
映像 | 文件集 | 描述 |
Samba.base | Samba.base | Samba 服务器 |
Samba.license | Samba.license | Samba 许可证 |
Samba.man | Samba.man | Samba 的手册页 |
配置 SWAT
要想连接 Samba 服务器,必须创建用户和共享。存储共享的相关信息的配置文件是 /usr/lib/smb.conf。可以使用 AIX 中的文本编辑器或 SWAT 界面编辑此文件。
按照以下步骤配置 SWAT:
1. 在 /etc/inetd.conf 中添加以下行:
swat stream tcp nowait root /usr/sbin/swat swat |
2. 在 /etc/services 中添加以下行:
swat 910/tcp |
3. 用以下命令刷新 inetd:
$ refresh -s inetd |
配置了 SWAT 之后,就可以在浏览器中通过以下 URL 连接它:
http://samba_server.my.domain.:910 |
SWAT 页面为所有配置参数提供帮助。还可以在 AIX 命令行上通过 man 命令访问手册页。
启动 Samba 服务器
Samba 有两个守护进程(nmbd 和 smbd),需要运行它们 Samba 才能正常工作。
nmbd 是一个服务器,它可以理解和响应 NetBIOS over IP 命名服务请求,比如 Windows 95/98/ME、Windows NT、Windows 2000、Windows XP 和 LanManager 客户机等 SMB/CIFS 客户机产生的请求。它还参与浏览协议,从而构建 Windows 网络邻居视图。
smbd 是服务器守护进程,它向 Windows 客户机提供文件共享和打印服务。这个服务器使用 SMB(或 CIFS)协议向客户机提供文件空间和打印服务。
可以在命令行上用以下命令启动这两个守护进程:
$ nmbd $ smbd |
可以在 /var 目录中找到这两个守护进程的日志文件 log.nmbd 和 log.smbd。
还可以在 /etc/inittab 中添加以下行,从而在系统重新引导时自动启动这些守护进程:
mkittab nmb:2:once:/usr/sbin/nmbd mkittab smb:2:once:/usr/sbin/smbd |
现在,在每次重新引导期间都会启动这些守护进程。这两个守护进程会出现在进程列表中:
# ps -ef | grep mbd root 667870 708792 0 12:49:24 - 0:00 smbd root 675974 1 0 12:49:24 - 0:00 nmbd root 708792 1 0 12:49:24 - 0:00 smbd |
可以使用 SWAT 中的 Password 菜单或使用 pdbedit 实用程序创建新用户:
# pdbedit -a guest new password: retype new password: |
添加的新用户实际上是一个 AIX 用户。可以使用 smbpasswd 实用程序修改现有用户的密码:
$ smbpasswd -U guest |
可以通过编辑 smb.conf 文件或使用 SWAT 中的 Shares 菜单创建新的共享。下面是 smb.conf文件中的共享定义示例:
[samba] path = /samba |
测试 smb.conf
可以使用 testparm 实用程序测试 smb.conf 的内容。如果出现错误,可以通过编辑 smb.conf 解决问题,然后重新测试:
# testparm /usr/lib/smb.conf Load smb config files from /usr/lib/smb.conf Processing section "[tmp]" Processing section "[public]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
[global] workgroup = USERS
[samba] path = /samba
|
在 AIX 计算机上,可以使用 smbclient 实用程序列出到共享的连接:
# smbclient -L //beas.in.ibm.com/samba Password: Anonymous login successful Domain=[USERS] OS=[UNIX] Server=[Samba 3.0.25b]
Sharename Type Comment --------- ---- ------- tmp Disk public Disk IPC$ IPC IPC Service (Samba 3.0.25b) Anonymous login successful Domain=[USERS] OS=[UNIX] Server=[Samba 3.0.24]
Server Comment --------- ------- BEAS Samba 3.0.24
Workgroup Master --------- ------- USERS
|
还可以使用 smbclient 实用程序连接共享:
# smbclient //beas.in.ibm.com/samba -U root Password: Domain=[BEAS] OS=[UNIX] Server=[Samba 3.0.24] smb: \>
|
可以用以下命令检查当前目录:
smb: \> pwd Current directory is \\beas.in.ibm.com\samba |
可以用以下命令关闭 Samba 服务器:
smbcontrol smbd shutdown smbcontrol nmbd shutdown |
可以用以下命令中断共享的连接:
smbcontrol <process id of smbd> close-share <sharename> |
例如:
# smbcontrol 352494 close-share homes # smbcontrol 352494 close-share guest |
注意,如果在客户机中打开了任何文件,这些命令就不生效。
可以在服务器计算机上运行以下命令设置客户机超时:
# smbcontrol --timeout=100 smbd close-share tmp |
超时之后,客户机连接被中断。
另一种方法是在 smb.conf 中设置计时器,如下所示:
[global] dead time = 1 |
连接一个客户机并让驱动器空闲一分钟。一分钟之后,驱动器就会中断连接。
ping 客户机
在服务器计算机上运行以下命令 ping 客户机:
smbcontrol <pid of smbd> close-share <sharename> |
例如:
# smbcontrol 352494 ping PONG from pid 352494
|
来自客户机的响应是一个 PONG 消息。
Samba 为 nmbd 和 smbd 守护进程提供日志。nmbd 日志记录在 /var/log.nmbd 中,smbd 日志记录在 /var/log.smbd 中。
本节讨论 Samba 中的一些重要特性及其配置方法。
前一节介绍的身份验证方法是用户级安全措施。用户是在 Samba 服务器上定义的。客户机通过服务器中定义的一个用户进行身份验证。smb.conf 中的全局选项是:
[global] security = user |
这是 Samba 服务器的默认选项。
在 Samba 中编译了一个标准的内部用户列表,包括 nobody、Administrator 等用户。是否能够访问文件或打印机资源取决于是否作为这些标准用户之一成功地通过了身份验证。
如果一个资源应该只允许某一特定用户访问,那么可以在 smb.conf 中配置:
[global] security = share
[tmp] only user = yes user = ann path = /tmp
[samba] path = /samba |
在这个配置示例中,只允许 ann 访问 /tmp,但是访客用户可以访问 /samba。
only user 选项表示 Samba 是否使用只基于用户名选项中指定的用户的共享级安全性来控制共享连接,而不使用 Samba 内部列表中的用户(nobody、Administrator 等)。此选项的默认值是 no。
在采用服务器级安全性时,可以把身份验证信息传递给另一个服务器。这也称为传递身份验证。下面是 smb.conf 中的配置:
[global] workgroup = IN.IBM.COM encrypt passwords = yes security = server password server = jhelum.in.ibm.com
[share2] comment = mnt path = /home/mary/mnt2 read only = No valid users = mary
[share1] comment = mary path = /home/mary/mnt1 writeable = yes valid users = nobody |
在此示例中,允许用户 “mary” 访问 share2,允许 “nobody” 访问 share1。
域控制器对域中的所有计算机(包括 Windows 和 AIX 计算机)进行身份验证。一个域通常属于同一个子网。Samba 可以起到域控制器的作用。smb.conf 应该包含以下代码:
[global] workgroup = SAMBA security = user domain master = yes local master = yes preferred master = yes os level = 65 domain logons = yes add machine script = /usr/sbin/useradd -d /var/lib/nobody -g 100 %u |
在 Windows 客户机设置中,加入这个 Samba 域。在远程用户列表中添加来自 Samba 域的权限。这些用户不必存在 Windows 中,但是必须存在 Samba 域中。
Samba 是域控制器。Windows 计算机是域的成员。当在 Windows 客户机上选择一个域并输入用户名和密码时,向 Samba 服务器发送身份验证请求。可以向另一个 Samba 服务器(域控制器)传递身份验证信息,如下所示:
[global] security = server password server = jhelum.in.ibm.com |
在此示例中,jhelum 作为域控制器运行 Samba 服务器。身份验证信息会传递给 jhelum。
如果域控制器是未知的,无法在 smb.conf中指定,那么 Samba 服务器可以在域中搜索域控制器。应该在 smb.conf 中这样设置:
password server = * |
如果 Windows 上安装了 Active Directory (AD) 服务器,那么可以把 Samba 配置为把所有连接转发给 Active Directory 服务器以执行身份验证。
可以按以下方式实现这种身份验证。
在 AD 和 Samba 中创建用户 rocky 并设置不同的密码。假设 AD 安装在 Windows 客户机 9.124.101.235 上。按以下方法配置 smb.conf:
[global] WORKGROUP = mygroup security = server password server = 9.124.101.235
[tmp] path = /tmp msdfs root = yes public = yes
[rocky] path = /home/rocky public = yes |
映射为使用两个不同密码的用户 rocky(分别针对 Samba 和 AD)。两者都会通过身份验证。
多用户登录功能允许多个客户机通过同一个服务器连接访问共享资源。
为了测试此功能,在一台 Windows 计算机上安装 Windows Terminal Server。重新引导此计算机。把一个驱动器映射到 Samba 服务器。从另一个客户机通过 Remote Desktop 服务连接这台 Windows 计算机。
应该能够看到并访问映射的驱动器,不会出现密码提示。只需登录此计算机即可。
应该只在映射的客户机和 Samba 服务器之间出现交互。在与 Samba 服务器交互时,任何地方都不会出现第二个客户机的 IP。
通过在 smb.conf 中设置以下参数,可以启用访客登录:
[global] security = user guest ok = yes |
可以为错误的密码或错误的用户名实现访客帐户。如果选项是 bad password,那么可以用所有密码或空密码登录服务器。如果选项是 bad user,只能用错误的用户名登录,而不能使用 Samba 登录。设置方法如下:
[global] map to guest = Bad user |
分配给访客登录的用户由 guest account 参数表示:
[global] guest account = mary |
Samba 允许为共享文件或打印机指定用户或权限。
在共享的定义中可以使用以下选项:
##force permissions on files created on a share create mask = 0777
##force permissions on directories created on a share directory mask = 0444
## force user and group for files and directories created on a share force user = root (username) force group = system (groupname)
|
用具有读/写权限的任何其他用户(非根用户)把一个 Windows 客户机驱动器连接到这个共享,创建一个新文件。检查在共享中创建的文件的权限。新文件应该具有 root 和 system 的权限。
要想只允许特定的用户读/写共享,应该在 smb.conf 中使用以下配置:
[tmp] path = /tmp writable = no write list = root read list = root |
当在 Samba 中禁用密码加密时,身份验证由 AIX 执行。只有在启用密码加密的情况下,才会进行 Samba 身份验证。
在 smb.conf 中添加以下配置:
[global] password encryption = no |
在 AIX 中创建一个在 Samba 中不存在的用户。如果在 Windows 客户机中使用此用户连接一个驱动器,就会发现是由 AIX 对用户进行身份验证。现在,在 smb.conf 中做以下修改:
[global] password encryption = yes |
尝试连接以上用户。此操作应该会失败,错误消息指出此用户不存在。
这表明,当禁用加密时,由 AIX 对用户进行身份验证。当启用密码加密时,由 Samba 执行身份验证,也就是上面的第二种情况。
MSDFS 特性
MSDFS 允许把多个文件服务器无缝地集成在同一个逻辑名称空间中,这会产生以下结果:
· 可以跨多个文件服务器使用单一驱动器映射,这些服务器可以分散在整个网络中。
· 可以把多个文件服务器映射到同一个名称,从而为数据访问提供冗余和位置。
· 把复杂的逻辑和物理拓扑显示为单一目录树(驱动器映射),其中的子目录实际上可能位于远程服务器。
MSDFS 被组织为 MSDFS 根文件共享的拓扑,其中可以包含指向其他本地或远程文件共享的 MSDFS 链接。这些 MSDFS 链接显示为子目录,所以只要在远程服务器上正确地验证用户的身份,就会透明地重定向到远程文件共享。(Windows 客户机软件管理 MSDFS 重定向和远程服务器身份验证)。
要想在 Samba 中使用此特性,应该在 smb.conf 文件中指定 MSDFS 根。
[global] host msdfs = yes security = user
[tmp] path = /tmp msdfs root = yes public = yes |
用以下配置链接到 DFS 根:
cd /tmp ln -s msdfs:beas.in.ibm.com\\radhika t1
|
这里的 beas.in.ibm.com\\radhika 是一个共享,beas 也运行 Samba,并在编译时采用 --with-msdfs 选项。如果从 Windows 客户机映射 tmp 共享,那么可以访问 t1 的目录。因此,此特性使用户可以从 DFS 根访问共享的目录。
ACL 支持
Samba 支持 AIXC 和 NFSv4 ACL。下面介绍在 Samba 中使用 NFSv4 ACL 的配置细节。
用 v2=extended attribute /samba 创建一个新的文件系统。检查文件系统支持的 ACL 类型:
# aclgettypes /samba Supported ACL types are: AIXC NFS4 |
创建新文件 test1.txt 并检查此文件的 ACL:
# aclget test1.txt * * ACL_type AIXC * attributes: base permissions owner(root): rw- group(system): r-- others: r-- extended permissions enabled |
如果禁用了 extended permissions,那么启用它。把 test1.txt 的 ACL 类型转换为 NFS4:
# aclconvert -t NFS4 test1.txt |
查看 test1.txt 的 ACL:
# aclget test1.txt * * ACL_type NFS4 * * * Owner: root * Group: system * s:(OWNER@): a rwpRWaAdcCs s:(OWNER@): d xo s:(GROUP@): a rRadcs s:(GROUP@): d wpWxACo s:(EVERYONE@): a rRadcs s:(EVERYONE@): d wpWxACo
Include a new share for the created filesystem in smb.conf: [samba] path = /samba public = yes
|
在 UNIX 权限和 NFS4 ACL 之间没有固定的映射。因此,如果对比 NFSv4 ACL 和 ls –l 列表中的权限,可能会产生误解。
在 Windows 客户机上使用用户 "john"(他属于 system 组)映射一个驱动器。在 /samba 中创建一个新文件。因为对于这个组拒绝删除操作(D),所以服务器不允许删除此文件。
SMB 签名
SMB 签名为 Samba 服务器提供相互身份验证和消息身份验证功能。在默认情况下,SMB 签名是禁用的。如果启用此特性,还会用数字签名检验每个消息。
为了启用 SMB 签名,应该在 smb.conf 中添加以下配置:
server signing = yes |
在 Windows 客户机上启用 SMB 签名。在此之后,SMB 头就会包含注解 “Security signatures areenabled”。
大文件是指超过 4G 的文件。Samba 服务器在默认情况下支持大文件。它不需要设置任何参数。要想测试此特性,可以通过映射的驱动器把一个大文件从 AIX 传输到 Windows 客户机。此操作应该会成功。
可以跨 Windows 客户机共享和访问 AIX 中的打印机资源。
请考虑在 AIX 中配置的以下打印队列。
# lpstat Queue Dev Status Job Files User PP % Blks Cp Rnk ------ ---- -------- --- ---------- ------ ---- -- --- --- --- badq lxx READY 52ps hp@9 READY 52cl hp@9 READY 52vcl lxx READY |
可以在 smb.conf 中添加打印机共享:
# cat /usr/lib/smb.conf [global] print command = /usr/bin/lpr -r -P%p %s lpq command = cat %p >> /tmp/lpq.log ;/usr/bin/lpq -P%p lprm command = /usr/bin/lprm -P%p %j
[52vcl] printable = yes use client driver = yes browseable = yes print command = /usr/bin/lp -d 52vcl %s path = /tmp printing = AIX guest ok = yes print ok = Yes |
在同一子网中,可以在 Windows 网络邻居中看到配置的打印机。另外,在其他子网中,可以作为新打印机添加连网的打印机。
可以使用 SMB 客户机测试打印服务:
# smbclient //aixfvt49.in.ibm.com/52vcl -U joe Password: Anonymous login successful Domain=[SAMBA] OS=[UNIX] Server=[Samba 3.0.26a] smb: \> put /etc/motd putting file /etc/motd as \/etc/motd (6.5 kb/s) (average 6.5 kb/s) smb: \>
|
可以从 Windows 向这个连网的打印机发送打印请求。
DOS 属性映射
Samba 用以下选项支持 DOS 文件属性:
map archive = yes map system = yes map hidden = yes |
下图显示权限与 DOS 属性的映射关系。
权限与 DOS 属性
可以在共享的目录中创建一个文件并设置一些权限位。可以使用 SMB 客户机工具查看权限:
在 AIX 中:
-rwxrwxrwx 1 john staff 0 Jan 29 14:25 New Text Document (4).txt -rwxrwxrwx 1 guest usr 0 Feb 27 15:23 New Text Document (5).txt drwxrwxrwx 2 ldapdb2 dbsysadm 256 Feb 08 10:46 SQLDIR.LK0 |
从 smbclient:
New Text Document (4).txt AHS 0 Tue Jan 29 14:25:56 2008 New Text Document (5).txt AHS 0 Wed Feb 27 15:23:34 2008 SQLDIR.LK0 D 0 Fri Feb 8 10:46:05 2008 |
在 Samba 中默认实现目录更改通知特性。当从客户机修改一个目录(比如创建新文件)时,Samba 生成一个 "NT NOTIFY" 消息。
如果必须修改更改时间间隔,那么像下面这样编辑 smb.conf:
change notify timeout = 10 |
iptrace 显示 NT NOTIFY 请求和响应。
NETBIOS-less 连接
在一台 Windows 客户机上禁用 NETBIOS over TCP/IP 并重新引导。现在连接一个驱动器。连接会成功,这说明在 Samba 中允许 NETBIOS-less 连接。
在同一子网中的 Windows 客户机的网络邻居中可以看到 Samba 服务器。
可以按以下方式测试此特性。需要一台与 Samba 服务器在同一子网中的 Windows 客户机。假设 Samba 服务器在 jhelum中运行,9.124.113.100 是同一子网中的 Windows 客户机。
编辑 smb.conf:
[global] workgroup = WORKGROUP security = user [samba4] path = /samba4 writeable = yes valid users = root |
现在在 Windows 客户机中查看网络邻居。在客户机的网络邻居中可以看到 Samba 服务器。
网络浏览是指让 Windows 和 Samba 服务器能够显示在 Windows 网络邻居中。在网络邻居中,以图标显示服务器,如果展开图标,就会显示此服务器上可用的共享和打印机。
一个域主浏览器整理来自所有子网上的本地主浏览器的浏览列表,这样就可以在工作组和子网之间进行浏览。另外,域主浏览器应该作为它自己子网的本地浏览器。
可以通过以下设置让 Samba 成为浏览主:
[global] local master = yes preferred master = yes WORKGROUP = SAMBA |
在 smb.conf 中,可以设置 nmbd 在重复广播 LAN Manager 公告之前等待的时间间隔(以秒为单位):
lm interval = 120 |
现在,在 Windows 客户机上测试连接。
使用 SMB 客户机工具测试浏览主功能:
# smbclient -L //aixfvt21.in.ibm.com/tmp Password: Anonymous login successful Domain=[SAMBA] OS=[UNIX] Server=[Samba 3.0.26a] Sharename Type Comment --------- ---- ------- tmp Disk samba Disk IPC$ IPC IPC Service (Samba 3.0.26a) Anonymous login successful Domain=[SAMBA] OS=[UNIX] Server=[Samba 3.0.26a] Server Comment --------- ------- AIXFVT21 Samba 3.0.26a
Workgroup Master --------- ------- SAMBA AIXFVT21 |
下面是相关的 log.nmbd 片段:
[2008/03/27 13:22:10, 0] nmbd/nmbd_become_lmb.c:become_local_master_stage2(396) ***** |
Samba 名称服务器 AIXFVT21 现在是 9.124.101.199 子网上 SAMBA 工作组的本地主浏览器。
注意,localmaster = yes 仅仅保证 Samba 将参与选择,这是它的惟一作用。当 Samba 在线时,preferred master = yes确保首先选择 Samba 作为浏览主。
在 AIX 中,可以使用 tcpdump 命令跟踪客户机和服务器之间传输的消息包。
在服务器上启动 tcpdump 命令:
tcpdump -s 0 -w <tracefile> host <hostname> and <hostname/ipaddress> |
例如:
tcpdump -s 0 -w cap_1.cap host aixfvt21 and 9.126.241.144
|
客户机和服务器之间的事务完成之后,可以停止 tcpdump 进程。然后,可以使用 Ethereal 或其他工具查看创建的跟踪文件。
/var/log.smbd 记录来自 SMB 守护进程的消息,/var/log.nmbd 记录来自 nmb 守护进程的消息。
在 smb.conf 中可以提高日志级别:
[global] log level = 5 |
可以根据需要在日志中查看错误消息。