如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS (网络信息服务——NIS) (Network Information Service) 是集中控制几个系统管理数据库的网络用品。)这玩意儿了!至于Windows 对 Windows 的环境下,最简单的方法则是网上邻居。那如果你的区网中有 Windows也有 Linux 而且想要共享文件系统的话,那该怎办? 那就使用 Samba 服务器吧!Samba 可以让 Linux,加入 Windows 的网上邻居支持,让异质平台可以共享文件系统! 非常好用!不仅如此, Samba 也可以让 Linux 上面的打印机成为打印机服务器 (Printer Server)。
SAMBA 服务器的作用:
分享档案与打印机服务;
可以提供用户登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据;
可以进行 Windows 网络上的主机名解析 (NetBIOS name)
可以进行装置的分享 (例如 Zip, CDROM...)
SAMBA 服务器的应用实例:
1)利用软件直接编修 WWW 主机上面的网页数据:
用samba替代ftp;实现在线编辑。
2)做成可直接联机的文件服务器:
使用 SAMBA 将硬盘空间分享出来,由于使用者要登入 SAMBA 这个服务器主机时需要输入用户数据 (账号与密码),而不同的登入者会取得不一样的目录资源,所以可以避免自己的数据在公用计算机上面被窥视, 此外,在不同的公用计算机上面都可以登入 SAMBA 主机,数据的使用上面相当的棒!
3)打印机服务器:
SAMBA 除了分享文件系统外,也可以分享打印机,可以直接以 Linux 分享的打印机来印制。
SAMBA 使用的 daemons
1)取得对方主机的 NetBIOS name 定位该主机所在:
当我们想要登入某部 Windows 主机使用他所提供的档案数据时,必需要加入该Windows 主机的群组 (Workgroup),并且我们的机器也必需要设定一个主机名,注意喔,这个主机名跟 Hostname 是不一样的,因为这个主机名是架构在NetBIOS 协议上的,我们可以简单的称呼他为 NetBIOS Name。在同一个群组当中,NetBIOS Name 必需要是独一无二的!
2)利用对方给予权限存取可用资源:
在我们找到该主机名后,是否能登入该对方主机或者是取用对方主机所提供的资源, 还要看对方 Windows 主机有没有提供我们使用的权限!所以,并不是登入该 Windows 主机之后我们就可以无限制的取用该主机的档案资源了。也就是说,如果对方主机允许你登入, 但是却没有开放任何资源让你取用,登入主机也无法查看对方的硬盘里面的数据的!
SAMBA 则是透过两支服务来控制这两个步骤,分别是:
nmbd :这个 daemon 是用来管理工作组啦、NetBIOS name 啦等等的解析。主要利用 UDP 协议开启 port 137, 138 来负责名称解析的任务;
smbd :这个 daemon 的主要功能就是用来管理 SAMBA 主机分享的目录、档案与打印机等等。 主要利用可靠的 TCP 协议来传输数据,开放的端口口为 139 及 445(不一定存在)。
所以, SAMBA 每次启动至少都需要有这两个 daemons。
SAMBA 服务器的联机方式:
SAMBA 服务器的应用相当的广泛,而且可以依照不同的网域联机方式,与不同的用户账号密码的控管方式来进行分类。如:peer/peer (对等模式) 及 domain model (主控模式)。
Samba 所需软件及其软件结构:
samba: 这个软件主要提供了 SMB 服务器所需的各项服务程序 (smbd 及 nmbd)、 的文件档、以及其他与 SAMBA 相关的 logrotate 配置文件及开机默认选项档案等;
samba-client: 这个软件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 文件格式的 mount.cifs、 取得类似网芳相关树形图的 smbtree 等等;
samba-common: 这个软件提供的则是服务器与客户端都会使用到的数据,包括 SAMBA 的主要配置文件 (smb.conf)、语法检验指令 (testparm) 等等;
/etc/samba/smb.conf: 这是 Samba 的主要配置文件,基本上,咱们的Samba 就仅有这个配置文件而已,且这个配置文件本身就是很详细的说明文件了,请用 vim 去查阅它吧!主要的设定项目分为服务器的相关设定 (global),如工作组、NetBIOS 名称与密码等级等, 以及分享的目录等相关设定,如实际目录、分享资源名称与权限等等两大部分。
/etc/samba/lmhosts: 早期的 NetBIOS name 需额外设定,因此需要这个lmhosts 的 NetBIOS name 对应的 IP 檔。 事实上它有点像是 /etc/hosts 的功能!只不过这个 lmhosts 对应的主机名是 NetBIOS name 喔!不要跟/etc/hosts 搞混了!目前 Samba 预设会去使用你的本机名称 (hostname) 作为你的 NetBIOS name,因此这个档案不设定也无所谓。
/etc/sysconfig/samba: 提供启动 smbd, nmbd 时,你还想要加入的相关服务参数。
/etc/samba/smbusers: 由于 Windows 与 Linux 在管理员与访客的账号名称不一致,例如: administrator (windows) 及 root(linux), 为了对应这两者之间的账号关系,可使用这个档案来设定。
/var/lib/samba/private/{passdb.tdb,secrets.tdb}: 管理 Samba 的用户账号/密码时,会用到的数据库档案;
/usr/share/doc/samba-<版本>: 这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当你安装好了 SAMBA 之后,你的系统里面就已经含有相当丰富而完整的 SAMBA 使用手册了!
Samba 的设定:
1. 服务器整体设定方面:在 smb.conf 当中设定好工作组、NetBIOS 主机名、密码使用状态 (无密码分享或本机密码) 等等;
2. 规划准备分享的目录参数:在 smb.conf 内设定好预计要分享的目录或装置以及可供使用的账号数据;
3. 建立所需要的文件系统:根据步骤 2 的设定,在 Linux 文件系统当中建立好分享出去的档案或装置,以及相关的权限参数;
4. 建立可用 Samba 的账号:根据步骤 2 的设定,建立所需的 Linux 实体账号,再以 pdbedit 建立使用 Samba 的密码;
5. 启动服务:启动 Samba 的 smbd, nmbd 服务,开始运转!
根据上面的流程,其实我们最需要知道的就是 smb.conf 这个配置文件的信息就是了。
这个档案其实可以分为两部份来看, 一个是主机信息部分,在 smb.conf 当中以 [global] (全领域) 作为设定的依据;另一个则是分享的信息, 以个别的目录名称为依据。另外,由于 Samba 主要是想加入网邻功能,因此在 smb.conf 内的很多设定都与 Windows 类似。
# 会有很多加上 # 或 ; 的批注说明,你也可以自行加上来提醒自己相关设定
[global]
参数项目 = 设定内容
....
[分享资源名称]
参数项目 = 设定内容
....
在 [global] 部分关于主机名信息方面的参数主要有:
workgroup = 工作组的名称:注意,主机群要相同;
netbios name = 主机的 NetBIOS 名称啊,每部主机均不同;
server string = 主机的简易说明,这个随便写即可。
display charset = 自己服务器上面的显示编码, 例如你在终端机时所查阅的编码信息。一般来说,与底下的 unix charset 会相同。
unix charset = 在 Linux 服务器上面所使用的编码,一般来说就是 i18n 的编码啰!所以你必须要参考 /etc/sysconfig/i18n 内的『默认』编码。
dos charset = 就是 Windows 客户端的编码了! 一般来说我们的繁体中文 Windows 使用的是 big5 编码,这个编码在 Samba 内的格式被称为『 cp950 』喔!
除此之外,还有登录文件方面的信息,包括这些参数:
log file = 登录档放置的档案,文件名可能会使用变量处理;
max log size = 登录档最大仅能到多少 Kbytes ,若大于该数字,则会被 rotate 掉。
还有网芳开放分享时,安全性程度有关的密码参数,包括这几个:
security = share, user, domain:三选一,这三个设定值分别代表:
share:分享的数据不需要密码,大家均可使用 (没有安全性);
user :使用 SAMBA 服务器本身的密码数据库,密码数据库与底下的passdb backend 有关;
domain:使用外部服务器的密码,亦即 SAMBA 是客户端之意,如果设定这个项目, 你还得要提供『password server = IP』的设定值才行;
encrypt passwords = Yes 代表密码要加密。
passdb backend = 数据库格式,如前所述,为了加快速度, 目前密码文件已经转为使用数据库了!默认的数据库格式微 tdbsam ,而预设的档案则放置到/var/lib/samba/private/passwd.tdb。
分享资源的相关参数设定 [分享的名称] :
comment :只是这个目录的说明而已!
path :这个分享名称实际会进入的 Linux 文件系统 (目录)。 也就是说,在网芳当中看到的是 [分享] 的名称,而实际操作的文件系统则是在 path 里头所设定的。
browseable :是否让所有的用户看到这个项目?
writable :是否可以写入?这里需要注意一下喔!那个 read only 与 writable 不是两个蛮相似的设定值吗?如果 writable 在这里设定为 yes ,亦即可以写入,如果 read only 同时设定为 yes , 那不就互相抵触了!那个才
是正确的设定?答案是:最后出现的那个设定值为主要的设定!
create mode 与 directory mode 都与权限有关的咯!
writelist = 用户, @群组,这个项目可以指定能够进入到此资源的特定使用者。 如果是 @group 的格式,则加入该群组的使用者均可取得使用的权限,设定上会比较简单!