samba是什么
早期的网络世界中,档案数据在不同的主机之间的传输主要是使用FTP这样的服务器软件来进行传送.但是使用FTP对数据进行传送有一个缺陷就是无法直接对服务器上的数据进行修改.只能先将服务器上的数据下载后,进行修改,然后再上传到服务器上才算是完成了服务器上的数据更改.
为了减少这样的做的麻烦,让档案直接在两部主机之间之间修改,我们有NFS和CIFS这样的文件系统可以选择.这样我们就实现了客户端直接进行服务器档案的存取,其中Unix Like的机器对应的是NFS服务器,Microsoft机器对应的是CIFS文件系统,其中CIFS最简单是的实现就是目前的网上芳邻.但是由于这两种方式只能在对应系统的计算机上实现档案数据的分享,所以进而有了可以在Windows和Unix Like这两个平台上相互分享数据的文件系统samba.它是通过封包侦测逆向工程发展的.
samba的常见应用
-利用软件直接编修www主机上的网页数据
-做成可以联机的文件服务器(如PDC)
-打印机服务器(不过需要查明printer是否支持,参照www.openprinting.org/printers)
samba使用的NetBIOS通讯协议
samba这个文件系统是架构在NetBIOS这个通讯协议上开发出来的.但是值得注意的是最早IBM发展NetBIOS的目的是让局域网络内少数计算机进行网络链接的一个协议,考虑的角度试试针对大型网络,所以NetBIOS是无法跨路由的.但是我们可以通过NetBIOS over TCP/IP的方式去跨路由的使用samba服务器所提供的内容.
samba使用的daemons
主机在NetBIOS中被定义为使用NetBIOS Name,每一部主机必须要有不同的NetBIOS Name,档案数据就是在不同的NetBIOS Name之间沟通.
1.取得对方主机的NetBIOS Name定位该主机所在
当我们想要登入某部Windows主机使用他所提供的档案数据时,必须加入该Windows主机的群组(Workgroup),并且我们的机器也必须设定一个主机名,但是这个主机名和Hostname是不同的,这个主机名是架构在NetBIOS协议上的,可以称之为NetBIOS Name(在一个群组之中,NetBIOS Name必须是独一无二的)
2.利用对方给予权限获取可用资源
在我们找到主机名后,是否能登入该对方主机或者是取用对方主机所提供的资源,还要看对方Windows主机是否给我们使用的权限.
samba具体是通过两支服务来控制这两个步骤(以后设定防火墙的时候可能会使用到这三个port):
-nmbd:这个daemon是用来管理工作组,NetBIOS name等等的解析,主要利用UDP协议开启port 137,138来负责名称解析的任务.
-smbd:这个daemon的主要功能是用来管理samba主机分享的目录,档案和打印机等等.主要利用可靠的TCP协议来传输数据,开放的端口为139及445(不一定存在).
联机模式介绍
我了解了两种最常见的局域网联机模式:peer/peer和domain model,这两种模式都是可以使用samba实现的.
peer/peer
假设在局域网里的所有PC都可以在自己的计算机上管理自己的账号和密码,同时每一部计算机也都具有独立执行各项软件的能力,只是藉由网络将各个PC链接起来的一个架构.每个计算机都可以同时为Client和Server.但是虽然每台机器都可以独立运作但是整个局域网里的成员进行数据分享时就会较为困难了.
domain model
将使用计算机资源所需的账号和密码,都放置在一个主控计算机上(PDC),任何人想要使用计算机时,都需要输入账号和密码,然后又PDC服务器辨识后,才会给予适当的权限.也就是说不同身份具有不同的计算机资源权限.
samba服务器的基础设定
samba所需软件及其软件结构
1.samba
2.samba - client
3.samba - common
相关配置文件:
- /etc/samba/smb.conf:这是samba的主要配置文件.主要的设定项目是服务器的相关设定(global),以及分享目录的相关设定
- /etc/samba/smb.conf:早期的NetBIOS Name需要额外设定,因此需要这个Imhost的NetBIOS Name对应的IP档.目前samba预设会使用hostname作为NetBIOS Name.
- /etc/sysconfig/samba:启动smbd,nmbd时,你还要加入的相关服务参数
- /etc/samba/smbusers:由于Windows和Linux在管理员和访客的账号名称不一致,可用它来设置两者之间的账号关系
- /var/lib/samba/private/{passdb.tdb,secrets.tdb}:管理samba的用户账号/密码时,会用到的数据库档案.
常用脚本文件:
- /usr/bin/smbstatus:服务器功能,可以列出目前samba的联机状况
- /usr/bin/{smbpasswd,pdbedit}:服务器功能,在管理samba的用户账号密码时,建议使用新的pdbedit指令来管理用户数据.
- /usr/bin/testparm:服务器功能,检查配置文件smb.conf的语法是否正确.
- /sbin/mount.cifs:客户端功能,通过mount.cifs来将远程主机分享的档案和目录挂载到自己的Linux主机上.
- /usr/bin/smbtree:客户端功能,使用smbclient来查看其他计算机所分享出来的目录和装置
smb.conf的常用设定项目
1.服务器整体设定方面:在smb.conf当中设定好工作组,NetBIOS主机名,密码的使用状态
2.规划准备分享的目录参数:在smb.conf内设定好预计要分享的目录或装置以及可供使用的账号数据
3.建立所需的文件系统
4.建立可用samba的账号
5.启动服务:启动samba的smbd,nmbd服务
smb.conf内的可用变量功能
- %S:取代目前的设定项目值,所谓的项目设定值就是在分享里面的内容,%S的用意就是替换掉目前[ ]里面的内容
- %m:代表Client端的NetBIOS主机名
- %M:代表Client端的Internet主机名(hostname)
- %L:代表samba主机的NetBIOS主机名
- %H:代表用户的家目录
- %U:代表目前登入的使用者的名称
- %g:代表登入的使用者的组名
- %h:代表目前这部samba主机的hostname
- %I:代表Client的IP
- %T:代表目前的日期和时间
不需要密码的分享(security = share,纯测试)
1.设定 smb.conf配置文件
2.用testparm查阅smb.conf的语法设定正确性
3.服务器端的服务启动与皋口观察
4.假设自我为客户端的检验
需账号密码才可登入的分享(security = user)
1.设定smb.conf配置文件与目录权限相关之设定
2.设定可使用samba的用户账号与密码
3.重新启动samba并进行自我测试
安全性
SELinux
家目录无法mount,分享目录也需要做相应改变防火墙:利用iptables,hosts allow来管理
建议使用hosts allow
samba 客户端软件功能
1.smbclient:查询网芳分享的资源,以及使用类似FTP的方式上传下载网芳
2.mount.cifs:直接挂载网芳成为网络驱动机
3.nmblookup:查询NetBIOS Name与IP及其他相关信息
4.smbtree:网络上的芳邻浏览器显示模式
5.smbstatus:观察samba的状态
服务器简单维护与管理
1.在设定samba的时候,如果是以单一主机的工作组(workgroup)的方式来进行smb.conf的设定时,无法成功的设定起来,务必查看登录档.
- log file = /var/log/samba/log.%m
2.如果samba已经完成启动了,但是偏偏老是无法成功,又无法查出问题时,请先关闭samba一阵子,再重新启动
- /etc/init.d/smb stop
3.权限问题
4.让使用者修改samba密码同时同步更新 /etc/shadow 密码