如果想要共享档案,在Linux对Linux的环境下透过NFS这个东东,而在Windows对Windows的环境下则是用【网络上的芳邻】,如果使用Windows与Linux,而且要实现共享文件

系统的话,那就使用Samba服务器,Samba可以让Linux加入Windows的网芳支持,让异质平台可以共享文件系统,不仅如此,Samba也可以让Linux上面的打印机成为服务器

总之,Samba对于整个区网的贡献很大。在早期的网络世界当中,档案数据的传输大多使用FTP这个服务器进行传送,但是FTP无法让你直接在主机上面修改档案数据的,也就是

说更改Linux主机上面的档案,需要下载后才能进行修改,也因此该档案的在服务器与客户端都会存在,这个时候,万一哪天你修改了某个档案,却忘记将数据上传回主机,那么

经过一阵子,你就不知道这个档案是否是最新的了。

让档案在两部主机之间直接修改: NFS 与 CIFS

NFS这个文件系统可以让你将Server提供分享的目录挂载进来,那么在客户端的机器上面就可以直接取用Server上的档案资料了,该数据就像是我客户端上面的partation一般。

而除了可以让 Unix Like 的机器互相分享档案的 NFS 服务器之外,在微软操作系统上面也有类似的文件系统,那就是CIFS这个东东,CIFS最简单的想法就是目前常见的网络上

的芳邻,Windows系统的计算机可以透过桌面上【网络上的芳邻】来分享别人所提供的档案数据,不过NFS仅适合LInux机器沟通,而CIFS只能让Windows机器沟通,此时想要

让不同的平台相互分享档案数据的时,就要用到SAMBA了。SAMBA可以进行哪些动作?

1 分享档案与打印机服务

2 可以提供用户登入SAMBA主机时的身份认证,以提供不同身份者的个别数据

3 可以进行Windows网络上的主机名解析(NetBIOS name)

4 可以进行装置的分享(例如Zip CDROM)

利用软件直接编修 WWW 主机上面的网页数据

很多人利用个人计算机将网页制作完毕之后,再以类似FTP之类的服务将网页上传到WWW主机上,这样的困扰就是同时在客户端与WWW主机上面都有一份网页数据

常常忘记哪一份是最新的,如果有安装SAMBA服务器的设定的话,那么透过【网芳】的功能,直接联机远程服务器所提供的目录,如此一来就可以在个人计算机上面修改

服务器的档案数据,只需要一份正确的数据即可,有点像在线编修。

做成可直接联机的文件服务器

SAMBA可以将硬盘空间分享出来,由于使用者要登入SAMBA这个服务器主机时需要输入用户(账号与密码),而不同的登入者会取得不一样的目录资源,所以可以避免自己的数据

在公用计算机上面被偷窥,此外,在不同的公用计算机上面都可以登入SAMBA主机,数据的使用上面真的很方便

打印机服务器

SAMBA 除了分享文件系统外,也可以分享打印机,直接以Linux分享的打印机来印刷报告

SAMBA 的应用挺广泛的,尤其对于局域网络内的计算机来说,更是一项不可多得的好用的服务器,SAMBA的功能其实就是模仿Windows的网芳以及AD相关的软件,但是

Windows XP对于网芳的联机限制依据版本而有所不同,以企业常见的专业版,他仅能提供最多同时十个联机到网芳的联机能力,而SAMBA没有限制联机数,并且稳定,可靠

SAMBA 使用的 NetBIOS 通讯协议

事实上,就像NFS是架设在RPC Server上面一样,SAMBA这个文件系统是架构在NetBIOS这个通讯协议上面所开发出来的,NetBIOS其实早期的目的仅是让局域网络内少数

计算机进行网络链接的一个通讯协议而已,所以考虑的不是针对大型网络,因此,NetBIOS是无法跨路由的(Router / Gateway)。这个NetBIOS在局域网络内实在很好用,所以

微软的网络架构就使用了这个东东进行沟通的,而SAMBA最早发展的时候,其实是想要让Linux系统可以加入Windows的系统当中来分享使用彼此的档案数据的,所以SAMBA

就架构在NetBIOS发展出来的,不过 NetBIOS 是无法跨路由的,因此使用 NetBIOS 发展起来的服务器理论上也是无法跨越路由的,不过好在还有所谓的NetBIOS over TCP/IP

的技术,这个技术是指:目前网络连接的基本协议是TCP/IP,而NetBIOS只能在局域网中,如果想要联机到远方的朋友,就需要透过邮件系统(例如邮局啦、国际快递啦等等的) 来

传送了!这个TCP/IP就可以视为邮件传递系统,透过这个NetBIOS over TCP/IP的技术,我们就可以跨路由的使用SAMBA服务器所提供的功能,不过目前SAMBA还是比较广泛

的使用在LAN里面。Windows 网络设定里面常常看到 NetBEUI 这个咚咚,也是 IBM 在 NetBIOS 发展出来之后的改良版本。

SAMBA 使用的 daemons

NetBIOS当初发展时就是着眼于在局域网络内的快速数据交流,而因为是定义在局域网络内,因此他并没有使用类似TCP/IP之类的传输协议,也就不需要IP的设定,如此一来

数据如果在两部主机之间交流?其实主机在NetBIOS协议当中的定义为使用『NetBIOS Name』,每一部主机必须要有不同的NetBIOS Name才行,而档案数据就是在不同的

NetBIOS name之间沟通,我们以一个网芳的设定来做简单的说明:

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 之后,主机系统就会启动 137, 138 这两个 UDP 及 139 这一个 TCP 埠

口,这也不要忘记,因为后面设定防火墙的时候,还会使用到这三个 port 的。

联机模式的介绍 (peer/peer, domain model)

SAMBA服务器可以依照不同的网域联机方式,与不同的用户账号密码的控管方式来进行分类,例如常见的Workgroup及Domain两种方式的联机模式:

这两种最常见的局域网络的联机模式:peer/peer (对等模式) 及 domain model (主控模式)

peer/peer (Workgroup model, 对等模式):

peer/peer 当然就是指两部主机的地位相等,例如局域网络中的所有PC都可以在自己的计算机上面管理自己的账号和密码,同时每部计算机都具有独立执行各项软件的能力

只是藉由网络将各个PC链接在一起而已的一个架构,所以每部机器都是可以独立运作的,在这样的架构底下,要如何透过网络联机来取得对方的数据?首先必须要知道对方

使用的密码,并且对方要启用Windows的资源共享之后,才能够去进行联机,反过来对方想要取得我的数据,也要取得我的账号和密码,因此对方主机和我的主机地位是相同的

这就是peer/peer 的架构,这种架构的好处是每部计算机可以独立运行,不受他人的影响,缺点就是当整个网域内的所有人员都要进行数据分享时,光是要知道所有计算机里面

的账号和密码,就很伤脑经了,Peer/Peer 的架构是比较适合 (1)小型的网域,或者是 (2)没有需要常常进行档案数据分享的网络环境,或者是 (3)每个使用者都独自拥有该计算机

的拥有权(就是说,该计算机是用户的,而不是公用的啦!),而如果该单位的所有PC都是公有的,例如学校的计算机教室环境,而且你需要统一控管整个网域里面的账号与密码

的话,那就使用底下的domain models 了!

domain model (主控模式)

假如有十部计算机,但是有20个员工轮流使用,如果使用peer/peer的架构时,每部计算机要输入这20个员工的账号与密码来提供他们登入,而且,如果想要变更密码的话就需要

到10台计算机上面进行密码变更的作业,使用 peer/peer 架构就不是一个好方法了!这个时候就需要藉由 domain model 来达成你的需求啦,既然使用计算机资源需要账号密码

那么我将所有的账号和密码都放置在一部主控计算机上面,而网域内,任何人想要使用任何计算机时,都需要在屏幕前输入账号与密码,然后通通藉由PDC服务器的辨识后,才

给予适当的权限,也就是说,不同的身份还具有不一样的计算机资源权限就是了,PDC 服务器控管整个网域里面的各个机器的账号与密码的信息,例如有一个账号名称为vbird

且密码为12345时,他不论使用哪一部计算机只要在屏幕前输入vbird与密码后,该机器会先到PDC上面查验是否有vbird以及vbird的密码,并且PDC主机会给予vbird这个用户相关

的计算机资源权限,当vbird在任何一部主机上面登入成功后,他就可以使用相关的计算机资源了,这样的架构比较适合人来人往的企业架构,当系统管理员要控管新进人员的计

算机资源使用权时,可以直接针对 PDC 来修改就好了,不需要每一部主机都去修修改改,这两种模式要依照环境来选择联机的模式,当然SAMBA可以达到上述两种模式的。

SAMBA 服务器的基础设定

SAMBA软件几乎在所有Linux上面都有提供,当你需要联机到远程的Windows网芳,那时就需要得到SAMBA提供的客户端软件功能,因此只要直接安装系统上面提供的SAMBA

版本即可,先介绍SAMBA服务器,再介绍客户端功能。

Samba 所需软件及其软件结构

1.samba: 这个软件主要提供了 SMB 服务器所需的各项服务程序 (smbd 及 nmbd)、 的文件档、以及其他与 SAMBA 相关的 logrotate 配置文件及开机默认选项档案等;

2.samba-client: 这个软件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 文件格式的 mount.cifs、 取得类似网芳相关树形图的 smbtree 等;

3.samba-common: 这个软件提供的则是服务器与客户端都会使用到的数据,包括 SAMBA 的主要配置文件 (smb.conf)、语法检验指令 (testparm) 等等;

安装好之后,与他相关的配置文件有这些:

/etc/samba/smb.conf: 这是 Samba 的主要配置文件,基本上,咱们的 Samba 就仅有这个配置文件而已,且这个配置文件本身就有很详细的说明文件了,主要的设定分为

