内容:
1、samba的作用以及由来
2、samba的特性
3、samba的工作过程
4、samba的安装以及配置
5、samba的搭建测试
一、samba的作用以及由来
SAMBA历史溯源(摘自百度百科):
在早期网络世界当中,档案数据在不同主机之间的传输大多是使用 FTP 这个好用的服务器软件来进行传送。不过,使用FTP 传输档案却有个小小的问题,那就您无法直接修改主机上面的档案数据!也就是说您想要更改Linux 主机上的某个档案时,必需要由 Server 端将该档案下载到 Client端后才能修改,也因此该档案在 Server 与 Client 端都会存在。这个时候,万一如果有一天您修改了某个档案,却忘记将数据上传回主机,那么等过了一阵子之后,如何知道那个档案才是最新的?!
既然有这样的问题,可不可以在 Client 端的机器上面直接取用Server 上面的档案,如果可以在 Client 端直接进行 Server 端档案的存取,那么在Client 端就不需要存在该档案数据,也就是说,只要有 Server 上面的档案资料存在就可以!有没有这样的档案系统( File System )?很高兴的是, NetworkFile System, NFS 就是这样的档案系统之一!我只要在 Client 端将 Server所提供分享的目录挂载进来,那么在 Client 的机器上面就可以直接取用 Server上的档案数据,而且,该数据就像 Client 端上面的partition 一般!而除了可以让 Unix Like 的机器互相分享档案的NFS 服务器之外,在微软 ( Microsoft ) 上面也有类似的档案系统,那就是 CommonInternet File System, CIFS 这个咚咚啦!CIFS 最简单的想法就是目前常见的『网上邻居』。Windows 系统的计算机可以透过桌面上『网上邻居』来分享别人所提供的档案数据。不过,NFS仅能让 Unix 机器沟通, CIFS 只能让 Windows 机器沟通。伤脑筋,那么有没有让Windows 与 Unix-Like 这两个不同的平台相互分享档案数据的档案系统?
1991 年一个名叫Andrew Tridgwell 的大学生就有这样的困扰,他手上有三部机器,分别是跑DOS 的个人计算机、DEC公司的 Digital Unix 系统以及 Sun 的 Unix 系统。在当时,DEC 公司有发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的Unix 与个人计算机的 DOS 这两个操作系统的档案数据,可惜让 Tridgwell 觉得较困扰的是,Sun的 Unix 无法藉由这个软件来达到数据分享的目的。这个时候 Tridgwell 就想说:『咦!既然这两部系统可以相互沟通,没道理Sun 就必需这么苦命吧?可不可以将这两部系统的运作原理找出来,然后让 Sun这部机器也能够分享档案数据呢?』,为了解决这样的的问题,这老兄就自行写了个program 去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个档案系统,而就是这套 SMB软件能够让 Unix 与 DOS 互相的分享数据!( 注:再次的给他强调一次,在Unix Like 上面可以分享档案数据的 file system 是 NFS,那么在 Windows 上面使用的『网络邻居』所使用的档案系统则称为Common Internet File System, CIFS )
因此 Tridgwell就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。
二、samba的特性
Samba是在linux机unix上实现SMB协议的一个免费软件,有服务器及客户端程序构成,SMB协议是建立在NetBIOS 协议之上的应用协议,是基于TCP138/139两个端口的服务。被用于Lan Manager和Windows服务器系统中,实现不同的计算机直接共享打印机和文件等。
Samba的服务器程序可以实现以下主要功能:
1、文件及打印共享;
2、计算机名与IP的解析;
3、windows服务的支持;
4、用户权限的设置
samba可以实现linux间和linux与windows间的文件共享
三、samba的工作过程
Samba工作流程:
对于Samba服务器来说,其主配置文件smb.conf记录了共享的目录列表。比如share目录,temp目录等。对于每个共享目录,需要配置相应权限,服务器会根据smb.conf文件中的设置,判断客户端是否有权限访问,只有拥有权限才可以访问服务器的资源。Samba服务器同样会对用户的行为进行记录,每一次访问的信息都会记录在日志文件中,以便查询哪些客户端访问过Samba服务器。
四、samba的安装以及配置
1、samba是C/S架构,所以分为客户端和服务端软件:
samba-*.rpm:该包为Samba服务的主程序包。服务器必须安装该软件包,后面的数字为版本号
samba-client-*.rpm:该包为Samba的客户端工具,是连接服务器和连接网上邻居的客户端工具并包含其测试工具
samba-common-*.rpm:该包存放的是通用的工具和库文件,无论是服务器还是客户端都需要安装该软件包
samba-swat-*.rpm:当安装了这个包以后,就可以通过浏览器(比如IE等哈)来对Samba服务器进行图形化管理
程序环境:
配置文件:
/etc/samba/smb.conf
主程序:
nmbd:Network Naming Service, NetBIOS
smbd:SMB/CIFS Service;
监听的端口:
137/udp, 138/udp
139/tcp, 445/tcp
客户端程序:
mount -t cifs = mount.cifs
smbclient:交互式命令行客户端工具;
2、samba的配置:
smb.conf文件的开头部分为samba配置简介,告诉我们smb.conf文件的作用及相关信息。
smb.conf中以“#”开头的为注释,为用户提供相关的配置解释信息,方便用户参考。
smb.conf中还有以“;”开头滴,这些都是samba配置的格式范例,默认是不生效滴,可以通过去掉前面的“;”并加以修改来设置想使用的功能
注意:samba的用户是当前的系统用户,但是处于安全机制,密码却不是当前的系统登录密码,而是另外设置的密码。
smb.conf的配置文件可以分成两部分:Global Settings全局的环境配置和Share Definitions共享的定义设置,其中Global Settings又有几个分类,我们可以对sam.conf进行信息处理查看
[22:19 [email protected]~]# grep -E "^#[[:space:]]?-----|=====" /etc/samba/smb.conf #--------------- #-------------- #======================= Global Settings ===================================== # ----------------------- Network Related Options ------------------------- # --------------------------- Logging Options ----------------------------- # ----------------------- Standalone Server Options ------------------------ # ----------------------- Domain Members Options ------------------------ # ----------------------- Domain Controller Options ------------------------ # ----------------------- Browser Control Options ---------------------------- #----------------------------- Name Resolution ------------------------------- # --------------------------- Printing Options ----------------------------- # --------------------------- Filesystem Options --------------------------- #============================ Share Definitions ==============================
全局配置Global Settings:
[global] workgroup = MYGROUP #指定工作组 server string = Samba Server Version %v #服务器名说明 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 指明要监听的地址或网络接口;、 hosts allow = 127. 192.168.12. 192.168.13. #白名单 log file = /var/log/samba/log.%m #日志的记录位置 max log size = 50 #日志的大小,单位为K security = user #基于用户安全认证 share (depricated) #废弃 server (depricated) #废弃 domain #域名 passdb backend = tdbsam #生成的帐号密码存在的数据库 load printers = yes cups options = raw
共享文件系统Share Definitions:
[shared_ID]
有三类:
[homes]:每个samba用户是否能够通过samba服务访问其家目录;
[printers]:打印服务;
[shared_FS]:用户自定义的共享目录;
常用指令:
comment:注释信息;
path:本地文件系统路径;
browseable:是否可浏览,是否为用户可见;
guest ok:是否允许来宾账号访问;
public:是否公开给所有来宾;
writable:是否可写;
read only = no
write list:拥有写权限的用户或组列表;
用户名
@组名, +组名
自定义共享的方式:
[shared_ID]
comment = #添加注释内容
path = #添加要共享的文件路径
guest ok = #是否允许来宾账号访问;
read only = #只读也可以
public = #
browseable = #是否可以浏览
write list = #有写权限的列表
注意:定义所用户在服务级的写权限write = yes (read only = no)不建议与write list同时使用;
3、samba用户管理:
smbpasswd, pdbedit
smbpasswd [OPTIONS] USERNAME
-a:添加
-x:删除
-d:禁用
-e:启用
pdbedit:
-L:列出samba服务中的所有用户;
-a:添加用户为samba用户;
-u USERNAME:
-x:删除
-t:从标准输出接收密码;
访问服务:
(1) smbclient交互式客户端程序:
(1) 查看目标服务上的共享
smbclient -L SMB_SERVER [-U USERNAME]
(2) 访问共享服务
smbclient //SMB_SERVER[/SHARE_NAME] [-U USERNAME]
(2)mount.cifs
mount -t cifs //SMB_SERVER/SHARED_ID /MOUNT_POINT -o username=USER,password=PASS
注意:挂载操作中的用户,与-o选项中指定的用户直接产生映射关系;访问挂载,是以-o选项指定的用户身份运行,与本地用户以ID产生映射;
4、smbstatus命令:
显示samba服务的相关共享的访问状态信息;
-b:显示简要格式信息;
-v:显示详细格式信息;
五、samba的搭建测试
1、一台linux主机安装samba作为服务端,客户端程序一般默认已经安装,主要安装服务程序即可
#yum install -y samba
2、配置smb.cof,在Share Definitions段下添加配置和需要共享的目录:
[windows] comment = windows path = /etc browseable = yes guest ok = yes writable = yes
使用testparm命令可以检查语法是否错误:
[23:02 [email protected]~]# testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[windows]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 client signing = required idmap config * : backend = tdb cups options = raw [homes] comment = Home Directories read only = No browseable = No [printers] comment = All Printers path = /var/spool/samba printable = Yes print ok = Yes browseable = No [windows] comment = windows path = /etc read only = No guest ok = Yes
启动samba服务
[23:10 [email protected]~]# service nmb start Starting NMB services: [ OK ] [23:10 [email protected]~]# service smb start Starting SMB services: [ OK ]
添加一个samba帐号,并设置密码:
[23:16 [email protected]~]# useradd samba [23:16 [email protected]~]# id samba uid=505(samba) gid=505(samba) groups=505(samba) [23:17 [email protected]~]# smbpasswd -a samba New SMB password: Retype new SMB password: Added user samba.
3、在linux的客户机挂载测试:
[[email protected] ~]# yum install -y samba-client [[email protected] ~]# mount.cifs //10.1.252.109/windows /mydata/samba/ -o username=samba,password=nihao [[email protected] ~]# ls /mydata/samba/ abrt ethers latrace.d passwd- sasl2 acpi exports ld.so.cache pbm2ppa.conf scl alsa favicon.png ld.so.conf pcmcia securetty alternatives fcoe ld.so.conf.d php.d security anacrontab festival lftp.conf php.ini services anthy-conf filesystems libaudit.conf pinforc sestatus.conf
4、在windows的客户机挂载测试:
这里需要注意权限的问题,默认的安全法则是把本机的root(linux系统)映射为nobody账户,同时要对文件有相关的权限,除了在配置文件中设置,也要满足samba服务端的本地文件系统的权限,另外samba是根据UID来进行权限确认,即客户端和服务端的samba帐号只要UID是相同的其权限也是相同的。