SAMBA 这个套件几乎在所有的 Linux distributions 上面都有提供,因为即使你的 Linux 仅做为个人台式机使用时,
你依旧可能会需要连接到远程的 Windows 的网芳的,那个时候就得要 samba 提供的用户端软件功能啰!
因此你只要直接安装系统上面提供的缺省 samba 版本即可。底下我们会先介绍 samba 服务器,然后再介绍用户端功能喔!
目前常见的 samba 版本为 3.x 版,旧版的 2.x 版在设置上有点不一样,因此在进入设置前请先确认你的 samba 版本。
咱们的 CentOS 4.x 提供的是 Samba 3.x 的版本。那么你需要什么套件呢?基本上有这些:
- samba:
这个套件主要包含了 SAMBA 的主要 daemon 文件 (smbd 及 nmbd)、 SAMBA 的文档档
(document)、以及其他与 SAMBA 相关的 logrotate 设置档及开机缺省选项文件等;
- samba-common:
这个套件则主要提供了 SAMBA 的主要设置档 (smb.conf) 、 smb.conf
语法检验的测试程序 (testparm)等等;
- samba-client:
这个套件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA
文件格式的运行档 smbmount 等等。
这三个套件你都得要安装才行喔!如果尚未安装的话,看是要由原版光盘去安装,还是使用 yum 都可以啦!
安装完毕之后,你可以依序察看一下 Samba 的套件结构喔!与他相关的文件基本上有这些东西:
- /etc/samba/smb.conf:
smb.conf 是 Samba 的主要设置文件名,如果你的 distribution 的 SAMBA 设置档不在 /etc/samba/ 目录当中,
那么你应该使用 locate 或 find 等方式将他找出来就好啦。基本上,咱们的 Samba 就仅有这个设置档而已,
且这个设置档本身就是很详细的说明文档了,请用 vi 去查阅他吧!这个文件主要在设置工作群组、
NetBIOS 名称以及分享的目录等相关设置,我们后续要介绍的都是这个文件而已啦!
- /etc/samba/lmhosts:
这个文件的主要目的在对应 NetBIOS name 与该主机名称的 IP ,事实上他有点像是
/etc/hosts 的功能!只不过这个 lmhosts 对应的主机名称是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!由于目前
SAMBA 的功能越来越强大,所以通常只要您一启动 SAMBA 时,他就能自己捉到 LAN 里面的相关电脑的 NetBIOS name
对应 IP 的信息,因此这个文件通常可以不用设置了!
- /etc/samba/smbpasswd:
这个文件缺省并不存在啦!他是 SAMBA 缺省的用户密码对应表。当我们设置的
SAMBA 服务器是较为严密的,需要用户输入帐号与密码后才能登录的状态时,用户的密码缺省就是放置在这里咯
(当然啰,您可以自行在 smb.conf 里面设置密码放置的地方及密码文件名,
不过我们这里都以缺省的状态来说明) 。比较需要注意的是,这个文件因为包含了用户的密码,
当然权限方面要较为注意啦!这个文件的拥有者需要是 root ,且权限设置为 600 才行喔!
- /etc/samba/smbusers:
由于 Windows 与 Unix-like 在管理员与访客的帐号名称不一致,分别为 administrator 及 root,
为了对应这两者之间的帐号关系,可以使用这个文件来设置。不过这个文件的使用必须要经由 smb.conf
内的『 username map 』设置项目来启动才行。
- testparm:
这个指令主要在检验 samba 设置档 smb.conf 的语法正确与否,当你编辑过 smb.conf 时,请务必使用这个指令来检查一次,
避免因为打字错误引起的困扰啊!
- smbd, nmbd:
前几个小节曾经提过的两个主要 daemon 就在这里!
- smbstatus:
列出目前的 SMB server 的状态,也是很有用途的一个指令啦!
- smbpasswd:
如果您的 SAMBA 设置的较为严格,需要规定用户的帐号与密码,那么那个密码文件的创建就需要使用 smbpasswd
来建置才可以的喔!所以这个指令与创建 SAMBA 的密码有关咯!
- smbclient:
当你的 Linux 主机想要借由『网上邻居』的功能来查看别台电脑所分享出来的目录与设备时,就可以使用 smbclient
来查看啦!这个指令也可以使用在自己的 SAMBA 主机上面,用来查看是否设置成功哩!
- smbmount:
在 Windows 上面我们可以设置『网络磁盘机』来连接到自己的主机上面,同样的,在 Linux 上面,我们可以通过 smbmount
来将远程主机分享的文件与目录挂载到自己的 Linux 主机上面哪!不过,其实我们也可以直接使用 mount
这个指令来进行同样的功能就是了。
- nmblookup:
有点类似 nslookup 啦!重点在查出 NetBIOS name 就是了。
- smbtree:
这玩意就有点像 Windows 系统的网上邻居显示的结果,可以显示类似『靠近我的电脑』之类的数据,
能够查到工作群组与电脑名称的树状目录分布图,有趣吧!
- /usr/share/doc/samba-<版本>:
这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当您安装好了 SAMBA 之后,您的系统里面就已经含有相当丰富而完整的
SAMBA 使用手册了!值得高兴吧! ^_^,所以,赶紧自行参考喔!
大致的套件结构就是这样,底下就准备来讲一个简单的案例吧! ^_^
既然 Samba 是要加入 Windows 的网芳当中,所以他的设置方式应该是要与网芳差不多才是。所以我们先来聊一聊
Windows 的一些设置方法再说。在早期 Windows 的网芳设置真是很简单,不过也因为太简单,
所以产生的安全问题可是相当的麻烦的。后来在 Windows XP 的 sp2 (服务包第二版) 加入了很多的缺省防火墙机制,
因此使用网芳的缺省限制常常会是这样的:
- 主机与主机之间必须要在同一个网域当中 (否则需要修改 Windows 缺省防火墙);
- 最好设置为同一工作群组;
- 主机的名称不可相同 (NetBIOS name);
- 专业版 Windows XP 最多仅能提供同时十个用户连接到网芳。
当你的 Windows 主机群符合上述的条件后,就很容易处理网芳分享的工作啦!分享的步骤是这样的:
- 叫出文件总管,然后在要分享的目录、磁盘或设备 (如打印机) 上面按下右键,选择『共用』,然后就能够设置好分享的数据了;
- 最好创建一组给用户使用的帐号与密码,让其他主机的用户可以通过该帐号密码连接进入网芳;
真是有够简单的!那么 Samba 怎么设置啊?也是很简单,依据上述的限制以及流程你可以这样想像:
- 在 smb.conf 当中设置好工作群组、NetBIOS 主机名、密码使用状态等等与主机相关的信息;
- 在 smb.conf 内设置好预计要分享的目录或设备以及可供使用的用户数据;
- 根据步骤 2 的设置,在 Linux 文件系统当中创建好分享出去的文件或设备的使用权限;
- 根据步骤 2 的设置,以 smbpasswd 创建起用户的帐号及密码
- 启动 Samba 的 smbd, nmbd 服务,开始运转哩!
瞧!根据上面的流程,其实我们最需要知道的就是 smb.conf 这个设置档的信息就是了。
所以首先我们就要来介绍一下这个文件的设置方式啰!这个文件其实可以分为两部份来看,
一个是主机信息部分,在 smb.conf 当中以 [global] 作为设置的依据;另一个则是分享的信息,
以个别的目录名称为依据。你要先知道的是:
在 smb.conf 当中,
井字号与分号 (# 跟 ;) 都是注解符号!底下咱们就来谈谈这个咚咚吧!
主机整体参数
在 smb.conf 这个设置档当中的设置有点像底下这样:
# 会有很多加上 # 或 ; 的注解说明,你也可以自行加上来提醒自己相关设置
[global]
参数项目 = 设置内容
....
[分享资源名称]
参数项目 = 设置内容
....
|
在 global 当中的就是一些主机的整体参数了,包括工作群组、主机的 NetBIOS 名称、字符编码的显示、注册表的设置、
是否使用密码以及使用密码验证的机制等等,都是在这个 [global] 项目中设置的。至于 [分享资源名称]
则是针对你开放的目录来进权限方面的设置,包括谁可以浏览该目录、是否可以读写等等参数。
在 [global] 部分关于主机名称信息方面的参数主要有:
- workgroup = 工作群组的名称:注意,主机群要相同;
- netbios name = 主机的 NetBIOS 名称啊,每部主机均不同;
- server string = 主机的简易说明,这个随便写即可。
另外,过去常常让用户心生不满的语系显示问题方面,您务必要清楚的知道的是,
SAMBA 主机上面的数据 (例如 mount 磁盘分区的参数以及原本的数据编码),
SAMBA 服务器显示的语系, Windows 用户端显示的语系, Windows 用户端连上 SAMBA 的软件 都需要符合设置值才行!
在新版的 3.x 上面有数个提供这些语系转换的设置喔,如下所示:
- display charset = 自己服务器上面的显示编码,
例如你在终端机时所查阅的编码信息。一般来说,与底下的 unix charset 会相同。
- unix charset = 在 Linux 服务器上面所使用的编码,一般来说就是 i18n 的编码啰!
所以你必须要参考 /etc/sysconfig/i18n 内的『缺省』编码。
- dos charset = 就是 Windows 用户端的编码了!
一般来说我们的繁体中文 Windows 使用的是 big5 编码,这个编码在 Samba 内的格式被称为『 cp950 』喔!
关于语系编码,建议您参考一下讨论区的这一篇:
我们的网友 eyesblue 写得太好了!所以建议大家直接前往查阅即可!除此之外,还有注册表方面的信息,
包括这些参数:
- log file = 注册表放置的文件,文件名可能会使用变量处理;
- max log size = 注册表最大仅能到多少 Kbytes ,若大于该数字,则会被 rotate 掉。
还有跟密码有关的参数,包括这几个:
- security = user, server, domain, share 四选一,这四个设置值分别代表:
- user :使用 SAMBA 本身的密码数据库,密码数据库与底下的 smb passwd file 有关;
- share:分享的数据不需要密码即可分享;
- server, domain:使用外部主机的密码,亦即 SAMBA 是用户端之意,如果设置这个项目,
你还得要提供『password server = IP』的设置值才行;
- encrypt passwords = Yes 代表密码要加密,注意那个 passwords 要有 s 才对!
- smb passwd file = 密码放置的文件,通常是 /etc/samba/smbpasswd 。
事实上 Samba 的密码方面设置值很多喔,包括你还可以利用 samba 来修改 /etc/passwd 里头的人物的密码呢!
不过这个时候就得需要『 unix password sync 』以及『 passwd program 』这两个参数值的帮忙了。
我们这里先谈比较简单的,其他高端的部分可以 man smb.conf 去进行搜索查阅喔! ^_^
分享目录参数
在目录参数部分,主要有底下这几个常见的参数喔:
- [分享名称] :这个分享名称很重要,他是一个『代号』而已。
举例来说,你在 Windows 当中使用『共用』来分享网芳时,假设你将『D:\game』分享出来,
系统不是还会要你输入一个『在网络上面的名称』吗?假设你输入『My_Games』这个名称好了,
那么未来大家在网芳看到的这个文件夹 (D:\game) 名称其实是『\\你的IP\My_Games』啦!
- comment :这个目录的说明!
- path :在网芳中显示的名称 [分享名称] 中,所实际进入的 Linux 文件系统。
也就是说,在网芳当中看到的是 [分享] 的名称,而实际操作的文件系统则是在 path 里头所设置的。
- read only:是否唯读?
- public :是否让所有可以登录的用户看到这个项目?
- writable :是否可以写入?这里需要注意一下喔!那个 read only 与 writable
不是两个蛮相似的设置值吗?如果 writable 在这里设置为 no ,亦即不可写入,那跟 read only
不就互相抵触了!那个才是正确的设置?答案是:最后出现的那个设置值为主要的设置!
- create mode 与 directory mode 都与权限有关的咯!
- valid users = 用户,这个项目可以指定能够进入到此资源的特定用户。
因为分享的资源主要与 Linux 系统的文件权限有关,因此里头的设置参数多与权限有关。
变量特性
为了简化设置值,Samba 提供很多不同的变量给我们来使用,主要有底下这几个变量喔:
- %S:取代目前的设置项目值,所谓的『设置项目值』就是在 [分享] 里面的内容!
举例来说,例如底下的设置范例:
[homes]
valid users = %S
....
|
因为 valid users 是允许的登录者,设置为 %S 表示任何可登录的用户都能够登录的意思~今天如果 dmtsai
这个用户登录之后,那个 [homes] 就会自动的变成了 [dmtsai] 了!这样可以明白了吗?
%S 的用意就是在替换掉目前 [ ] 里面的内容啦!
- %m:代表 Client 端的 NetBIOS 主机名称喔!
- %M:代表 Client 端的 Internet 主机名称喔!就是 HOSTNAME。
- %L:代表 SAMBA 主机的 NetBIOS 主机名称。
- %H:代表用户的家目录。
- %U:代表目前登录的用户的用户名
- %g:代表登录的用户的群组名称。
- %h:代表目前这部 SAMBA 主机的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
- %I:代表 Client 的 IP 咯。
- %T:代表目前的日期与时间
至于相关的变量运用,我们会在底下的设置当中略做介绍喔!
以上就是在 smb.conf 上头常看到的几种设置项目,相信初次接触 Samba 的朋友,看到上头写的数据肯定是一头雾水的!
我们底下用几个小范例来实际的介绍 smb.conf 的设置后,您就会知道这些参数如何应用了!
记得,
看完底下的下范例后,要回来再将这些参数的意义瞧一瞧,
而且若有其他额外的参数须知,务必自行 man smb.conf 喔!重要的很!
瞎密?不需要密码就能够使用 SAMBA 主机所提供的目录资源?真假?没错啦,可以达到的。
不过,因为不需要密码就能够登录,虽然你可以设置权限成为唯读,让用户可以『瞧瞧而已』,
但是毕竟比较危险,因为如果你不小心将重要数据放置到该分享的目录当中,岂不危险?
所以尽量不要这样设置。不过,我们还是得介绍一下啦!先说明一下我们的设置需求:
主机预计设置的参数状况:
- 在 LAN 内所有的网芳主机工作群组 (workgroup) 为: vbirdhouse
- 这部 Linux 主机 (Samba 服务) 的 NetBIOS 名称为: vbirdserver
- 用户登录层级设置为: share
- 仅分享 /tmp 这个目录而已,且取名为: temp
- Linux 主机的编码格式假设为万国码 (Unicode, 亦即 utf8)
- 用户端为中文 Windows ,在用户端的软件也使用 big5 的编码
底下就开始依序来进行 samba 的设置吧!
1. 设置 lmhosts 文件内容 (optional):
我们前面谈到 NetBIOS 名称可以由广播的方式自动取得,而 NetBIOS 也可以通过局域网路内经由一部主控电脑来管理,
此外,你也可以利用自己主机当中的 lmhosts 这个设置档来进行 NetBIOS 与 IP 的对应,
让 NetBIOS 与 TCP/IP 可以对应上关系呐!一般来说,这个文件是可以不必设置的,因为可以经由广播的方式取得对应的嘛!
不过,某些时刻确实可以设置一下,免除一些额外的搜索时间说。我的区网中电脑名称与 IP 是这样的:
[root@linux ~]# vi /etc/samba/lmhosts
127.0.0.1 localhost
192.168.1.254 vbirdserver
192.168.1.21 vbirdcpu2
192.168.1.11 vbirdcpu1
# 这个文件的内容很简单,与 /etc/hosts 很类似,左边是 IP 右边是主机名称。
# 只是主机名称必须符合 NetBIOS name 的标准,包括:
# 主机名称不要超过 15 个字符,不要含有特殊字符等等。
# 亦可使用 man lmhosts 来查阅喔!
|
鸟哥区网内常用的有三部主机,除了 Linux 这部机器外,还有两部个人电脑,我将这几部电脑的 NetBIOS name
写到这个文件当中,可以免除 Samba 自己去搜索啰!而再次强调,这个名称是 NetBIOS name 而非 HOSTNAME 喔!
2. 检查语系数据
过去朋友们在进行 SAMBA 的设置时,最容易发生错误的地方就是在中文文件名部分,
绝大部分的朋友只要使用了中文文件名,常常会发生一些问题,就是无法顺利的上传下载,
或者是原先的中文文件名上传后,却变成奇怪的乱码文件名。
为了解决这个问题,你必须要知道几个项目:
- 源文件案 (你要分享的文件) 编码的格式为何?一般来说,中文 Windows 的编码缺省为 Big5 ;
- 这个文件放置在 Linux 上,则这部 Linux 的缺省语系编码为何?这与 /etc/sysconfig/i18n 有关;
- 在 Samba 上头的显示编码为何?一般来说与上述的 Linux 缺省编码相同即可;
- 在用户端连接到 Samba 主机的软件之语系编码为何?如果是中文 Windows 操作系统,缺省为 Big5。
你的语系数据必须要在上面这几个环境中进行转换,因此如果你的用户端连上 Samba 的软件编码为 Big5 ,
你的 Samba 使用的语系也是 Big5 ,但是 Linux 主机却缺省仅支持 utf8 的编码时,而你的 smb.conf
又没有设置好,此时数据传输就会发生一些错误,因此你就会看到很多乱码文件名了。
所以,你至少得要知道你的 Linux 语系编码为何?在 Red Hat 系统 (含我们的 CentOS) 可以查阅 /etc/sysconfig/i18n 这个文件,
如下所示为鸟哥的 i18n :
[root@linux ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8" <==这才是你需要注意的地方!
SUPPORTED="zh_HK.UTF-8:zh_HK:zh:zh_CN.UTF-8:zh_CN:zh:zh_SG.UTF-8:
zh_SG:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
|
由上头看起来,鸟哥缺省的语系编码为 en_US.UTF-8,不过尚有支持 zh_TW 这样的中文编码。
先假设鸟哥的编码为万国码 (Unicode) 好了。知道了之后就能够开始处理 smb.conf 啰!
3. 设置 smb.conf 设置档
在这个例子当中我们仅分享 /tmp 这个目录而已,而且假设这个分享出来的目录是可读写的,
另外,我们并没有分享打印机喔!而在 smb.conf 当中的注解符号可以是『 # 』也可以是『 ; 』喔!要注意!
[root@linux ~]# cd /etc/samba
[root@linux samba]# cp smb.conf smb.conf.raw <==先备份再说!
[root@linux samba]# vi smb.conf
# 先设置好主机方面的参数
[global]
# 与主机名称有关的设置信息
workgroup = vbirdhouse
netbios name = vbirdserver
server string = This is vbird's samba server
# 与语系方面有关的设置项目喔,为何如此设置请参考前面的说明
unix charset = utf8
display charset = utf8
dos charset = cp950
# 与注册表有关的设置项目,注意变量 (%m)
log file = /var/log/samba/%m.log
max log size = 50
# 这里才是与密码有关的设置项目哩!
security = share
# 其他缺省存在的项目
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
template shell = /bin/false
winbind use default domain = no
# 底下则是针对 /tmp 的设置而来的!可浏览且可写入喔!
[temp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
|
请您特别留意,在原本的 smb.conf 上面就已经有很多默认值了,这些默认值如果你不知道他的用途,
尽量保留默认值,也可以使用 man smb.conf 去查找该默认值的意义。举例来说, CentOS 4.x 的 smb.conf
缺省有针对 server/client 的封包传递项目设置值的 socket options ,也有针对 Windows NT 及 Unix 系统的帐号对应之
idmap uid 之类的设置值,这些设置值在大型的区网架构会使用到,在我们仅有一两部 Linux samba 服务器的环境下....
应该是可以不予理会的啦!
4. 用 testparm 查阅 smb.conf 的语法设置正确性
在启动 samba 之前,我们务必要了解到 smb.conf 里面语法是否正确,检验的方式使用 testparm 这个指令即可。
测试方式如下:
[root@linux ~]# testparm
参数:
-v :查阅完整的参数设置,连同默认值也会显示出来喔!
[root@linux ~]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[temp]" <==这个地方可以仔细看看,如果有问题会在这边显示
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions <==请按 [Enter] 按键
# Global parameters
[global]
dos charset = cp950
display charset = utf8
workgroup = VBIRDHOUSE
netbios name = VBIRDSERVER
server string = This is vbird's samba server
security = SHARE
log file = /var/log/samba/%m.log
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
[temp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
|
上头是语法验证与各个项目的列出,如果你下达 testparm 却出现如下画面那就是有问题:
Unknown parameter encountered: "linux charset" <==错误的设置
Ignoring unknown parameter "linux charset"
Processing section "[temp]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
|
如果发现上述的错误,这表示你的 smb.conf 有个 linux charset 的设置参数,不过 smb.conf 其实是不支持这个参数的。
可能的问题是 samba 2.x 与 samba 3.x 有一些项目的支持已经不存在了,所以你使用旧版的 2.x 设置档来 3.x
上头运行时,就会出现问题。此外,『打字错误』也是很常见的一个问题呐!赶紧测试一下语法先,
然后根据 smb.conf 有的项目去进行修改吧。
如果你想要了解 samba 的所有设置 (包括没有在 smb.conf 里头设置的默认值),可以使用 testparm -v 来作详细的输出,
数据相当的丰富,通过这个您也可以知道你的主机环境设置为何呢! ^_^
5. 启动与观察
启动实在太简单了,利用缺省的 CentOS 启动方式来处理即可。
[root@linux ~]# /etc/init.d/smb start
[root@linux ~]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 10338/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 10338/smbd
udp 0 0 192.168.1.254:137 0.0.0.0:* 10343/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 10343/nmbd
udp 0 0 192.168.1.254:138 0.0.0.0:* 10343/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 10343/nmbd
|
特别注意,在 Samba (网芳) 当中缺省会启动多个端口口,这包括数据传输的 TCP 端口口 (139, 445),
以及进行 NetBIOS 名称解析之类工作的 UDP 端口口 (137, 138),所以你才会看到很多数据的。
那么能否仅支持 139 这个必要的端口口,关闭 445 呢?可以啊~通过 testparm -v 的观察,
可以发现『 smb ports = 445 139 』这个设置值指定两个端口口的,因此你可以在 smb.conf 增加这个设置值,
并改为 smb ports = 139 即可。不过,建议先保留默认值啦!
6. 用户端的观察
关于用户端的观察我们会在后续进行介绍。在这里仅是说明如何确定我们的 Samba 设置与服务有顺利的在运作。
我们可以在本机上通过 smbclient 这支程序来处理,他的基本语法是这样的:
[root@linux ~]# smbclient -L [//主机或IP] [-U 用户帐号]
参数:
-L :仅查阅后面接的主机所提供分享的目录资源;
-U :以后面接的这个帐号来尝试取得该主机的可使用资源
|
由于在这个范例当中我们并没有规范用户的安全等级,所以必须要使用 -U 这个参数。
因此你可以这样看看:
[root@linux ~]# smbclient -L //127.0.0.1
Password: <==这里按一下 [Enter] 吧!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Server Comment
--------- -------
VBIRDSERVER This is vbird's samba server
Workgroup Master
--------- -------
VBIRDHOUSE VBIRDSERVER
|
上表输出的信息当中,分享的目录资源 (Sharename) 就是在 smb.conf 当中设置的 [temp] 名称啰!
因此在这里的意思是:
任何人都可以进入 //127.0.0.1/temp 这个目录当中,
而这个目录在 Linux 系统其实是 /tmp 目录。至于那个 IPC$ 及 ADMIN$ 则是为了要应付 Windows
环境所必须要存在的项目就是了。
基本上,到此为止咱们就设置好一个简单的不需要密码即可登录的 Samba 主机了!
你可以先行到
用户端软件功能的部分进行挂载测试。
底下我们则预计以简易的需要密码才能够登录 Samba 的方式来设计一个范例吧!
设置一部不需密码即可登录的 Samba server 是非常简单的,不过,
您总不希望某些有机密性质的数据放在不设防的网芳中让大家查阅吧?
举例来说,你总不希望你的家目录被人家随意浏览吧?家目录内可能有你自己的情书呢!^_^
那怎么办?没关系,我们可以通过 Samba 主机提供的认证方式来进行用户权限的给予,
也就是说,你在用户端连接到主机时,必须要输入正确的帐号与密码后,才能够登录 Samba 主机查阅到你自己的数据!
那会不会很难啊?不会啦! Samba 本身就提供一个小程序来帮助我们处理密码的创建了,
整个流程还不太难。比较重要的是
Samba 用户帐号必须要存在于 Linux 系统当中 (/etc/passwd),
但是 Samba 的密码与 Unix 的密码文件并不相同。这就比较有点小麻烦~
没关系,就让我们依样画葫芦来处理一下这个部分的设置吧!
主机预计分享的资源状态
- 刚刚前一个免密码时的 smb.conf 设置继续保留;
- 针对 NetBIOS name 的解析方式依序由 lmhosts, broadcast 及 host 来进行解析;
- 安全等级提升为 user 等级;
- 密码文件放置到 /etc/samba/smbpasswd 这个文件当中;
- 密码必须要加密;
- 每个可使用 samba 的用户拥有自己的家目录之外, users 这个群组的用户可以进入 /home/public 目录中,
且在该目录下 users 这个群组的所有人可具有写入的权限喔!
好了,开始一步步的处理吧!
1. 设置 lmhosts
2. 开始设置 smb.conf 文件
在这个范例的设置档当中,我们会添加几个参数,添加的参数部分会用特殊字体圈起来,
引用之前参数的部分则为一般字体。请交互参考看看啰:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
workgroup = vbirdhouse
netbios name = vbirdserver
server string = This is vbird's samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/%m.log
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
template shell = /bin/false
winbind use default domain = no
# 与密码有关的设置项目,包括密码文件所在与加密与否喔!
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
# 与 NetBIOS name 名称解析有关的设置
name resolve order = lmhosts bcast host
# 添加的每个用户家目录及群组用户哩!
[homes]
comment = Home directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
[public]
comment = the user groups work directory
path = /home/public
public = yes
writable = yes
valid users = @users
[temp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
|
[global] 部分
在添加的数据部分,主要是与密码文件有关啦!包括安全等级设置为使用本机的密码验证,亦即是『 security = user 』
那个项目,而且加上了密码加密。至于 Samba 使用的密码档缺省就是 /etc/samba/smbpasswd 这个,
为了增加自己的记忆,干脆直接写到 smb.conf 当中即可。
至于那个『 name resolve order 』就有趣了!他说明的是『这部 Samba 主机针对 NetBIOS name 的解析方式』,
主要的解析方式有几种:
- lmhosts:直接以 lmhosts 这个文件的内容来对照;
- wins:利用一部可管理 Windows 网芳的主控电脑来纪录,本 Samba 主机向该部主机 (wins server) 要求 NetBIOS
名称解析结果;
- host:通过 /etc/hosts 或者是 NIS, DNS 等方式来处理 NetBIOS name 的结果;
- bcast:在区网中直接通过 NetBIOS 的广播功能处理,亦即是向所有 Samba 主机接口的同一网域主机发出名称解析的需求,
举例来说咱们的 Samba 主机为 192.168.1.254/24 ,则以 bcast 解析 NetBIOS name 时,我们的服务器会主动向
192.168.1.0/24 发送出解析封包的要求啊。
我们修改了默认值,让 Samba 仅通过 lmhosts, bcast 及 host 的方式进行主机名称的解析啊!
[homes] 部分
至于添加的目录方面,[homes] 是个比较特殊的分享名称,他代表 Linux 主机上头的用户家目录。
我们知道 [homes] 代表的是分享目录的资源名称,
但你总不希望使用 Samba 时找到的资源分享名称为 //127.0.0.1/homes 吧?
所以才会有『 valid users = %S 』这个设置值,那个 %S 代表拥有可登录 Samba 的所有用户,
且当他登录后,那个 [homes] 会变成 [帐号] ,
请至前一小节的
变量部分查找相关的说明。而且用户的家目录是除了用户本人外,
并不会开放给其他人浏览的喔 (browseable = no),
另外他的 umask 为
002,因为创建新档 (create mode) 缺省权限为
0664 ,而创建新目录 (directory mode) 则为 0775 之故。
[public] 部分
另一个添加的分享资源比较有趣,我们命名为 [public] ,指向的目录为 /home/public ,
有趣的地方在于使用的 valid users = @users 这个设置项目,
加上 @
之后的名称代表着群组之意,意思是说,在 Linux 主机上面可使用 Samba 的帐号中,只要该帐号支持 users 这个群组,
那么理论上他就能够进入 /home/public 目录进行访问的权限。
不过能否顺利的访问文件还与
Linux 最底层的文件权限有关。且任何人均可查阅到我们的主机有提供 [public] 这个分享资源 (public =
yes 之故)。
例题: 在上面的这个设置档当中有提到分享出 /home/public 这个目录,
请问这个目录的权限应该如何设置才是符合我们 Samba 案例的要求?
答:
在这个案例当中我们提到任何具有 users 群组的用户都能够完整的访问 /home/public ,
所以这个目录的群组应该属于 users ,且权限至少需为 770 才行。如果 /home/public 缺省不存在时,
应该要如此创建:
[root@linux ~]# mkdir /home/public
[root@linux ~]# chgrp users /home/public
[root@linux ~]# chmod 770 /home/public
|
这样当属于 users 群组的用户进入到此目录后,才能够进行读写的功能。
|
3. 设置可使用 Samba 的帐号与密码
设置用户帐号是很重要的一环,因为设置错误的话,当然也就任何人都没有办法登录的!
在这里我们必须先要说明一下 Linux 的文件系统与 SAMBA 设置的用户登录权限的相关性!
- 在 Linux 这个系统下,任何进程都需要取得 UID 与 GID (User ID 与 Group ID)
的身份之后,才能够拥有该身份的权限,也才能够适当的进行访问文件等动作!
- 关于 Linux 这个系统的 UID 与 GID 与帐号的相对关系,一般记录在 /etc/passwd 当中,当然也能通过 NIS,
ldap 等方式来取对应;
- SAMBA 仅只是 Linux 底下的一套软件,使用 SAMBA 来进行 Linux 文件系统时,还是需要以 Linux
系统下的 UID 与 GID 为准则!
如果上面这几点说明您没有问题了,现在就来看一下当我们在 Windows 电脑上面以网上邻居来连接
Linux 并且进行数据的访问时,会是怎样的一个情况呢?
我们需要通过 SAMBA 所提供的功能来进行 Linux 的访问,而 Linux
的访问是需要取得 Linux 系统上面的 UID 与 GID 的,因此,我们登录 SAMBA 主机时,所利用 SAMBA
取得的其实是 Linux 系统里面的相关帐号!这也就是说,在 SAMBA 上面的用户帐号,必须要是
Linux 帐号中的一个!
所以说,在不考虑 NIS 或 LDAP 等其他帐号的验证方式,单纯以 Linux 本机帐号 (/etc/passwd) 作为身份验证时,
在 Samba 主机所提供可登录的帐号名称,必须要存在于 /etc/passwd 当中!
这是一个很重要的概念!例如你要先有 dmtsai 在 /etc/passwd 当中后,才能将 dmtsai
加入 Samba 的用户当中。这都是很基本的帐号权限概念,如果您觉得这里阅读方面有问题,
若不考虑鸟哥的解释不良,表示你必须要回去读读基础篇了~ ^_^
好了,假设我的机器里面已经有 dmtsai, nikky, tang 等三人,不过我只想要让 dmtsai 及 nikky 使用 SAMBA 而已的话,
那么如何将这两个用户加入帐号密码管理文件 /etc/samba/smbpasswd 当中呢?很简单的啦!这样做即可:
1. 先确认密码档是否存在
[root@linux ~]# ls -l /etc/samba/smbpasswd
-rw------- 1 root root 104 Dec 25 23:13 /etc/samba/smbpasswd
# 注意啊!要这样的权限才可以喔!如果你的 Linux 没有这个文件,请自行创建。
2. smbpasswd 指令功能
[root@linux ~]# smbpasswd [-adem] username
参数说明:
: 如果都没有加上任何一个参数,例如『 smbpasswd dmtsai 』时,这表示:
修改 SAMBA 密码档 (/etc/samba/smbpasswd) 里面的 dmtsai 这个帐号的密码!
也就是说,密码档里面已经存在一个 dmtsai 的帐号了!
-a : 在 smbpasswd 密码档里面添加一个用户
-d : 让在 smbpasswd 密码档里面的某个帐号的用户暂时无法使用 SAMBA
当多了 -d 的参数时,在 smbpasswd 里面某个字段会多出一个 D 的参数,
代表该帐号目前无法使用喔!
-e : 与 -d 参数相反,让某个帐号恢复使用!
-m : 该 username 为机器代码 (Machine Account),这个与 domain model 有关!
2.1 开始添加用户吧!
[root@linux ~]# smbpasswd -a dmtsai
New SMB password: <==在这里输入密码!这个密码不一定要与 /etc/shadow 相同
Retype new SMB password: <==再输入一次
Added user dmtsai.
[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F755028491:
[U ]:LCT-4590969D:
# 上面的数据为同一行的数据喔!数据为加密过的!
2.2 如果要暂时拒绝一个用户的登录,可以这样做:
[root@linux ~]# smbpasswd -d dmtsai
[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F755028491:
[DU ]:LCT-4590969D:
# 就是这个 D !代表的就是暂时 disable 啰!
[root@linux ~]# smbpasswd -e dmtsai
|
接下来你可以通过相同的方式来添加 nikky 这个用户的 Samba 密码,那这两个人就能够使用 Samba 啰。
然后我们就能够开始准备来重新启动 Samba 并且测试看看啰!
4. 重新启动 Samba 并测试
在经过重新启动后,我们所进行的修订才会生效。然后使用 smbclient 来检查看看,是否不同身份会有不一样的浏览结果呢?
赶紧看看:
[root@linux ~]# testparm
# 这个动作很重要!每次都要进行!确认你的语法无误后再开始!
[root@linux ~]# /etc/init.d/smb restart
[root@linux ~]# smbclient -L //127.0.0.1
Password: <==直接按下 [Enter] 即可。
Anonymous login successful <==是匿名登录喔!
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
public Disk the user groups work directory
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
[root@linux ~]# smbclient -L //127.0.0.1 -U dmtsai
Password: <==输入 dmtsai 在 smbpasswd 文件中所创建的密码喔!
Domain=[VBIRDSERVER] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
public Disk the user groups work directory
temp Disk Temporary file space
IPC$ IPC IPC Service (This is vbird's samba server)
ADMIN$ IPC IPC Service (This is vbird's samba server)
dmtsai Disk Home directories
|
由上表我们可以发现,经由不同的身份登录可以取得不一样的浏览数据,
所以在使用上面需要特别留意喔!
5. 关于权限的再说明
有的时候你会发现,明明在 smb.conf 当中已经设置了 writable 可写入,用户登录的身份也没有问题,
为啥就是无法写入呢?是否是服务器设置哪里还有问题啊?非也非也!主要的问题常常是来自于 Linux 文件系统的权限啦!
举上面的例子来说好了,我们在 smb.conf 当中设置 [public] 为可写入,亦即 /home/public 是可写入的。
假设 dmtsai 属于 users 这个群组,因此以 dmtsai 登录 SAMBA 服务器后,对于 /home/public
应该是具有可以读写的能力的!但是,如果你以 root 的身份创建 /home/public 却又忘记修改权限的话,
此时 /home/public 是无法让 users 这个群组写入的,因此 dmtsai 这个用户当然不具有写入的能力。
这样说,了解鸟哥想要说啥了吗?注意注意喔! ^_^
上面的设置案例应该蛮足以提供一般家庭用的环境中进行设置了!如果您还要扩充分享的目录与能够登录的用户,
可以这样做:
- 利用编辑 smb.conf 来多开放其他的目录,并且特别注意 Linux 在该目录下的权限喔!请使用 chown 与 chmod 吧!
- 利用 smbpasswd 来添加其他用户到 /etc/samba/smbpasswd 里面去,如果该帐号并没有出现在
/etc/passwd 里面,请先以 useradd 添加该帐号;
- 不论进行完任何的设置,请先以 testparm 进行确认,之后以 /etc/init.d/smb restart 来重新启动!
事实上,SAMBA 的一般用途就是在这个连接的模式中!多使用 SAMBA 来分享您的资源吧!鸟哥都是使用 SAMBA
来做为远程服务器与我的工作机互通有无的重要媒介说~
刚刚上面的说明大部分都是针对磁盘与目录的分享来进行 SAMBA 的设置,那么 SAMBA
有没有可能分享出设备呢?举个例子来说,例如那个我们在办公室都会用到的打印机呢?如果说,能够让我们办公室的
File Server 同时提供打印机打印的功能,如此一来,借由 Linux 这个操作系统可以 24
小时开机的稳定功能,我们就可以随时进行打印啰!所以,底下我们就以 SAMBA
进行打印机打印功能的提供者的角度,来介绍这个 smb.conf 的设置喔!
在 Linux 底下进行打印的工具很多,不过我们这里要介绍的仅有目前较广为流行的 CUPS (Common Unix Printing System) 这一个。
详细的 CUPS 安装设置方法我们已经在
基础篇的 CUPS 章节当中提过,
所以这里我们不再详细说明,仅介绍大致的处理流程就是了。如果你需要较早期的 LPRng 打印系统的话,
建议可以参考底下的数据喔:
底下就来谈一谈一般常见的流程说明吧:
1 安装打印机与确定启动
再次说明,并不是所有的打印机都被 Linux 所支持的,所以当你想要链接一部打印机到 Linux 系统上头时,
请务必到
http://www.linuxprinting.org/printer_list.cgi 上头去看看是否有被支持喔!
如果没有被支持,那就换一部打印机吧!不要进行垂死的挣扎了....
如果你的打印机连接端口为使用 USB 或者是平行串口的话,那么当你连接上打印机后,
可以利用底下的方式测试看看是否成功的连接上了:
[root@linux ~]# echo "Hello printer" > /dev/lp0 <==平行串口
[root@linux ~]# echo "Hello printer" > /dev/usb/lp0 <==USB 端口
|
如果打印机有回应,这表示 OK 的啦!你可以进行底下的工作了。如果你的打印机为网络打印机呢?
就是说打印机有 IP 的情况下,那么该打印机就不需要加入 Samba 啦!因为该打印机本身就可以直接提供用户端连接,
根本不必通过 Samba 来提供网络连接的嘛!当然啦,如果你有特殊需求,
将网络打印机加入 Samba server 来提供给网芳中的其他用户,也是可以的啦!底下直接来看看如何使用 CUPS 吧。
2. 设置 CUPS 的打印机
请先确认你的 CUPS 已经安装妥当了,原则上,你必须要有底下两个套件存在才行:
接下来我们可以开始设置 CUPS 了!设置的原则是这样的:
- 我需要让 192.168.1.0/24 这个网域可以使用打印机
- 我需要让 192.168.1.0/24 及 127.0.0.0/8 可以管理 CUPS 系统
然后开始这样做:
[root@linux ~]# vi /etc/cups/cupsd.conf
# 底下这个项目在控制谁可以使用 CUPS 系统,约在 772 行左右,
# 找到这些数据并增加一笔记录:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>
# 底下的项目则在设置谁可以登录 CUPS 系统的管理接口?
# 约在 830 行左右,找到这些数据并进行一些细部修改:
<Location /admin>
#AuthType Basic
#AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>
# 在最后一行的地方加上这一句
Listen 0.0.0.0:631
# 上面在设置一个不需要密码即可登录的管理环境,是个很粗糙的接口,
# 建议您自行处理一下认证问题,请参考基础篇的说明。
|
另外,为了要进行 Windows 相关软件所传来的打印数据,所以我们还需要对 CUPS 作一些额外的设置,
过程也是很简单的:
[root@linux ~]# vi /etc/cups/mime.convs
# 大概在最后几行的地方,找到这一行,将注解拿掉!
application/octet-stream application/vnd.cups-raw 0 -
[root@linux ~]# vi /etc/cups/mime.types
# 同样也是在最后面几行的地方,也是将注解拿掉即可!
application/octet-stream
|
设置完毕后就可以开始来启动 cups 系统,可以这样做:
[root@linux ~]# /etc/init.d/cups start
[root@linux ~]# netstat -tunlp | grep '631'
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 18271/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 18271/cupsd
|
那个 631 的端口口就是 CUPS 所启动的啦!然后我们可以开始设置打印机了!
由于 CUPS 支持很多不同的打印机连接端口,每种连接端口都不一样,常见的有:
- USB 连接端口: usb:/dev/usb/lp0
- 平行串口: parallel:/dev/lp0
- 网络打印机: ipp://ip/打印机型号
- 网络芳邻打印机: smb://user:password@host/printer
假设我们的 Samba 上头接了一部 usb 连接的打印机,而我要将这部打印机取名为 hplaser2300 时,
你可以使用浏览器连接到 Samba 主机上头,必须注意到网址喔:

图三、CUPS 的管理接口示意图
如上图三所示,先在网址列的地方务必要输入端口口才行!然后按下箭头『 2 』所指的地方,
亦即是『Manage Printer』之后再按下『Add printer』的按钮,就会出现如下画面,
记得要填写正确的数据喔!

图四、CUPS 的管理接口示意图
然后如下图所示,选择正确的设备所在处!我们假设使用的是 USB 的打印机连接端口:

图五、CUPS 的管理接口示意图
之后就是选择正确的型号啰,假设这部打印机为 HP 所出产的:

图六、CUPS 的管理接口示意图
选择标准的激光打印机驱动程序吧!

图七、CUPS 的管理接口示意图
最后都成功后,就会找到如下所示的画面了。

图八、CUPS 的管理接口示意图
到此为止我们可以假设你的 CUPS 已经有一部打印机存在了,即使该打印机目前无法工作,
但是就是有一部打印机嘛!^_^!接下来看看如何将他链接到咱们的 Samba 服务器中吧!
3. 在 smb.conf 当中加入打印机的支持
然后开始告诉 Samba 将这部打印机给他分享出去吧!你需要这样处理:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
.....其他省略.....
# 这里列出的则是打印机相关的数据啊!
printcap name = cups
load printers = yes
printing = cups
[printers] <==这个分享的资源名称一定是 printers
comment = All Printers
printable = yes <==可以进行打印的功能
browsable = yes <==可以让其他人浏览
public = yes
valid users = @users dmtsai <==可使用的人员有这些
path = /var/spool/samba <==打印队列的地方,暂存数据
printer admin = dmtsai <==这是打印机管理员!需要可使用 SAMBA 者
.....其他省略.....
|
基本上通过这样的设置你的 Samba 就能够顺利的提供打印机的服务了!
不过可惜的是,
Windows 用户端依旧得要安装打印机的驱动程序才能够使用 Samba 所提供的打印机,
此时真是麻烦兼讨厌啊~有没有可能让 Samba 主动的提供驱动程序给用户,这样一来用户端就不需要额外去找驱动程序啰!
是可以的,通过 Samba 3.x 即可处理!
或许你会想,打印机的型号这么多,那么 Linux 该如何提供这些打印机的驱动程序啊?岂不麻烦?
还好啦,
CUPS 主要是通过利用 Postscript 的打印语言与打印机沟通的,因此用户端只要取得 postscript
的驱动程序他们就能够使用咱们的 Samba 服务器所提供的打印机了!如此一来,
不论打印机的型号为何,只要他们能够支持 Postscript 的打印格式,OK 搞定!而且 CUPS
官网本身就有提供 CUPS 的 Postscript 驱动程序啰!可以到底下的链接去下载:
由于 CentOS 4.x 使用的是 1.1.x 版本,所以鸟哥下载的是 cups-samba-5.0rc3.tar.gz 这个文件,
接下来我们要将这个文件解压缩,然后将相关的程序给他安装到正确的目录去。
不过您得要注意的是,除了这个驱动程序外,要支持 Windows 2000/xp 的用户端,
你还得到 Windows XP 的底下目录去下载几个文件:
C:\WINDOWS\system32\spool\drivers\w32x86\3
里面的 PS 开头的文件通通下载下来,应该有四个文件的,请将他拷贝成为小写的文件,并且放置到你 Samba 主机上的
/usr/share/cups/drivers/ 目录下,然后将 cups-samba-5.0rc3.tar.gz 解压缩后运行 ./cups-samba.install 文件,
就能够将驱动程序通通安装到 /usr/share/cups/drivers/ 目录下了!这就是基本的驱动程序说!
在鸟哥的这个目录底下至少含有这几个文件就是了:
[root@linux ~]# ll /usr/share/cups/drivers
-r--r--r-- 1 root root 14234 Sep 24 2002 cups5.hlp
-r--r--r-- 1 root root 280268 Jan 4 2004 cupsdrv5.dll
-r--r--r-- 1 root root 219540 Jan 4 2004 cupsui5.dll
-rw-r--r-- 1 root root 129024 Dec 27 14:18 ps5ui.dll
-rw-r--r-- 1 root root 455168 Dec 27 14:18 pscript5.dll
-rw-r--r-- 1 root root 27568 Dec 27 14:18 pscript.hlp
-rw-r--r-- 1 root root 792644 Dec 27 14:18 pscript.ntf
|
上述的文件鸟哥将他打包成为一个文件了,你可以在底下的链接下载:
不过您得注意,这个文件内的 Windows 数据是由 Windows XP 上面捉来的,所以对于 Windows 98/ME 是没有作用的。
您得自行上网查阅相关的数据下载方式喔。
接下来我们必须要在 smb.conf 里面增加一笔新的分享数据,这个分享数据必须是 [print$] 名称才行!
有点类似这样啦:
[root@linux ~]# vi /etc/samba/smb.conf
.....其他省略.....
[print$]
comment = Printer drivers
path = /etc/samba/drivers <==存放打印机驱动程序的目录
browseable = yes
read only = yes
write list = dmtsai <==这个驱动程序的管理员
.....其他省略.....
[root@linux ~]# mkdir /etc/samba/drivers
[root@linux ~]# chown dmtsai /etc/samba/drivers
# 因为我们将打印机管理员以及驱动程序管理员的身份设置为 dmtsai 这个用户,
# 因此存放的目录也要改变一下权限才行呐!
[root@linux ~]# testparm <==测试语法
[root@linux ~]# /etc/init.d/smb restart <==重新启动
[root@linux ~]# smbclient -L //127.0.0.1 -U dmtsai
Password: <==输入密码先
Domain=[VBIRDSERVER] OS=[Unix] Server=[Samba 3.0.10-1.4E.9]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer drivers
hplaser2300 Printer HP Laser Jet 2300 printer
# 瞧!有看到一部打印机以及驱动程序所在的分享数据啰!
|
现在我们的要告知 Samba 说,我们的 CUPS 可提供 Windows 2000/XP 用户端的驱动程序,
所以用户不需要自行设置他们的驱动程序哩!要由 cups 告知 Samba 是由 cupsaddsmb 这个指令来搞定的,
整个指令的运行很简单的:
[root@linux ~]# cupsaddsmb -H [SAMBA 主机名] -h [CUPS 主机名] \
> -a -v -U [用户帐号]
参数:
-H :后续接的是 Samba 主机名,本机的话可以直接用 localhost 即可;
-h :后续接的为 CUPS 的主机名,同样的可使用 localhost 即可;
-a :搜索所有可用的打印机;
-v :列出更多的信息;
-U :打印机管理员
范例:利用前面的说明将打印机驱动程序挂上 SAMBA
[root@linux ~]# cupsaddsmb -H localhost -U dmtsai -a -v
Password for dmtsai required to access localhost via SAMBA: <==输入 dmtsai 密码
# 这里会闪过很多的消息,说明已经安装了某些信息,底下鸟哥仅列出简单的消息而已。
putting file /usr/share/cups/drivers/pscript5.dll as
\W32X86/pscript5.dll (1438.5 kb/s) (average 1342.5 kb/s)
Printer Driver hplaser2300 successfully installed.
Succesfully set hplaser2300 to driver hplaser2300.
[root@linux ~]# ll /etc/samba/drivers
drwxr-xr-x 3 dmtsai dmtsai 4096 Dec 27 14:40 W32X86
|
最后在驱动程序的存放目录会多出一个 W32X86 的目录,你可以查找一下该目录的内容,
那就是预计要给用户端使用的驱动程序啦!这样就搞定了!不过,为了将所有的数据通通驱动,
建议您将 CUPS 及 SAMBA 通通重新启动吧!
[root@linux ~]# /etc/init.d/cups restart
[root@linux ~]# /etc/init.d/smb restart
|
4. 一些问题的克服:
如果一切顺利的话,你在 Windows 用户端应该可以顺利的连接到打印机啰!
开心吧!不过,如果你曾经印错数据,那么该如何进入 Linux 的 Samba 主机将该数据移除呢?
你最好知道底下的几个指令,关于这些指令的高端用法则请自行给他 man man 看了:
[root@linux ~]# lpstat -a
hplaser2300 accepting requests since Jan 01 00:00
# 列出所有可用的打印机状态
[root@linux ~]# lpq
hplaser2300 is ready
no entries
# 列出打印机的工作,若有打印工作存在时,会如下所示:
hplaser2300 is ready and printing
Rank Owner Job File(s) Total Size
active dmtsai 5 smbprn.00000003 测试页 42954752 bytes
[root@linux ~]# lprm all
# 移除所有等待中的打印工作!
|
打印工作就是这样进行的啦!赶紧试看看吧!
使用 SAMBA 其实是有一定程度的危险性的,这是因为很多网络攻击的蠕虫就是通过 NetBIOS 来攻击的!
因此,在架设好了 SAMBA 之后,请记得将权限方面的工作做好!权限方面的工作除了 smb.conf 内的设置外,
Linux 文件系统的 r, w, x 权限也是相当重要的喔!我们底下就简单的介绍一下一些基本的安全性管理吧!
利用 iptables 来管理
最简单的管理登录 SAMBA 的方法就是通过 iptables 啦!详细的说明我们已经在
防火墙章节当中提过了,所以这里不在详加说明。
要知道的是,如果你仅要针对底下的范围开放 Samba 时,可以这样想:
- 仅针对 192.168.1.0/24 这个网域开放 SAMBA;
- SAMBA 的 port 有 137~139 tcp/udp;
- SAMBA 主机的网络卡为 eth0
所以 iptables.rule 规则当中应该要加入这几项:
iptables -A INPUT -p tcp -i eth0 -s 192.168.1.0/24 --dport 139 -j ACCEPT
iptables -A INPUT -p udp -i eth0 -s 192.168.1.0/24 --dport 137:138 -j ACCEPT
|
当然啦!这是很简单很简单的防火墙规则,您必须要依据您的环境自行修改 (通常修改那个 192.168.1.0/24 网段即可!)
。除了 iptables 必须要开放之外,您还需要将管制 daemon 是否能够进出的 TCP Wrappers 开放才行呐!如果万一您看到
/etc/hosts.deny 里面多了这一行:
[root@linux ~]# cat /etc/hosts.deny
ALL : ALL
|
不要怀疑,很可能会造成不只 SAMBA 不能动作而已~连其他的 daemon 都可能会无法动作呢!所以,请将这一行拿掉吧!
或者是将适合的 daemon 开放在 /etc/hosts.allow 文件里面喔!
smb.conf 的设置值
事实上 Samba 已经有许多防火墙机制啦!那就是 hosts allow 及 hosts deny 这两个参数。
通常我们只要使用 hosts allow 即可,那么没有写入这个设置项目的其他来源就会被拒绝连接的!
举例来说,如果你只想要让本机、192.168.1.11, 192.168.1.21 使用 SAMBA 而已,那么可以这样写:
[root@linux ~]# vi /etc/samba/smb.conf
[global]
# 跟安全有关
hosts allow = 127. 192.168.1.11 192.168.1.21
smb ports = 139
|
如此一来不但只有数部主机可以登录我们的 SAMBA 服务器,而且 Samba 只能以标准的 port 139 来链接,
关闭 Windows 常用且有点问题的 port 445 呢!这样会比较好一些啦!
未来如果还有人想要链接你的 Samba 时,将他加入 hosts allow 后面即可!
不难吧! ^_^
利用 Quota 限制用户空间使用
quota 是磁盘配额限制的一个 daemon ,您可以依据不同的用户来加以限制他们能够使用的硬盘空间,
前提是『
该磁盘空间必须是一个独立的 partition 』才行,不建议针对根目录
『 / 』进行 quota !这也是为什么我们在主机规划时特别建议大家独立出一个 partition
来进行硬盘规划的原因!关于 quota 的详细用法在『
鸟哥的 Linux 私房菜--基础学习篇』里面已经谈得很清楚了,
这里我们不再详谈!只给大家来做个练习就是了!
例题: 在规划主机的时候,我将 /dev/hda2 独立一个 partition 给 /home 这个目录,现在想要规划
quota 针对 dmtsai 这个用户进行磁盘配额的限制,他的 hardlimit 为 50mb 而 softlimit 为 40mb ,请问整个动作应该如何进行?
答:
- 编辑修改 /etc/fstab ,使得 /dev/hda2 这个 partition 成为如下模样:
/dev/hda2 /home ext3 defaults,usrquota,grpquota 1 1
修改完毕之后,请千万记得使用 mount -a 查找看看有没有设置错误 (上面总共只有六个字段喔!),
这个动作如果发生错误,那么请记得再次的进行 /etc/fstab 的修改!请特别留意啊!因为写错的话,
很容易造成无法正常开机的窘境!
- 上述动作确定没有问题之后,请重新开机启动 quota 的支持:
sync; sync; sync; reboot
- 运行底下的指令,创建 quota 所需要的设置文件:
quotacheck -avug
特别注意,如果上述的动作发生『找不到设置档』的意思的消息时,您可以这样做:
touch /home/aquota.user; touch /home/aquota.group
然后再进行一次 quotacheck 即可!
- 启动 quota 啰:
quotaon -av
- 设置 bird 的磁盘配额:
edquota -u dmtsai
Disk quotas for user dmtsai (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hdb2 32 40000 50000 8 0 0 因为我们只针对硬盘空间,不针对 inode
做限制,所以只要前面的数字修订即可!请注意,数字的单位为 kbytes !
|
关于备份
跟 SAMBA 最有关的当然就是用户的信息啰!所以,您应该要备份的就是用户的数据,以及
Samba 相关的设置数据了!比较相关的有几个咚咚:
- /etc (因为含有 /etc/passwd 以及 /etc/samba 里面的数据,所以建议可以全部给他备份下来 )
- /home (还是可以察看一下,是否有其他非必要的!不过,一般来说,都会是备份的个人数据比较多啦!)
- 其他由 smb.conf 里面设置开放的目录。
无论如何,备份还是挺重要的!
现在您知道 Samba 服务器的功能是用来作为文件服务器的,每个用户都可以拥有家目录,
并通过网芳的功能来链接到 Samba 服务器中。这就有个问题啦,那就是你的用户如果太多,
并且将他们的重要数据都放到这部 Samba 主机上头的话,那肯定 /home 未来会有点不足啊!
所以 /home 所在的磁盘或许可以使用大一点的硬盘,或者使用磁盘数组,使用
LVM 也是个不错的方案。
底下为简单的思考方向:
- 在安装 Linux 的时候,建议不需要安装 X Window ;
- 在规划 Linux 时,/home 最好独立出一个 partition ,而且硬盘空间最好能够大一些;
- /home 独立出来的 partition 可以单独进行 quota 的作业,以规范每个用户能够使用的最大硬盘容量;
- 由于 SAMBA 可以做为打印机服务器,所以建议打印机可以直接连接在 Linux 主机的打印端口 (LPT1, USB...);
- 由于 SAMBA 一般来说都仅针对内部 (LAN) 主机进行开放,所以,可能的话 SAMBA 主机直接使用内部保留 IP
来设置即可,当然啦, SAMBA 是否使用 private IP 还得视您的整个网域的 IP 网段的特性来规划。
以鸟哥研究室来说,因为实验室所有电脑的 IP 都是 Public IP,那么 SAMBA 如果使用
Private IP ,当然大家都无法连接上啊! ^_^
- 如果您的 SAMBA 主机使用 Public IP 时,请特别留意规范好防火墙的设置,尽量仅让 LAN
内的电脑可以连接进来即可,不要对 Internet 开放喔!
另外,如果你的 Samba 服务器需要挂载含有中文的 partition 时,譬如说你将原本 Windows XP 的 FAT32 文件系统挪到
Linux 系统下,此时如果用一般模式来挂载该分区时,一些中文文件名可能会无法被顺利的打印出来。
这个时候你就得需要这样做了:
mount -t vfat -o iocharset=big5,codepage=950 /dev/hd[a-d][1-16] /mount/point
|
其中 iocharset 指的是本机的语系编码方式, codepage 则与远程软件有关。因为我们是在本机进行挂载,
所以实际上使用 iocharset 这个参数即可啦!更多说明则请看下节的用户端设置部分啰!