服务器的相关设定,如工作组,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 的所有相关的技术手册

至于常用的脚本文件案方面,若分为服务器与客户端功能,则主要有底下这几个数据:

/usr/sbin/{smbd,nmbd}:服务器功能,就是最重要的权限管理 (smbd) 以及 NetBIOS name 查询 (nmbd) 两个重要的服务程序;

/usr/bin/{tdbdump,tdbtool}:服务器功能,在 Samba 3.0 以后的版本中,用户的账号与密码参数已经转为使用数据库了,Samba使用的数据库名称为TDB,数据库的控制指令

tdbdump可以查看数据库的内容,tdbtool可以进入数据库操作接口直接手动修改账号和密码参数,不过,你先要安装tdb-tools 这个软件才行;

/usr/bin/smbstatus:服务器功能,可以列出目前 Samba 的联机状况, 包括每一条 Samba 联机的 PID, 分享的资源,使用的用户来源等等,让你轻松管理 Samba 啦;

/usr/bin/{smbpasswd,pdbedit}:服务器功能,在管理 Samba 的用户账号密码时, 早期是使用 smbpasswd 这个指令,不过因为后来使用 TDB 数据库了,因此建议使用新的

pdbedit 指令来管理用户数据;

/usr/bin/testparm:服务器功能,这个指令主要在检验配置文件 smb.conf 的语法正确与否,当你编辑过 smb.conf 时,请务必使用这个指令来检查

/sbin/mount.cifs:客户端功能,在Windows上面可以设定【网络驱动器机】来连接到自己的主机上面,在Linux上面,需要透过mount.cifs来将远程主机分享的档案与目录挂载到

自己的Linux主机上面

/usr/bin/smbclient:客户端功能,你的 Linux 主机想要藉由『网络上的芳邻』的功能来查看别台计算机分享出来的目录与装置,使用 smbclient查看,也可以使用在SAMBA主机上

/usr/bin/nmblookup:客户端功能,有点类似 nslookup 啦!重点在查出 NetBIOS name 就是了。

/usr/bin/smbtree:客户端功能,这玩意就有点像 Windows 系统的网络上的芳邻显示的结果,可以显示类似【靠近我的计算机】之类的数据,能够查到工作组与计算机名称的

树状目录分布图。

基础的网芳分享流程与 smb.conf 的常用设定项目

既然SAMBA要加入Windows的网芳服务当中,所以他的设定方式应该要与网芳差不多才行,目前的Windows XP的SP2(服务包第二版) 之后加入了很多的预设防火墙机制, 因此

使用网芳的预设限制常常会是这样的:

服务器与客户端之间必须要在同一个网域当中(否则需要修改 Windows 预设防火墙);

最好设定为同一工作组

主机的名称不可以相同(NetBIOS name);

专业版的Windows XP最多仅能提供同时10个用户联机到同一台网芳服务器上

工作组与主机名的设定,你可以在『我的计算机』右键单击,选择内容后去修订相关的设定值,设定好之后,分享的步骤是:

1. 叫出档案总管,,然后在要分享的目录、磁盘或装置 (如打印机) 上面按下右键,选择『共享』,然后就能够设定好分享的数据了

2. 最好建立一组给用户的使用的账号与密码,让其他主机的用户可以透过该账号密码联机进入使用网芳分享的资源。

假设你打开 Windows XP 的档案总管,在 D:\VBird\Data 这个目录下,按下右键选『共享与安全性』,然后勾选:【在网络上共享这个文件夹】,最后输入共享的名称

【VBGame】,假设你的IP是10.0.0.5,此时你的用户看得的网址列是:『 \\192.168.100.20\VBGame 』 ,『 \\IP\分享资源名称』,分享资源名称为 VBGame

依据上述的限制以及流程你可以这样想象:

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类似的

