与 Windows 共舞 - Samba

参考文件

  • pinfo smb.conf

所需套件

  • samba-3.0.10-1.4E (CentOS 4, 包含 smb 的 samba 伺服器程式)
  • samba-common-3.0.10-1.4E (CentOS 4, 包含常用的设定档)

在 Windows 里, 使用 "网路芳邻" 来做 Windows 之间的分享; 在 Unix/Linux 里, 使用 NFS 做资源分享, 使用 Samba, 就可以让 Windows 和 Linux 使用 SMB 通讯协定来完成彼此之间的分享.

本篇文章, 大部份均使用 /etc/samba/smb.conf 这个档案, 如有使用到别的档案, 会另行说明.

让 Linux 成为群组之一

要让 Linux 成为 Windows 网路的群组之一, 就是要把自已加入群组, 设定的方法. 在 [global] 里的 workgroup 要设定成 Windows 群组:

[global]
# workgroup 后面接的群组为 "务必大写"
workgroup = HOME
server string = Steven's Note Book

设定完之后, (重新) 启动 smb service

[root@nbcentos init.d]# ./smb start

接下来, 您就可以在 Windows 的网路芳邻里看到了。

这样可以很清楚的看到, Nbcentos 是那台经由 samba 分享出来的电脑名称, 而 注解栏位就等於是 server string 的设定.

建立一位使用者

能看到电脑了 ! 接下来一定会马上想点两下看看有分享些什么 :) 但很不幸的居然需要帐号密码 :-(

现在我们来建立一个用者密码, 让他能登入. 建立密码的前提, 这个帐号必需为 "本机系统" 的实体帐号, 也就是说, 在设定密码时, 前提是一定要有这位使用者才可以, 假设目前已经有了一位叫 steven 的 user, 现在要让他能够登入.

[root@nbcentos samba]# smbpasswd -a steven
New SMB password:
Retype new SMB password:
Added user steven.
[root@nbcentos samba]#

现在再输入一次帐号密码试看看!

看, 这样就可以看到自己的家目录了!

分享其它的目录

现在系统除了使用者家目录之外, 管理员也希望把一些文件也分享出来让大家使用 (位置在 /documents) , 那么我们就应该设立一个分享才行.

分享有一些条件, 就是只能读取但无法写入.

新增一个分享区块

# 在最后加上一个区块
[documents]
comment = The Administrator's CookBook
path = /documents
read only = yes
browseable = yes

设定完之后, (重新) 启动 smb service

[root@nbcentos init.d]# ./smb start

再看一次有什么变化

限定某些网段才可以使用本机分享

基於安全理由, 有些管理员可能希望这些分享只有在公司的网路才可以共享, 在其它的地方则不允许, 这时候我们可以使用 hosts allow 选项来让我们达成这个目地.

# 只限定 192.168.1.0/24 可以分享资源
hosts allow = 192.168.1.

一样, 您必需要重新启动 smb 服务才行.

如果您不是在允许的范围之内, 那么在连接时就会发生错误讯息:

smb 系统已启动, 其它电脑就是无法连线

samba 在执行时, 会使用 udp 137, udp 138, tcp 139, tcp 445 等 port, 如果一切就绪, 但还是无法连线, 那么就有可能是您的防火墙没有开放, 把他开启就可以了, 如果您是使用 iptables 则可以考虑使用以下指令:

以下要开启的 port 是和微风论坛的大哥实做之后得到的, 谢谢微风论坛的大哥 ^^

0001
0002
0003
0004
root # iptables -A INPUT -p udp --dport 137 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p udp --dport 138 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p tcp --dport 139 -m state --state NEW -j ACCEPT
root # iptables -A INPUT -p tcp --dport 445 -m state --state NEW -j ACCEPT

关於 udp 137, udp 138, tcp 139,tcp 445 的相关介绍, 请参考 Andrew 所提供的连结:
* http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/cnet/cnfc_por_simw.mspx?mfr=true
* http://support.microsoft.com/kb/179442

与事实相违? 已允许写入确还是发生错误

当您在 smb.conf 设定了 user 可以在目录写入时, 确还是会出错时, 这时您就要考虑要一点: 所有的 Service 允许的动作最后都要尊重 Filesystem 的权限.

上面意思是, 如果您允许 user 在 documents 放入自已的文件, 但是如果在主机 /documents 没有给 user 写入的权限, 那么还是无法写了的!

中文字发生错误?

相信大家在取档名时,会发现一个很怪异的情况,就是中文档名都变成乱码了,就像下图所示:

其实这是在 samba 中,字型编码 code page 的问题,只要改成正确的 code page 就可以了,修改 /etc/samba/smb.conf。

# 在 [global] 区段里加入以下三行
display charset = cp950
dos charset = cp950
unix charset = cp950

修改完之后,重新启动 samba 就可以了。

root # service smb restart
停止 SMB 服务: [ 确定 ]
停止 NMB 服务: [ 确定 ]
启动 SMB 服务: [ 确定 ]
启动 NMB 服务: [ 确定 ]
root #

再来看一次,中文编码应该没问题了。

本例使用 samba 3.x,有关中文编码的问题在 samba 2.x 并不适用。

Last modified: 02/28/2007
12/29/2005


首页