1. 在 smb.conf 当中,井字号与分号 (# 跟 ;) 都是批注符号;

2. 在这个配置文件中,大小写是没关系的!因为 Windows 没分大小写!

smb.conf 的服务器整体参数: [global] 项目,在smb.conf这个配置文件当中的设定项目有点像底下这样:# 会有很多加上 # 或 ; 的批注说明,你可以自行加上提醒自己相关设定

[global]

参数项目 = 设定内容

[分享资源名称]

参数项目 = 设定内容

在【global】当中的就是一些服务器的整体参数了,包括工作组,主机的NetBIOS名称,字符编码的显示,登录文件的设定,是否使用密码以及使用密码验证的机制等等,

至于【分享资源名称】则是针对你开放的目录来进行权限方面的设定,包括谁可以浏览该目录,是否可以读写等等参数,在【global】部分关于主机名信息方面的参数主要有:

workgroup = 工作组的名称:注意,主机群要相同;netbios name = 主机的 NetBIOS 名称啊,每部主机均不同;server string = 主机的简易说明,这个随便写即可。另外语系

方面的设定有SAMBA服务器显示的语系,Windows客户端显示的语系,Windows客户端连上SAMBA的软件都要符合设定才行,在新版3.x上面有数个提供这些语系转换的设定

1.display charset = 自己服务器上面的显示编码,例如你在终端机时所查阅的编码信息。一般来说,与底下的 unix charset 会相同

2. unix charset = 在Linux服务器上面使用的编码,一般来说就是i18n的编码,必须要参考/etc/sysconfig/i18n 内的『默认』编码。

3. dos charset  = 就是Windows客户端的编码,一般来说我们的繁体中文Windows使用的是big5编码,这个编码在SAMBA内的格式被称为『 cp950 』

关于语系编码 http://phorum.vbird.org/viewtopic.php?t=22001

例如,SAMBA使用的语系/etc/sysconfig/i18n 显示的是『 LANG="zh_TW.big5" 』,预计要分享的目标Windows系统是XP,那么你的语系数据应该这样设定:

由于 Linux, Windows XP 都使用 big5 编码,因此设定值应该是:unix charset   display charset   dos charset 三个设定值都是cp950

除此之外,还有登录文件方面的信息,包括这些参数:

log file = 登录档放置的档案,文件名可能会使用变量处理;

max log size = 登录档最大仅能到多少 Kbytes ,若大于该数字,则会被 rotate 掉。

还有就是网芳开放分享时,安全性程度有关的密码参数:包括如下:security = share, user, domain:三选一,这三个设定值分别代表:第一个表示不需要密码,第二个是

使用SAMBA服务器本身的密码数据库,密码数据库与底下passdb backend 有关;第三个表示使用外部服务器的密码,亦即SAMBA是客户端之意,如果设定这个项目,还得要

提供『password server = IP』的设定值才行;

encrypt passwords = Yes 代表密码要加密,注意那个 passwords 要有 s 才对!

passdb backend = 数据库格式,为了加快速度,目前密码文件已经转为使用数据库了,默认的数据库格式为tdbsam,而预设的档案则放置到/var/lib/samba/private/passwd.tdb。

事实上 Samba 的密码方面设定值很多,包括可以利用samba来设定/etc/passwd里头的人物的密码,不过这个时候需要unix password sync 』以及『 passwd program 』这两个

参数值的帮忙了

分享资源的相关参数设定 [分享的名称]

【分享名称】:这个分享名称就是一个【代号】而已,

comment :只是这个目录的说明而已

path: 这个分享名称实际会进入的Linux文件系统(目录)。也就是说,在网芳当中看到的是【分享】的名称,而实际操作的文件系统则是在path里头设定的

browseable:是否让所有的用户看到这个项目?

writable:是否可以写入?需要注意当writable与read only同时设定为yes,则以最后出现的那个设定值为主要的设定

create mode 与 directory mode 都是与权限有关的的

writelist = 用户,@群组,这个项目可以指定能够进入到此资源的特定使用者,如果是@group的格式,则加入该群组的使用者均可取得使用的权限

因为分享的资源主要与 Linux 系统的档案权限有关,因此里头的设定参数多与权限有关。

smb.conf 内的可用变量功能,为了简化设定值,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:代表目前的日期与时间,之前提到的不需密码的分享 (security = share, 纯测试)比较危险,尽量不要这样设定

案例【假设条件】

在底下的案例中,服务器 (192.168.100.254) 预计设定的参数状况为:LAN内所有的网芳主机工作组为vbirdhouse,这部SAMBA服务器的NetBIOS名称为vbirdserver

使用者认证为share,取消原本有放行的【home】目录,仅分享/tmp这个目录而已,且取名为temp,Linux服务器的编码格式假设为utf8,客户端为中文windows,客户端软件也使

用big5的编码,netbios name 几乎可以不用设定了,因为现在我们都用 IP 进行网芳联机,不一定会使用主机名,鸟哥取消了 lmhosts 的设定值

1. 设定 smb.conf 配置文件,语系设定查看i18n是否为utf8,我们这个分享的目录时/tmp,而且假设这个分享出来的目录时可擦写的,另外这里没有设置分享打印机,可以使用

【#】或【;】去批注掉。cd /etc/samba,先备份cp smb.conf smb.conf.raw,编辑vim 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/log.%m(客户端的NetBIOS名称),max log size = 50

与密码有关的设定项目       security = share

修改一下打印机的加载方式,不要加载    load printers = no

接着是分享的资源设定方面,主要是将旧的批注,新的加入,先取消 [homes], [printers] 的项目,然后针对 /tmp 的设定,可浏览且可写入

[temp]  分享资源名称, comment = Temporary file space <==简单的解释此资源, path = /tmp <==实际 Linux 分享的目录, writable = yes <==是否可写入?在此例为是的

browseable = yes <==能不能被浏览到资源名称,  guest ok = yes <==单纯分享时,让用户随意登入的设定值,这个文件中有很多默认值,尽量保留默认值,使用man smb.conf

去查询该默认值的意义,上述的设定完全控制使用者的认证层级的

2. 用 testparm 查阅 smb.conf 的语法设定正确性,在启动之前,使用testparm检验一些文件的语法是否正确,命令加上 -v 表示查阅完整的参数设定,连同默认值也会显示出来

3. 服务器端的服务启动与埠口观察  /etc/init.d/smb start    /etc/init.d/nmb start  <==这一版开始要启动两个daemon    chkconfig smb on    chkconfig nmb on  netstat -tlunp | grep

mbd 查看是否启动成功,SAMBA当中预设会启动多个端口,包括TCP139和445,以及进行NetBIOS名称解析之类的UDP 137,138, 所以会看到很多数据的,

4. 假设自我为客户端的检验 (默认用 lo 接口) ,我们可以透过smbclient这支程序来检验设定是否正确,基本查询语法:

smbclient -L [//主机或IP] [-U 使用者账号],选项和参数,-L 仅查阅后面接的主机所提供分享的目录资源,-U 以后面接的这个账号来取得该主机的可使用资源,由于这里规范用户

的安全等级为【share】,所以不必使用-U这个选项,执行看看smbclient -L //127.0.0.1,因为不需要密码,直接在输密码的位置按下ENTER回车就可以了,从结果中看出

分享的目录资源(Sharename)就是smb.conf当中设定的【temp】名称,因此在这里任何人都可以进入//127.0.0.1/temp 这个目录当中, 而这个目录在 Linux 系统其实是 /tmp 目录

至于那个 IPC$ 则是为了要应付 Windows 环境所必须要存在的项目就是了,那如何使用这个资源,客户端利用mount这个命令就可以了

mount -t cifs //127.0.0.1/temp /mnt   因为没有密码,所以这里还是按 Enter 即可,df可以看到结果,cd /mnt后执行ll就可以知道有没有权限的问题,touch zzz会看到创建后的文件

拥有人和拥有组都被压缩成为nobody了,不在是root了,最后cd ; umount /mnt进行卸除吧。

接下来,让我们以简易的需要密码才能够登入 Samba 的方式来设计一个范例,(security = user),不设定密码的分享会使你的机密文件在网芳当中被大家查阅,这样会被别人

随意浏览了,这样的话我们可以透过SAMBA服务器提供的认证方式来进行用户权限的给予,也就是你在客户端联机到服务器时,必须要输入账号和密码后,才能够登入SAMBA

查阅到你自己的数据,SAMBA本身就提供一个小程序来帮助我们处理密码的建立了,比较重要的是SAMBA使用者账号必须要存在于Linux系统当中/etc/passwd,但是SAMBA

的密码与Unix的密码档案不相同,(这是因为 Linux 与网芳的密码验证方式及编码格式不同所致)

假设条件

由于使用者层级会改变成 user 的阶段,因此 [temp] 已经没有必要存在,请先批注掉,而服务器方面的整体数据则请保留,包括工作组等等的数据,并新增底下的资料:

使用者认证层级设定 (security) 为: user,用户密码档案使用 TDB 数据库格式,默认档案在 /var/lib/samba/private/ 内;密码必须要加密;每个可使用 samba 的使用者均拥有自

己的家目录;设定三个用户,名称为 smb1, smb2, smb3 ,且均加入 users 为次要群组。此三个用户 Linux 密码为 1234, Samba 密码则为 4321;分享 /home/project 这个目

录,且资源名称取名为: project;加入 users 这个群组的使用者可以使用 //IP/project 资源,且在该目录下 users 这个群组的使用者具有写入的权限。

vim /etc/samba/smb.conf  # 与密码有关的设定项目,包括密码档案所在格式喔!

security = user <==这行就是重点啦!改成 user 层级

passdb backend = tdbsam <==使用的是 TDB 数据库格式!密码文件会放置于 /var/lib/samba/private/ 内。此外,默认密码就是加密的,因此不需要额外使用其他设定参数来规范

# 2. 分享的资源设定方面:删除 temp 加入 homes 与 project

[homes] <==分享的资源名称  comment = Home Directories,browseable = no <==除了使用者自己外,不可被其他人浏览,writable = yes <==挂载后可擦写此分享

create mode = 0664 <==建立档案的权限为 664,directory mode = 0775 <==建立目录的权限为 775

[project] <==就是那三位使用者的共享资源,comment = smbuser's project,path = /home/project <==实际的 Linux 上面的目录位置,browseable = yes <==可被其他人所浏览到

资源名称(非内容),writable = yes <==可以被写入,write list = @users <==写入者有哪些人的意思,不过能否顺利的存取档案还与 Linux 最底层的档案权限有关。,修改完之后

使用testparm查看是否正确

我们预计要分享 /home/project 目录,这个目录的权限设定为要开放给users群组,而共享群组的权限为『 2770 』这个含有 SGID 的特殊旗标功能

mkdir /home/project, chgrp users /home/project,  chmod 2770 /home/project, ll -d /home/project,结果drwxrws---. 2 root users 4096 Jul 29 13:17 /home/project

设定可使用 Samba 的用户账号与密码

我们需要透过 SAMBA 所提供的功能来进行 Linux 的存取,而 Linux 的存取是需要取得 Linux 系统上面的 UID 与 GID 的,因此,我们登入 SAMBA 服务器时,所利用 SAMBA 取得

的其实是 Linux 系统里面的相关账号!这也就是说,在 SAMBA 上面的使用者账号,必须要是 Linux 账号中的一个!在不考虑 NIS 或 LDAP 等其他账号的验证方式,,单纯以

Linux 本机账号 (/etc/passwd) 作为身份验证时,在SAMBA服务器所提供可登入的账号名称,必须要存在于/etc/passwd 当中! 这是一个很重要的概念,例如你要先有 dmtsai 在

/etc/passwd 当中后,才能将 dmtsai 加入 Samba 的使用者当中。新增 smb1, smb2, smb3 三个用户,且这三个用户需要加入 users 群组,之前还建立过 student 这个用户

假设这四个人都需要能用 Samba 服务,那么除了新增用户之外,我们还需要利用 pdbedit 这个指令来处理 Samba 用户功能

useradd -G users smb1,useradd -G users smb2,useradd -G users smb3,echo 1234 | passwd --stdin smb1,echo 1234 | passwd --stdin smb2,echo 1234 | passwd --stdin smb3

使用 pdbedit 指令功能

pdbedit -L [-vw] <==单纯的察看帐户信息

pdbedit -a|-r|-x -u 账号 <==新增/修改/删除账号

pdbedit -a -m -u 机器账号 <==与 PDC 有关的机器码

选项与参数:-L 列出数据库中的账号与UID等信息,-v 搭配-L执行,可列出更多的讯息,包括家目录等数据,-w 搭配-L,使用旧版的smbpasswd格式来显示数据

-a :新增一个可使用 Samba 的账号,后面的账号需要在 /etc/passwd 内存在者;-r :修改一个账号的相关信息,需搭配很多特殊参数,请 man pdbedit;

-x :删除一个可使用 Samba 的账号,可先用 -L 找到账号后再删除;-m :后面接的是机器的代码 (machine account),与 domain model 有关!# 2.1 开始新增使用者吧!

pdbedit -a -u smb1

new password: <==输入 4321 这个密码瞧瞧,依次继续执行pdbedit -a -u smb2,pdbedit -a -u smb3,pdbedit -a -u student

pdbedit -L 查询目前已经存在的 Samba 账号

尝试修改与删除 smb3 这个账号看看  smbpasswd smb3, pdbedit -x -u smb3,接着执行pdbedit -Lw就看不到smb3这个用户了

如果需要新增用户,但该账号不存在,就需要使用useradd再以pdbedit -a 去新增,若已经存在于 Linux 的实体账号,直接用 pdbedit -a 新增即可

管理 TDB 数据库格式建议使用 pdbedit 这个新的玩意儿来处理,smbpasswd 仅剩下修改密码的功能需记忆即可

重新启动 Samba 并进行自我测试/etc/init.d/smb restart,/etc/init.d/nmb restart

先用匿名登录试看看!smbclient -L //127.0.0.1<==有看到匿名登入,再使用 smb1 这个账号登入试看看!smbclient -L //127.0.0.1 -U smb1<=输入 smb1 在 pdbedit 所建立的密码

经由不同的身份登入可以取得不一样的浏览数据, 所以在使用上面需要特别留意喔,接着进行挂载mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1

此时 /home/smb1/ 与 /mnt 应该拥有相同的档名才对!因为挂载嘛,ls -a /mnt,却看不到任何东西!应该是 SELinux 的问题吧!根据 /var/log/messages 的讯息,

# 进行如下的动作就能够处理好这个程序setsebool -P samba_enable_home_dirs=1,再执行之前的命令就能看到文件了,最后卸载umount /mnt

Samba 是会对外提供服务的,因此 SELinux 会特别『关照』一下这个服务!包括默认用户家目录不会有开放的权限,预设的 SELinux type 不对就无法使用,自行测试完毕就能

够理解哪个地方的 SELinux 没有设定妥当。之前我们设定的 security 是 share,在同一部 Windows 系统上面重复测试时,会发生无法登入的情况。建议直接将 windows 系统重

新启动清除前一次登入的信息即可!

关于权限的再说明与累加其他分享资源的方式:有时发现明明在smb.conf当中已经设定了writable可写入,使用者登入的身份也没有问题,为啥就是无法挂载或写入,此时主要

的问题常常是来自于Linux文件系统的权限。例如当你无法挂载却发现Linux传统权限是对的,那么肯定是SElinux问题,使用setsebool与chcon或restorecon等指令克服,另外

就是我们在smb.conf当中设定 [project] 为可写入,亦即 /home/project 是可写入的。假设 smb1 属于 users 这个群组,因此以 smb1 登入 SAMBA 服务器后,对于 /home/project

应该是具有可以读写的能力的!但是,如果你以 root 的身份建立 /home/project 却又忘记修改权限的话, 此时 /home/project 是无法让 users 这个群组写入的,因此 smb1 这个

使用者当然不具有写入的能力。

那如果你还要扩充分享的目录与能够登入的使用者时,可以这样做:

利用编辑 smb.conf 来开放其他的目录资源,并且特别注意 Linux 在该目录下的权限喔!请使用 chown 与 chmod

利用 pdbedit 来新增其他可用 Samba 的账号,如果该账号并没有出现在 /etc/passwd 里面,请先以 useradd 新增该账号;

不论进行完任何的设定,请先以 testparm 进行确认,之后以 /etc/init.d/{smb,nmb} restart 来重新启动

设定成为打印机服务器 (CUPS 系统)

如果打印机本身有支持网路的话,那么建议直接参考打印机手册来设定即可,不需要安装SAMBA打印机,因为某些打印机网络卡有特殊的功能。例如HP的网卡通常还支持

某些特殊的打印功能(双面,多页打印),这些功能透过伺服器重新分享时,可能会遗失。而如果是使用USB接口连接的打印机格式,那么就要架设SAMBA服务器了,例如

HP LaserJet P2015dn 这部打印机为例,不使用网路功能,单纯使用USB连接到SAMBA服务器上。CUPS连接到USB打印机,并开放非本机的IP来源使用此打印机,

使用CUPS内建的打印机驱动程序。前往 HP 打印机官网取得 Windows 操作系统的驱动程序

1. 安装打印机与确定打印机的联机正常,如果你的打印机端口为使用 USB 或者是平行串行端口的话,那么当你连接上打印机后,使用lsusb测试看看

2. 设定 CUPS 与打印机的联机  yum groupinstall "Print Server"

vim /etc/cups/cupsd.conf

# 1. 让监听的接口开放在所有接口! Listen 0.0.0.0:631

# 2. 让内部网域能够进行 CUPS 的浏览与管控

<Location />  Order allow,deny   Allow From 127.0.0.0/8  Allow From 192.168.100.0/24  </Location>   新增能够让内网其他 IP 浏览者

<Location /admin> Encryption Required <==因为这里的关系,所以可能会用 https://IP 喔! Order allow,deny    Allow From 127.0.0.0/8    Allow From 192.168.100.0/24

</Location>新增能够管理CUPS者

设定完毕后就可以开始来启动 cups 系统  /etc/init.d/cups start   chkconfig cups on    netstat -tunlp | grep 'cups'   631 的埠口就是 CUPS 所启动

USB 端口: usb:/dev/usb/lp0

网络打印机: ipp://ip/打印机型号

网络芳邻打印机: smb://user:password@host/printer

打开浏览器,在网址列输入: https://192.168.100.254:631 (底下则是 192.168.1.100) 开始设定打印机,设定完成之后

如果都正常没问题,那么你的系统已经有一部打印机被 CUPS 所管理,且这部打印机在网络的网址为

http://服务器IP:631/printers/打印机队列名称

http://192.168.100.254:631/printers/HP_LaserJet_P2015_Series

在 smb.conf 当中加入打印机的支持 (Optional) , 开始告诉 Samba 将这部打印机给他分享出去吧!你需要这样处理: vim /etc/samba/smb.conf

# 得要修改 load printers 的设定,然后新增几个数据

[global] load printers = yes       cups options = raw <==可支持来自 Windows 用户的打印作业

printcap name = cups    printing = cups <==与上面这两个在告知使用 CUPS 打印系统

[printers] <==打印机一定要写 printers 喔   comment = All Printers    path = /var/spool/samba<==预设把来自 samba 的打印作业暂时放置的队列

browseable = no <==不被外人所浏览啦!有权限才可浏览    guest ok = no <==与底下两个都不许访客来源与写入(非文件系统)  writable = no

printable = yes <==允许打印很重要的一项工作! testparm <==若有错误,请自行处理一下  /etc/init.d/smb restart    /etc/init.d/nmb restart

这样你的SAMBA就能够顺利的提供打印机的服务了,不过可惜Windows客户端依旧要安装打印机的驱动程序才能够使用SAMBA所提供的打印机

那有没有让SAMBA主动的提供驱动程序给使用者,这样客户端就不要额外的去找驱动程序了,

4. 让 Samba 主动提供驱动程序给 Windows 用户使用,打印机型号过多,那么LInux怎么知道打印机的驱动程序为何,还好,CUPS主要是透过利用Postscript的打印语言

与打印机沟通的,因此客户端只要取得postscript的驱动程序他们就能够使用咱们的SAMBA服务器所提供的打印机了,如此不论打印机型号为何,只要能够支持postscript

的打印格式就OK了,CUPS官网本身就有提供CUPS的postscript驱动程序,连结去下载: 支持 CUPS 的软件:http://www.cups.org/software.php

可以直接下载 cups-windows-6.0-1.i386.rpm 这个档案即可,直接安装这个RPM包就能够取得cups对windows的打印机驱动程序了,

这个档案安装完毕之后,会将驱动程序放置于 /usr/share/cups/drivers/ 里头,除了这个驱动程序外,要支持 Windows 2000 以后出产的 Windows 版本, 你还得到

Windows XP 底下的目录去下载几个 32 位支持的档案,Win XP 32 位:C:\WINDOWS\system32\spool\drivers\w32x86\3

将该目录下里面的 PS 开头的档案通通下载下来,应该有四个档案的,请将他复制成为档名小写的档案,并且放置到你 Samba 服务器上的 /usr/share/cups/drivers/

目录下,该目录内放置的这就是基本的驱动程序,ll /usr/share/cups/drivers,对于 64 位的其他较晚期的 Windows 7 等系统可能就得要重新处理了,

自行上网查阅相关的数据下载方式,接下来我们必须要在 smb.conf 里面增加一笔新的分享数据,这个分享数据必须是 [print$] 名称才行

mkdir /etc/samba/drivers           chcon -t samba_share_t /etc/samba/drivers,由于预设的 CUPS 仅有 root 能管理,因此我们以 root 作为打印机管理员

同时 SELinux 的类型也要修订如上的方式!那 root 就得要加入 samba 的支持才行:pdbedit -a -u root, testparm <==测试语法, /etc/init.d/smb restart <==重新启动

smbclient -L //127.0.0.1 -U root, <==输入 root 在 samba 的密码,用户不需要自行设定他们的驱动程序哩! 要由 cups 告知 Samba 是由 cupsaddsmb 这个指令来搞定

的,整个指令的执行很简单,cupsaddsmb [-H SAMBA 服务器名] [-h CUPS 服务器名] -a -v [-U 使用者账号],选项与参数:

-H :后续接的是 Samba 服务器名,本机的话可以直接用 localhost 即可;

-h :后续接的为 CUPS 的服务器名,同样的可使用 localhost 即可;

-a :自动搜寻出所有可用的 CUPS 打印机;

-v :列出更多的信息;

-U :打印机管理员

# 利用前面的说明将打印机驱动程序挂上 SAMBA (注意 CUPS 管理员预设是 root)                cupsaddsmb -H localhost -U root -a -v

ll /etc/samba/drivers,<==这就是驱动程序目录,最后在驱动程序的存放目录会多出一个 W32X86 的目录,可以查询一下该目录的内容, 那就是预计要给客户端使用的驱动程

序,为了将所有的数据通通驱动, 建议你将 CUPS 及 SAMBA 通通重新启动,cups,smb,nmb三个服务重启

5. 一些问题的克服:如果一切顺利的话,你在 Windows 客户端应该可以顺利的连接到打印机啰!如果你曾经印错数据,那么该如何进入 Linux 的 Samba 主机将该数据移除

# 1. 列出所有可用的打印机状态   lpstat -a

# 2. 查询目前默认打印机的的工作情况  lpq

# 3. 删除所有的工作项目喔!lprm -   加上那个减号 (-) 代表移除所有等待中的打印作业

安全性的议题与管理

使用 SAMBA 其实是有一定程度的危险性的,这是因为很多网络攻击的蠕虫、病毒、木马就是透过网芳来攻击的,! 为了抵挡不必要的联机,所以 CentOS 5.x 预设的

SELinux 已经关闭了很多 Samba 联机的功能,因此很多情况下,很多客户端的挂载可能会有为题,此外,仅开放有权限的网域来源,以及透过 smb.conf 来管理特定的权限

同时,Linux 文件系统的 r, w, x 权限也是需要注意的。

SELinux 的相关议题: 我们透过登陆档的内容就能够知道如何解决SELinux对各个服务器造成的问题,不过,既然知道服务是SAMBA了,可以找出与SAMBA有关的SELinux

规则,基本的SAMBA规则主要有:

getsebool -a | grep samba

samba_domain_controller --> off <==PDC 时可能会用到

samba_enable_home_dirs --> off <==开放用户使用家目录

samba_export_all_ro --> off <==允许只读文件系统的功能

samba_export_all_rw --> off <==允许读写文件系统的功能

samba_share_fusefs --> off

samba_share_nfs --> off

use_samba_home_dirs --> off <==类似用户家目录的开放!

virt_use_samba --> off 几乎所有的规则默认都是要关闭的,所以我们需呀慢慢的打开,目前我们仅会用到用户的家目录以及分享成为可擦写,不过似乎仅要

samba_enable_home_dirs 那个项目设定妥当即可,可以这样做:

setsebool -P samba_enable_home_dirs=1

getsebool -a | grep samba_enable_home

samba_enable_home_dirs --> on变成开启了

这样用户挂载他们的家目录时 (例如 smb1 使用 //127.0.0.1/smb1/) 就不会出现无法挂载的怪问题了!此外, 由于分享成为 Samba 的目录还需要有 samba_share_t 的类型

。那我们还有分享 /home/project ,那个目录也需要修订,ll -Zd /home/project      chcon -t samba_share_t /home/project          ll -Zd /home/project

如果你分享的目录不只是 Samba ,还包括 FTP 或者是其他的服务时,那可能就得要使用 public_content_t 这个大家都能够读取的类型才行,若还有发现任何SELinux的问题

请依照/var/log/messages 里面的信息去修订

防火墙议题:利用 iptables 来管理:最简单的管理登入 SAMBA 的方法就是透过 iptables,如果你仅要针对底下的范围开放SAMBA时可以这样做:

仅针对 192.168.100.0/24, 192.168.1.0/24 这两个网域开放 SAMBA 使用权

SAMBA 启用的 port UDP: 137, 138 及 TCP: 139, 445;

所以 iptables.allow 规则当中应该要加入这几项:

vim /usr/local/virus/iptables/iptables.allow  加入底下这几行!

iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \ --dport 139,445 -j ACCEPT

iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \ --dport 139,445 -j ACCEPT

iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \ --dport 137,138 -j ACCEPT

iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \ --dport 137,138 -j ACCEPT

/usr/local/virus/iptables/iptables.rule ,最后由于smbd 及 nmbd 并不支持 TCP Wrappers,所以你也只能透过 iptables 来控制了

防火墙议题: 透过内建的 Samba 设定 (smb.conf)

事实上SAMBA已经有很多防火墙机制,那就是在smb.conf 内的 hosts allow 及 hosts deny 这两个参数,通常只要使用hosts allow即可,没有写入这个设定项目的其他来源就

会被拒绝联机的,这是比较严格的设定,举例来说,如果你只想要让本机、192.168.100.254, 192.168.100.10, 192.168.1.0/24 使用 SAMBA 而已,那么可以这样写:

vim /etc/samba/smb.conf

[global] # 跟防火墙的议题有关的设定 hosts allow = 127. 192.168.100.254 192.168.100.10 192.168.1.执行testparm测试,最后重新启动服务/etc/init.d/smb restart

因此 192.168.1.0/24 只要写出前面三个 IP 段即可 (192.168.1.)。 如此一来不但只有数部主机可以登入我们的 SAMBA 服务器,而且设定值又简单,不像 iptables 写那么长

鸟哥建议在防火墙议题方面,只要使用 iptables 或 hosts allow 其中一项即可,当中又以 hosts allow 较为建议

当然啦,如果你是针对区网开放的,那么设定 iptables 防火墙反而是比较好的, 因为不需要更动到 smb.conf 配置文件

文件系统议题:利用 Quota 限制用户磁盘使用

既然网芳是要分享文件系统给用户,那么各个SAMBA用户们确实会将数据放置在你的SAMBA服务器上,为了不让用户随便上传个数百GB的容量到你的SAMBA服务器,造成

你的文件系统分配不公或者是宽带方面的问题,那就要透过Quota 磁盘配额了,

例题:我们预计分配 smb1, smb2, smb3 在他们自己的家目录下,各拥有 300MB/400MB (soft/hard) 的磁盘配额限量,那该如何做?

Quota相关数据处理:

/etc/fstab 加入 /home 挂载点的 usrquota,grpquota 等设定值;

重新挂载 /home ,让 Quota 实际被支持

以 quotacheck -avug 建立 Quota 的数据库档案;

启动 Quota ;

实际操作:edquota -u smb1 来处理即可  edquota -p smb1 smb2     edquota -p smb1 smb3

查看结果 : repquota -ua

主机安装时的规划与中文扇区挂载

Samba 服务器的功能是用来作为文件服务器的,每个使用者都可以拥有家目录,并透过网芳的功能来连接到SAMBA服务器,有个问题就是你的使用者如果太多,,并且将他们

的重要数据都放到这部 Samba 服务器上头的话,那肯定 /home 未来会有点不足啊!所以/home所在磁盘或许可以使用大一点的硬盘,或者使用磁盘阵列,思考方向:

1. 在安装 Linux 的时候,建议不需要安装 X Window ;

2. 在规划 Linux 时,/home 最好独立出一个 partition ,而且硬盘空间最好能够大一些;

3.  /home 独立出来的 partition 可以单独进行 quota 的作业,以规范用户的最大硬盘用量;

4.  无网卡的打印机 (USB) 可直接链接到 Linux 主机再透过 Samba 分享;

5. 由于 SAMBA 一般来说都仅针对内部 (LAN) 主机进行开放,所以,可能的话SAMBA主机直接使用private IP 来设定即可,当然,SAMBA是否使用private IP还得视你的整个

网域的IP网段的特性来规划,如果你的 SAMBA 主机使用 Public IP 时,请特别留意规范好防火墙的设定,尽量仅让 LAN 内的计算机可以联机进来即可,不要对 Internet 开放

6. 另外,如果你的SAMBA服务器需要挂载含有中文的partition时,例如说你将原本Windows XP 的 FAT32 文件系统挪到 Linux 系统下,此时如果使用一般模式来挂载该分割

槽时,一些中文档名可能会无法被顺利显示出来,这个时候你就得需要这样做

mount -t vfat -o iocharset=big5,codepage=950 /dev/sd[a-p][1-15]  /mount/point

其中 iocharset 指的是本机的语系编码方式,codepage 则与远程软件有关。因为我们是在本机进行挂载,所以实际上使用 iocharset 这个参数即可

Samba 客户端软件功能

架设好SAMBA服务器之后,局域网中的Window/LInux系统都是通过NetBIOS over TCP/IP来连上SAMBA服务器的,在设定之前要知道几件事情:

1 在区网内的主机最好具有相同的工作组,具有不同的主机名;

2. Windows XP pro. 最多仅能允许十个用户同时连接到自己的网芳;

3.你可以在网芳当中看到的通常是相同群组的主机;

4.可以使用【搜寻】->【计算机】->【输入IP】来查看SAMBA主机;

5.Windows的网芳预设仅有同一IP网段的主机才能登入(Windows 防火墙设定)

接下来咱们就分别依照 Windows 及 Linux 系统来做说明

Windows系统的使用:在Windows上面搜寻网络上的网芳主机有以下几种方法:

1 打开『档案总管』,『网络上的芳邻』、『整个网络』、『Microsoft Windows Network』 就能看到属于你群组的所有计算机主机

2. 『开始』、『搜寻』、『档案或文件夹』、『计算机或人员』、『网络上的计算机』,然后在出现的方框当中填写正确的 IP ,按下『搜寻』即可,!这个方法可以适用于不在同一

个群组当中的网络主机

3. 如果是 Windows 7 的话,只要点选文件夹即可,例如想要连接到我们的SAMBA主机的话,而又不知道这部SAMBA主机的NetBIOS name,此时点击网络,在右上角的框框

中输入NetBIOS name,若不知道的话,就留白让Windows自己找,出现结果后,点选其中要登入的服务器,之后再输入密码,密码正确的话就能获取服务器的可用资源了,之后

可以将project挂载成本机磁盘,在 project 上面右键单击,选择『联机网络驱动器机』,就会出现如下的画面让你去选择挂载磁盘驱动器的参数,你可以自己调整想要的驱动器号

例如Z槽,那么以后你的档案总管中就会生成一个Z槽,该磁盘槽就代表\\192.168.100.254\project 那个分享的目录

让Windows系统的网芳支持不同网域的IP联机

由于网芳的资安问题越来越严重,因此 Windows XP 之后的版本都预设仅开放本机IP 网域的网芳联机而已,如果你的Windows想要让别人可以在Internet或不同的IP网段对你

联机时,就要修改一下防火墙的设定,点选Windows防火墙,选择进阶设定,选择输入规则---->档案与打印机共享---->选择详细的规则内容,会出现另外一个窗口----->

点选【领域】的部分来设定不同网段----->新增可以进入本机的远程IP网段,例如输入192.168.100.0/24,然后按下确定就可以在框框中出现可联机的远程服务器了

透过 port 445 的特殊登入方式,如果SAMBA服务器有启用port 445,并且已经分享了某个目录时,例如192.168.100.254 有分享出 project 这个分享资源名称时,那么这个目录

的完整写法为:『 \\192.168.100.254\project 』, 我们可以透过『开始』出现的那个方框来处理这个玩意儿。如果可以登入的话就会顺利登入,否则就会弹出一个要你输入账号密码

的窗口,输入正确的数据即可,我们还可以的登入别人Windows主机的C或D槽,写法是\\192.168.100.20\c$,所以SAMBA没有必须时,那个port 445应该是可以关闭的

Linux 系统的使用

smbclient:查询网芳分享的资源,以及使用类似 FTP 的方式上传/下载网芳,SAMBA有提供Linux网芳的客户端功能,也就是说Linux可以挂载SAMBA服务器也能挂载Windows

提供的网芳,主要是透过smbclient来观察,再以mount来挂载文件系统:

# 1. 关于查询的功能,例如查出 192.168.100.254 的网芳数据,输入smbclient -L //[IP|hostname] [-U username]   smbclient -L //192.168.100.254 -U smb1

# 2. 利用类似 FTP 的方式登入远程主机,  smbclient '//[IP|hostname]/资源名称' [-U username]   # 意思是使用某个账号来直接登入某部主机的某个分享资源,举例如下:

smbclient '//192.168.100.254/smb1' -U smb1 输入密码,登入之后使用dir就能发觉其实就是在 //192.168.100.254/dmtsai 这个目录底下

# 我们可以使用 dir, get, put 等常用的 ftp 指令来进行数据传输了,   ?:列出所有可以用的指令,常用!   cd :变换到远程主机的目录  exit:离开 smbclient 的软件功能等等的功能

mount.cifs:直接挂载网芳成为网络驱动器机

使用smbclient一点也不方便,因为使用的是ftp的功能语法,有点怪,能不能像Windows那样,可以直接联机网络驱动器机,此时就要籍由mount.cifs来协助了

mount.cifs 可以将远程服务器分享出来的目录整个给他挂载到本机的挂载点,如此一来,远程服务器的目录就好像在我们本机的一个分割槽一样了,可以直接执行复制,编辑

等功能,语法:mount -t cifs //IP/分享资源 /挂载点 [-o options] 选项与参数:

-o 后面接的参数 (options) 常用的有底下这些: username=你的登入账号:例如 username=smb1             password=你的登入密码:需要与上面 username 相对应啊!】

iocharset=本机的语系编码方式,如 big5 或 utf8 等等;          codepage=远程主机的语系编码方式,例如繁体中文为 cp950

# 范例一:以 smb1 的身份将其家目录挂载至 /mnt/samba 中

mount -t cifs //192.168.100.254/smb1 /mnt/samba  -o username=smb1,password=4321,codepage=cp950,经由mount动作,我们可以轻易的将远程分享出来的咚咚挂载到

自己Linux本机上面

nmblookup:查询 NetBIOS name 与 IP 及其他相关信息:

我们可以透过一些NetBIOS相关的功能来取得NetBIOS name,不过,如果你还想要知道这个NetBIOS name的其他信息时,例如IP,分享的资源等等,那可以使用nmblookup

这个指令来搞定即可,使用方法:nmblookup [-S] [-U wins IP] [-A IP] name  选项与参数:

-S:除了查询name的IP之外,亦会找出该主机的分享资源与MAC等;

-U:后面一般接Windows的主要名称管理服务器的IP,可与-R互用;

-R:与-U互用,以Wins服务器来查询某个Netbios name;

-A:相对与其他的参数,-A后面可接IP,籍IP来找出相对的NetBIOS数据

# 范例一:藉由 192.168.100.254 找出 vbirdserver 这部主机的 IP 地址   nmblookup -U 192.168.100.254 vbirdserver

# 范例二:找出 vbirdserver 的 MAC 与 IP 等信息:  nmblookup -S vbirdserver

smbtree:网络上的芳邻浏览器显示模式!

如果想要使用类似Windows上面,可以一看就明了各个网芳所分享的资源时,能使用smbtree来查询  smbtree [-bDS] 选项与参数:

-b :以广播的方式取代主要浏览器的查询

-D :仅列出工作组,不包括分享的资源

-S :列出工作组与该工作组下的计算机名称 (NetBIOS) 不包括各项资源目录

# 范例一:列出目前的网芳树状相关图  smbtree

smbtree -S 此时仅有工作组与计算机名称而已

smbstatus:观察 SAMBA 的状态 ,其实这个指令算是服务器的相关功能,主要的目的是查阅目前SAMBA有多少来联机,且那些资源共享已经被使用等等的信息,如果想要使用

这个软件请先安装samba。smbstatus [-pS] [-u username] 选项与参数:

-p :列出已经使用 SAMBA 联机的程序 PID ;

-S :列出已经被使用的资源共享状态;

-u :只列出某个用户相关的分享数据

# 范例一:列出目前主机完整的 Samba 状态,执行smbstatus,上半部主要在列出目前联机的状态中,主要来自那个客户端机器与登入的用户名

# 下半部分则显示出,目前有几个目录被使用了?那个 smb1 代表 //IP/smb1/,你可以透过这个小程序来了解到目前有多少人使用你的 SAMBA

以 PDC 服务器提供账号管理:PDC可以让用户在计算机教室的任何一个地方,都用同一组帐号密码登入,并可以取得相同的家目录等数据,这与之前

在Linux底下使用NIS搭配NFS的做法类似,只是他是用在Windows上头就是了

让 Samba 管理网域使用者的一个实作案例,之前提到的peer/peer联机状况,也就是SAMBA服务器与Windows客户端其实是同等地位的,所以Windows客户端需要知道

SAMBA服务器内的帐号密码数据后,才能顺利使用SAMBA的资源,不过,这样的方式在较大的局域网络环境就会有点困扰,例如学校环境

例如,一个计算机教室有50部Windows XP的个人计算机,由于计算机教室大家都会使用,因此这些计算机有使用还原精灵,也就是每次计算机重新启动后整个计算机就会还

原成原本的样子,但我们知道使用者总是需要个人的家目录,他们不希望数据重启后消失,所以我们可以利用一部主机来让他们储存数据,那就是PDC服务器,PDC服务器

就是作为整个局域网络的领域管理员,然后让windows主机加入这个领域,未来使用者利用Windows登入时,(1)Windows会前往PDC服务器取得用户的帐号密码,同时PDC

还会传送用户的重要数据到那部Windows个人计算机上,而Windows计算机上的用户注销时,(3)该用户修改过的数据也会回传给PDC,如此一来不管这个使用者在哪一部个人

计算机上面登入,他都能够取得正确的个人资料。PDC 是个很复杂的环境, 他可以达到的功能相当的多,而且密码的验证也不必在同一部PDC主机上面,先做一个简单练习,底

下的这部PDC使用Linux自己的密码来进行验证,并且也只管理自己所分享出去的资料,至于假设网络环境与相关工作组参数如下:

整个基本的设定流程应该是这样的:

1. 区网计算机环境设定:整体网域设定好,尤其 Windows 的工作组与计算机名称及 IP 等参数;

2. PDC设定:因为PDC管理自己的密码,所以security = user

3. PDC 最好拥有整个网域的名称解析权力,亦即成为主要的名称解析器;

4. 需有 netlogon 资源共享,提供 windows 2000/XP pro. 客户端的登入之用;

5. 由于 Windows 需读入个人配置文件,默认目录为 profile,Linux 系统需预先设定此目录;

6.增加 PDC 上的使用者账号以及机器代码 (machine account) 等等

7.在 Windows 2000/XP pro. 个人计算机上设定成为 PDC 的客户端。

PDC 服务器的建置

PDC服务器的建立需要一步一步的实作进行,而且由于建置 PDC 的环境主要在管理整个区网内的 Windows 计算机,因此每部 Windows 计算机的主机名与相关参数要先确定下

来,每部计算机的角色定位都需要清楚才行。清楚了各个计算机的角色后,接下来就能够慢慢的实作进行

1. 建置 NetBIOS 与 IP 对应的数据:设定 lmhosts 与 /etc/hosts

由于我们的SAMBA即将成为整个网域的名称解析者,因此你最好将整个网域的NetBIOS name 与 IP 的对应写入 lmhosts 档案当中。如果你的区网是以 DHCP 发放IP的,

那么最好搭配DNS系统去建立你的主机名对应信息,否则主机名对应不起来,总是很麻烦的,这个案例中使用NetBIOS name(如 vbirdserver)与主机名 (如 www.centos.vbird) 并

不相同,因此建议需要修改lmhosts才好。

vim /etc/samba/lmhosts

127.0.0.1    localhost     <==这行是预设存在的,不要动他,底下的请自行新增

192.168.100.254 vbirdserver             192.168.100.10 vbirdlinux               192.168.100.20  vbirdwinxp             192.168.100.30  vbirdwin7

vim /etc/hosts    192.168.100.254 www.centos.vbird    vbirdserver           192.168.100.10 clientlinux.centos.vbird  vbirdlinux       192.168.100.20 vbirdwinxp

192.168.100.30 vbirdwin7

由于Linux上面的SAMBA很多数据还是与TCP/IP 的主机名有关,所以除了lmhosts之外,建议还是处理一下 /etc/hosts 比较妥当

2. 建置 PDC 主设定:处理 smb.conf

假设我们要让 PDC 客户端登入时可以取得他自己的家目录,那么需要这样处理:

[global]

workgroup = vbirdhouse<==请务必确认一下工作组与主机名

netbios name = vbirdserver

server string = This is vbird's samba server 等等信息;

# 与 PDC 有关的一些设定值:  # 底下几个设定值处理成为本局域网络内的主要名称解析器

preferred master = yes

domain master = yes

local master = yes

wins support = yes

操作系统(OS)等级越高才能成为主网域的控制者,一般NT为32 , Windows 2000 为 64 ,所以这里我们设定高一点,但不可超过 255

os level = 100

# 底下则是设定能否利用 PDC 登入,且登入需要进行哪些动作:

domain logons = yes

logon drive = K:  <==登入后家目录挂载成Windows 哪一槽,

logon script = startup.bat <==每个使用者登入后会自动执行的程序

time server = yes <==自动调整 Windows 时间与Samba 同步

admin users = root <==预设的管理员账号!预设为 root

logon path = \\%N\%U\profile  <==使用者的个人化设定

logon home = \\%N\%U <==用户的家目录位置!

# 这个在指定登入者能够进行的工作,里面主要是具有许多执行程序:

[netlogon] <==与前面的 logon script 有关,该程序放置在这里

comment = Network Logon Service

path = /winhome/netlogon <==重要的目录,要自己建立才行!

writable = no

write list  = root

follow symlinks = yes

guest ok = yes

[homes]  (底下保留原本设定)

testparm测试 ,接着重启/etc/init.d/smb restart         /etc/init.d/nmb restart

上面的设定有几个地方比较有趣一点:

time server:要使 Samba 与 Windows 主机的时间同步,使用这个项目;

logon script:当使用者以 Windows 客户端登入后,Samba 可以提供一支批处理文件,让使用者去设定好他们自己的目录配置。整个配置的内容记录在startup.bat 当中。 你要注意

的是,这个 startup.bat 档名可以随意更改,不过他必须要放置到 [netlogon] 所指定的目录内

logon drive:那么这个家目录要挂载到那个分割槽? 在 Windows 底下大多以 C, D, E... 做为磁盘的代号,你这里可以指定一下家目录要放置成为那个磁盘代号;

admin users:指定这个 Samba PDC 的管理员身份

[netlogon]:指定利用网络登录时首先去查询的目录资源。

logon path:用户登入后,会取得的环境设定数据在哪? 我们知道用户会有一堆环境数据,例如桌面等,这些东西都放置到这里来。

使用的变量中, %N 代表 PDC 服务器的位置, %U 则代表用户的 Linux 家目录。因此最终你得要有~someone/profile 的目录才可以

logon home:用户的家目录,默认与 Linux 的家目录相同位置。

3. 建立 Windows 客户端登入时所需的设定数据 netlogon 目录

先来建立 [netlogon] 内所需要的数据好了,那就是一个目录。由于鸟哥预计将所有的 PDC 数据通通放置到 /winhome 当中,包括用户家目录,因此很多东西都需要修订喔!包括后来

的 SELinux 肯定会出问题的~   mkdir -p /winhome/netlogon

接下来我们还得要建立允许使用者执行的档案,就是那个 startup.bat 才行! 注意一下,我们这里假设用户家目录为 K 槽,那你可以这样做:

vim /winhome/netlogon/startup.bat

net time \\vbirdserver /set /yes

net use K: /home

# 这个档案的格式为:net use [device:] [directory]

# 再将该档案转成 DOS 的断行格式才行!因为是提供给 Windows系统

yum install unix2dos

unix2dos /winhome/netlogon/startup.bat

cat -A /winhome/netlogon/startup.bat   瞧见吗?会多出个奇怪的 ^M 符号,那就是 Windows 断行字符

4. 建立 Windows 专用的使用者

因为鸟哥预计将使用者全部挪到 /winhome 底下,而且每个用户家目录应该还要有profile 目录存在才行, 为了避免麻烦,所以我们先到 /etc/skel 去处理一下,然后才建立账号,

最后才产生 samba 用户,产生 samba 用户可以使用 pdbedit 也能够直接使用 smbpasswd -a ,因为没有要用特殊的参数, 所以,Samba 用户就用旧的 smbpasswd 来处理即可

mkdir /etc/skel/profile

useradd -d /winhome/dmtsai dmtsai           useradd -d /winhome/nikky nikky

smbpasswd -a root    smbpasswd -a dmtsai         smbpasswd -a nikky         pdbedit -L

ll /winhome,可以看到上面创建的那几个用户,# 用户的家目录不是在 /home 而是在 /winhome 里头才是对

那以后新增的使用者都有可以存放来自 Windows 的特殊配置文件目录,使用 useradd 新增使用者后,记得也要使用 smbpasswd -a username 来让该使用者可以使用 Samba、

5. 建立机器码账号,由于 PDC 会针对 Windows 客户端的主机名 (NetBIOS name) 进行主机账号检查, 所以我们也要为客户端的主机名进行账号的设定。啥是主机账号? 一般用

户账号是英文或数字, 主机账号则在该账号最后面加上一个钱字号『$』即可,例如:vbirdwinxp 这部主机可设定的账号名称为 vbirdwinxp$

而我们知道要使用 smbpasswd 增加的使用者必须要在 /etc/passwd 当中,因此要建立这个账号你就得要这样做:

useradd -M -s /sbin/nologin -d /dev/null vbirdwinxp$         useradd -M -s /sbin/nologin -d /dev/null vbirdwin7$

会增加 -M -s -d 等参数的原因是因为不想要让这个账号具有可以登入的权限, 因此将这个主机账号设定的比较怪一点~,~接下来让 Samba 知道这个账号是主机账号,

所以你应该要这样做:smbpasswd -a -m vbirdwinxp$         smbpasswd -a -m vbirdwin7$

这样便加入主机账号了,而我们的 Samba PDC 也就可以透过『主机账号』来判断Windows 客户端能否连上来,, 若连接上 PDC 与 Windows 客户端后,接下来一般使用

者账号就可以在 windows 客户端登入

6. 修改安全性相关数据

由于我们建立的账号目录在 /winhome 底下,并非正规的 CentOS 目录,所以最重要的 SELinux 可能会跑掉~ ,所以,我们还得要修订 SELinux 才行!方法很简单,将

SELinux type 转为 samba_share_t 即可,chcon -R -t samba_share_t /winhome,由于 SELinux 的数据是会继承上层目录的,因此未来新增的用户,理论上,就不需要

重新修订 SELinux 的文件类型了。但是,如果你老是发现登入 PDC 的账号却无法取得家目录,那么就观察 /var/log/messages 内的资料来修订

Wimdows XP pro. 的客户端

底下的方法仅适用于 Windows 2000, Windows XP 专业版 , 一般的 Windows XP home 版本是不支持的,如果你客户端的主机是随机版的 Windows XP

通常是 Windows XP home,那底下的方法可能就无法适用,要连接上 Samba PDC 的过程也是挺简单的,你可以这样做: (至于 Windows 7 对于 Samba 的版本要求较高,

1. 确认 windows 客户端的网域与主机名,首先确认Windows客户端的工作与主机名跟我们的SAMBA PDC相同,确认的方式在局域网络里面已经提过了,这里再强调一次

将鼠标移动到『我的计算机』上面,按下右键, 选择『内容』,然后点选『计算机名称』,可以看到主机名与工作组,这个案例中的工作组是vbirdhouse,这部Windows主机的

NetBIOS名称为vbirdwinxp,如果不对的话,请按下『变更』来设定, 并且重新启动,接着回到刚刚的页面点击【网络识别】,接着

2. 设定主机名与域名,接下来我们要设定这部 Windows XP pro. 要链接到局域网络上的哪部 PDC 上面,亦即是处理主机账号以及 Samba PDC 负责的网域 (domain) 啦

分别在出现的窗口当中选择:  下一步;

请依序填写 Samba 主机上面的管理员账号与密码,要注意这个密码是记录于Samba 中的那个,可不是 /etc/shadow,这是SAMBA服务器的设定,输入之后按下一步,通常都会

出现找不到正确主机的画面,我们依旧再填一次主机的 NetBIOS name 以及组名,这次就给他输入正确的管理员账号与密码,记得最后面的网域就是工作组名称,别

写错了。 处理完毕后给他按下确定,恭喜你,这就表示已经连接上 Samba PDC,我们希望所有的使用者都直接由SAMBA PDC控管,所以这里请填写 『此时不新增使用者』吧!

按下一步去.

重新启动并以新的域名登入

为了保护我们的系统,因此得要按下 [ctrl]+[alt]+[del] 三个组合按键后,才会出现如下的登入画面:

目前系统上面就会有两个可选择的账号管理模式,一个是本机账号一个是 PDC 提供的账号,那我怎知登入者是哪个管理模式? 所以你就得要按下上述画面的『选项』

才会出现『登入到』的那一行数据。出现的两个数据分别是:

VBIRDWINXP(此计算机):这就是你的计算机名称,亦即是以本机账号登入;

VBIRDHOUSE: 就是 PDC 的 workgroup 项目, 透过 PDC 的账号来尝试登入。

现在请输入你在 Samba PDC 上面拥有的账号与密码来尝试登入,那如果你输入的账号密码是对的,却发现如下的画面时, 肯定是某些档案权限或者是 SELinux 设定

错误!请参考 /var/log/messages 或 /var/log/samba/* 里面的登录档来修改

4. 观察用户的家目录与配置文件

如果你可以顺利登入的话,打开档案总管后应该可以看到类似下方的画面:  该连上的通通连结上来,你也可以在自己的家目录 (K 槽) 新增移除数据的!是否很不错

而当你注销之后,你在 Windows 桌面上头所进行的各项个人化设定通通会被移动到 /winhome/dmtsai/profile 当中, 如果不相信的话,自行前往 Samba 服务器上头瞧一瞧就知道了

Wimdows 7 的客户端

根据 SAMBA 官网的说明,支持 Windows 7 的 Samba 版本必须要高于 3.3.x 才行, 只不过 Windows 7 要加入 Samba PDC 还得要修改注册码才行! 这

部份真的是给它很困扰 ! 在 Windows 7 机码的修改方面,主要是修改底下的机码:

# 1. 这个部分是进行『新增』机码!

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]

“DomainCompatibilityMode”=dword:00000001              “DNSNameResolutionRequired”=dword:00000000

修改的方式为,在 Windows7 的执行里面输入『 regedit 』,会出现如下的画面: 选择LanmanWorkstation中的Parameters  观察最底下的机码顺序看对不对。之后,

在右侧窗口点选我们所需要的机码,如果是要新增,那就是在右侧空白处右键单击选新增即可增加一组机码名称。最后双击机码会出现可供修改的窗口,那就改成上面表格中的要求

即可,等到将机码修订完毕,你就可以使用与 Windows XP 相同的方式来加入 PDC

PDC 之问题克服

如果老是发生错误讯息为『使用的帐户是计算机帐户。请使用你的通用用户帐户或本机用户帐户来存取这台服务器』时, 你可以这样做的:

先察看一下 /var/log/samba 里面的登录文件信息,尤其是log.vbirdwinxp 关于这部主机的信息吶;

如果还是无法解决,可以在 lmhosts 里面增加 vbirdwinxp 的 IP 与主机名的对应,然后将 samba 整个关掉『/etc/init.d/smb stop』,等待一段时间

让 NetBIOS 的名称解析时间逾时,再重新启动 samba 『/etc/init.d/smb start』,然后再重新做一次输入 root 的密码那个动作

上面第二个步骤挺有效的!不过,还是得要察看/var/log/samba 里面的登录信息才行

一些 Windows 账号在 Windows 系统上面的使用技巧

虽然 PDC 很好用,不过你要注意的是,每次你使用 PDC 上头的账号登入 Windows客户端主机时,  Windows 主机会由 /winhome/username/profile/ 当中加载所需要的

数据, 并暂时启动一个文件夹在 Windows 系统的 C:\Documents and Settings\username 当中, 如果你的家目录下的 profile 数据太多时, 光是传输就会花去很多时间的

所以你应该将一些档案数据放置到你的家目录下,以及K槽当中,尽量不要使用Windows 预设的『我的文档夹』,因为『我的文档夹』会将数据移动到『

/winhome/username/profile/My Documents/ 』目录下,同样,储存到桌面的数据会被放置到『 /winhome/username/profile/桌面/ 』目录中,那样在登入与注销时会花去很多时间

Windows 2000/XP pro. 也是一个多人的操作系统,不像 Windows 98 是单人的操作系统。所以,当使用 Windows 2000/XP pro. 而无法登入 PDC 时,你是无法使用 Windows

2000/XP pro. 上面的任何的信息的,但是在 Windows 98 上面若无法正确的登入,你仍然具有该计算机的主控,另外,设定 Windows 客户端之前,请先确认你的 Windows 是什么

版本? 上述的动作对于 Windows XP 家用版 (Home), Windows 7 是没有作用的。

服务器简单维护与管理

通常在设定SAMBA的时候,以单一主机的工作组(Workgroup)的方式来进行smb.conf的设定时,几乎很容易设定成功,不过,万一无法设定就要去查看/var/log/samba/ 里面的数

据,因为我们在smb.conf 里面设定了:log file = /var/log/samba/log.%m,那个 %m 是指客户端计算机的 NetBIOS Name 的意思,,所以,当有个 vbirdwinxp 的主机来登入我们

的 vbirdserver 主机时,那么登入的信息就会被纪录在 /var/log/samba/log.vbirdwinxp 档案,而如果万一来源 IP 并没有 Netbios name 的时候,那么很可能是一些错误讯息,这些

错误讯息就会被纪录到 log.smbd, log.nmbd 里面去了,所以在发生问题时,需要特别留意这些登录档。另外,如果你的 SAMBA 明明已经启动完成了,却偏偏老是无法成功,又

无法查出问题时,建议先关闭 Samba 一阵子,再重新启动:/etc/init.d/smb stop,还有,万一你在进行写入的动作时,老是发现『你没有相关写入的权限!』,几乎可以确定是

Permission 的问题,也就是 Linux 的权限与 SAMBA 开放的权限并不相符合,或者是 SELinux 在搞鬼,你必须要了解能不能写入 Linux 磁盘,看的是 PID 的权限与 Linxu 文件系

统是否吻合,而那个 smb.conf 里面设定的相关权限只是在 SAMBA 运作过程当中『预计』要给使用者的权限而已,并不能取代真正的 Linux 权限。

另外,通常造成明明已经查到分享 (smbclient -L 的结果),却老是无法顺利挂载的情况,主要有底下几个可能的原因:

虽然 smb.conf 设定正确,但是设定值『 path 』所指定的目录却忘记建立;

虽然 smb.conf 设定为可擦写,但是目录针对该用户的权限却是只读或者是无权限;

虽然权限全部都正确,但是 SELinux 的类型却错误了!

虽然全部的数据都是正确的,但是 SELinux 的规则 (getsebool -a) 却没有顺利启动

更多问题的解决方案,请参考最正确的登录文件信息

让用户修改 samba 密码同时同步更新 /etc/shadow 密码

我们知道使用者可以透过 passwd 修改 /etc/shadow 内的密码,而且用户也能够自行以smbpasswd 修改 Samba 的密码,如果用户时类似PDC的用户,那么这些用户理论上就

很少使用Linux了,能否让用户在修改 Windows 密码 (就是 Samba) 时,同步更新 Linux 上面的 /etc/shadow 密码呢?答案是可行的啦!而且动作并不困难~因为 smb.conf 里头

已经提供了相对应的参数设定值,参考网站:

http://moto.debian.org.tw/viewtopic.php?t=7732&

http://de.samba.org/samba/docs/using_samba/ch09.html

基本上你需要的是 smb.conf 里面 [global] 的几个设定值:

[global]  # 保留前面的各项设定值,并新增底下三行即可:

unix password sync = yes <==让 Samba 与 Linux 密码同步

passwd program = /usr/bin/passwd %u <==以 root 呼叫修改密码的指令

pam password change = yes <==并且支持 pam 模块!

设置好后进行测试 testparm,紧接着重新启动SAMBA  /etc/init.d/smb restart

接下来,当你以一般用户 (例如 dmtsai) 修改 samba 的密码时,就会像这样:smbpasswd ,执行这个命令后会发现密码输入的格式被限制了,这就是上面设置了pam模块所起

到的作用。

利用 ACL 配合单一使用者时的控管

例如有个临时代课老师,而同学们有个目录是群组可写入的,那么如果让该老师加入这个群组的话,万一老师一不小心把东西给误删了,那就是莫名的灾难了,此时就要用到

ACL来管理某个目录的单一用户权利,权限的管理不必透过smb.conf 的设定,只要透过 ACL 来管理就能够达到你所需要的目的了

Linux 文件服务器之二 SAMBA服务器相关推荐

  1. 在红帽Linux上安装samba服务,如何在linux上安装配置samba服务器

    如何在linux上安装配置samba服务器 更新时间:2019-10-29 22:40 最满意答案 1.首先需要登入安装了Linux系统的计算机,安装Samba.Fedora发行版一般使用yum工具安 ...

  2. debiansamba文件服务器,Debian安装Samba服务器

    Rate this post 之前做项目遇到过需要配置samba服务器以实现Linux和Windows文件共享,一路配置下来,也遇到了一些问题,不过解决了之后发现并不困难,接下来我将简单介绍一下配置过 ...

  3. Linux使用笔记: 设置Samba服务器中新建文件/目录的权限

    From: http://easwy.com/blog/archives/set-file-directory-attribute-for-linux-samba/ 通过Samba服务器实现windo ...

  4. Linux第八课samba服务器搭载

    1.先使用yum命令安装samba服务. 命令为: # yum install samba -y 2.配置服务器IP,方法与nfs相同            备注:(与Windows相连时网关必须相同 ...

  5. linux红帽7安装samba服务器

    1.连上互联网(ping通外网) 2.挂载DVD光盘到min文件(文件名自取) 3.配置本地yum源 vim  /etc/yum.repos.d/rhe7.repo(rhe7是创建的文件名,后缀rep ...

  6. 【CentOS Linux 7】实验5【Samba服务器管理】

    Linux系统及应用---调研报告 [Linux CentOS 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [Linux CentOS 7]实验2[Shell编程及应用] [ ...

  7. 【Linux】【开发环境】【RHEL】开发环境搭建系列之十——Linux主机环境下挂载samba服务器

    在Windows下访问samba服务器比较容易,但是在Linux系统下访问samba服务器操作就略复杂了,本文将Linux服务器下访问samba服务器的步骤做一整理,供各位参考. 1.安装必要的软件 ...

  8. 2-4-RHEL6.3搭建samba服务器案例分析与总结(Red Hat Enterprise Linux Server6.3)@树袋飘零...

    本节介绍内容: 1.  samba概述 2.  samba服务器的搭建 3.  samba服务主配置文件的详解 4.  samba服务器搭建案例分析 1.  samba概述 samba是linux以及 ...

  9. linux下samba服务器防病毒

    Linux系统下对samba服务器防病毒保护,现在很多反病毒都支持,有开源的(Clam),现在要装的是在linux下带有两个引擎(clam+escan)的防病毒eScan,废话少说,还是来看下安装和界 ...

最新文章

  1. DNNBrain:北师大团队出品,国内首款用于映射深层神经网络到大脑的统一工具箱...
  2. Qt设置应用程序图标
  3. letecode [160] - Intersection of Two Linked Lists
  4. [VC]WindowProc和DefWindowProc函数
  5. linux发挥显卡性能,Linux Kernel 2.6.30下Intel显卡性能有大幅提升!
  6. 解决:设置中打开蓝牙,測试机不会自己主动搜索设备
  7. 大数据 数据库 评测_为什么腾讯QQ的大数据平台选择了这款数据库?
  8. 嵌入式Linux系统编程学习之二常用命令
  9. python入门第七章好友管理系统
  10. CYYMysql 源码解读 1
  11. 流程管理无效的几个判定标准?
  12. 深度学习基础(八)—— 稀疏自编码器
  13. Confluence或JIRA验证码乱码的问题
  14. HAproxy负载均衡部署
  15. Linux执行sql文件
  16. SQL注入语句和方法总结
  17. 声纹识别之Alize入门教程(一):环境配置
  18. Appium--swipe滑动方法
  19. ESD:“蓝灯“精灵如何对抗27KV空气式放电
  20. 脚本调试sh -x xx.sh、set -x

热门文章

  1. 怎样禁止系统的信使服务(转)
  2. IOS推送详解(一)------APNs
  3. MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。
  4. 精妙SQL语句(转载)
  5. c语言编程步骤Vision4,【2017年整理】keil_μVision4使用详解教程.pdf
  6. 前端如何打安卓apk包及手机在线调试
  7. Win10无线网络WiFi提示无法连接此网络的原因与解决方案
  8. 从天猫迈巴赫到双引擎回归框架:如何化技术为生产力?
  9. 旋钮控制PWM调节电机转速/灯光亮度方案
  10. 自己设计 PCB 电路板,需要学习哪些科目?