文件服务器之:SAMBA 服务器,稳定可靠,没有连接数限制

SAMBA使用的是NetBIOS通讯协议,NetBIOS是无法跨路由的
透过NetBIOS over TCP/IP的技术,可以跨路由使用SAMBA服务器所提供的功能

SAMBA联机模式:
1、peer/peer(Workgroup model,对等模式):适合小型的网域,不经常进行档案数据分享的网络环境,或者每个使用者都拥有该计算机的拥有权的环境
2、domain model(主控模式):DC服务器控管整个网域里面的各个机器的账号与密码的信息

Samba所需软件及其软件结构:
samba :这个软件主要提供了SMB服务器所需的各项服务程序(smbd及nmbd)的文件档、以及其他与SAMBA相关的logrotate配置文件即开机默认选项档案等;
samba-client:这个软件提供了当Linux做为SAMBAClient端时,所需要的工具指令,例如:挂载SAMBA文件格式的mount.cifs、取得类似网络邻居相关树形图的smbtree等
samba-common:提供的是服务器与客户端都会使用到的数据,包括SAMBA的主要配置文件(smb.conf)、语法检验指令(testparm)等等
SAMBA相关的配置文件:
/etc/samba/smb.conf: Samba的主要配置文件
/etc/samba/lmhosts :早期的NetBIOS name需额外设定,这个档案不设定也无所谓
/etc/sysconfig/samba :提供启动smbd,nmbd时,还想要加入的相关服务参数
/etc/samba/smbusers :对应windows与linux的账号关系,使用这个档案来设定
/var/lib/samba/private/{passdb.tab,secrets.tdb}:管理Samba的用户账号/密码时,会用到的数据库档案
/usr/share/doc/samba-<版本>:包含了SAMBA的所有相关的技术手册,安装好SAMBA之后就存在了

常见脚本案(可直接执行的):
/usr/sbin/{smbd,nmbd}:服务器功能,就是最重要的权限管理(smbd)以及NetBIOS name 查询(nmbd)两个重要的服务程序;
/usr/bin/{tdbdump,tdbtool}:服务器功能,在Samba3.0以后的版本中,用户的账号与密码参数以及转为使用数据库了,Samba使用的数据库名称为TDB(Trivial DataBase),tdbdump可察看数据库的内容,tdbtool可以进入数据库操作接口直接手动修改帐密参数,得要安装tdb-tools这个软件才行
/usr/bin/smbstatus:服务器功能,可以列出目前Samba的联机状况,包括每一条Samba联机的PID,分享的资源,使用的用户来源等
/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 :客户端功能,使用这个指令来查看其他计算机所分享出来的目录与装置
/usr/bin/nmblookup:客户端功能,类似nslookup,重点在查出NetBIOS name
/usr/bin/smbtree:客户端功能,能够查到工作组与计算机名称的树状目录分布图

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]全领域作为设定的依据;
分享的信息:以个别的目录名称为依据
在smb.conf中,# 与 ;都是批注符号;大小写是没有关系的,因为Windows没区分大小写

设定完smb.conf后,使用testparm查阅smb.conf的语法设定正确性,后在启动smb服务
指令:testparm 或 testparm -v
-v:查阅完整的参数设定,连同默认值(默认隐藏了)也会显示出来;显示的信息中,中括号[]前出现信息,则有错误

Samba预设会启动多个端口,包括数据传输的TCP端口139,445;以及进行NetBIOS名称解析之类工作的UDP端口(137,138)

假设本机为客户端的检验(默认为lo接口):安装samba-client 客户端软件,用yum或rpm
指令smbclient:
smbclient -L [//主机或IP] [-U 使用者账号
选项与参数:
-L:仅查阅后面接的主机所提供分享的目录资源;
-U:以后面接的这个账号来尝试取得该主机的可使用资源

Samba密码的建立(设置登录samba共享需要密码验证):
Samba使用者账号必须要存在与Linux系统当中(/etc/passwd)
Samba的用户密码档案使用TDB数据库格式,默认档案在/var/lib/samba/private内
密码必须要加密(默认就是加密的);每个可使用samba的使用者均拥有自己的家目录
共享群组的权限通常是2770,含有SGID的特殊旗标功能

使用pdbedit 指令功能(对samba软件使用的指令):
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 有关
-u:后面接的是username,即Linux中已有的账号名称

修改密码使用smbpasswd 指令: smbpasswd 用户名

故:samba新增使用者账号,若账号在Linux系统中不存在,则需要使用useradd再以pdbedit -a 去新增
扩充samba分享的目录与能够登入的使用者时,这样做:
1、编辑smb.conf来开放其他的目录资源,并且特别注意Linux在该目录下的权限,使用chown
与chmod ;
2、利用pdbedit来新增其他可用的samba账号,先增加Linux系统账号,以useradd增加;
3、进行完任何设定,先以testparm进行确认,之后重新启动smb服务
samba配置要生效:smb和nmb服务都要启动

1、设定成为samba的打印机服务器(CUPS(Common Unix Printing System)系统):
使用lsusb指令查看USB接口的情况,可查看USB接口打印机是否连接
打印服务cups默认启动631端口
打印测试指令: echo "HeLLO printer" > /dev/usb/lp0 ;lp0是打印机在Linux中的接口名
打印服务cups配置文件: /etc/cups/cupsd.conf
1、修改监听端口,第18行,修改其中的localhost为需要开放的IP或网段
2、第28行左右,<Location />区域新增能够让内网其他IP浏览者进行CUPS的浏览与管控
3、在33行左右,<Location /admin> 新增能够管理CUPS者
设定完重启打印服务,cups
浏览器里输入https://打印服务器IP:631 即可打开打印服务器设置界面,Administrator选项登录root账号才有权限设置打印服务器共享打印机;如果浏览器提示不安全,则点选高级,增加例外即可

2、在smb.conf配置文件中加入打印机的支持,默认是支持的,设定全局global与printers区域
3、让Samba主动提供驱动程序给Windows用户使用
Postscript的打印格式,安装支持Windows打印机驱动程序的cups
目录 /var/lib/samba/drivers* 下的文件夹是samba分享的各个操作系统的驱动程序文件,可放置在里面
4、在smb.conf里面增加新的分享数据,数据必须是 [print$] 名称才行
预设的cups仅有root能管理
如果自己设置了打印驱动程序分享目录,注意selinux,使用chcon修改
5、由cups告知samba,cups可提供驱动程序,使用指令:
cupsaddsmb [-H SAMBA服务器名] [-h CUPS服务器名] -a -v [-U 使用者账号]
选项与参数:
-H:后续接的是samba服务器名,本机直接用localhost即可;
-h:后续接的是cups的服务器名,本机直接用localhost即可;
-a:自动搜寻出所有可用的cups打印机;
-v:列出更多的信息;
-U:打印机管理员
例如:cupsaddsmb -H localhost -U root -a -v 将打印驱动程序挂上samba
6、重启cups即samba服务
7、如果打印错数据,清除数据的方法
指令: lpstat -a 列出所有可用的打印机状态
lpq 查询目前默认打印机的工作情况
lprm - 删除所有的打印工作项目

Samba安全性的议题与管理:selinux及防火墙iptables
smbd和nmbd并不支持TCP Wrappers,故只能透过iptables来控制
内建的samba设定:
smb.conf中的hosts allow即hosts deny 两个参数,通常只用使用hosts allow即可
例如:只想让本机、192.168.100.254、192.168.1.0/24使用samba,则编辑smb.conf全局参数(global)
hosts allow = 127. 192.168.100.254 192.168.1
网段只需要写主机位即可
建议samba防火墙设置使用smb.conf配置文件global参数的hosts allow和hosts deny处理

利用Quota限制samba用户的磁盘使用
samba服务器挂载中文扇区:
mount -t 文件系统格式 -o iocharset=big5,codepage=950 /dev/sa[a-p][1-15] 挂载点
iocharset指的是本机的语言编码方式;codepage则与远程软件有关

samba客户端软件功能:
Linux系统可以挂载samba服务器也能挂载windows提供的网络邻居(共享),以smbclient指令观察,再以mount挂载文件系统
smbclient查询功能: smbclient -L //[IP|hostname] [-U username]
利用类似FTP的方式登入远程主机:意思是使用某个账号来直接登入某部主机的某个共享资源
smbclient '//[IP|hostname]/资源名称' [-U username]
例如:smbclient '//192.168.100.254/smb1' -U smb1 输入密码后即可进入 smb: \> 下,可以使用常用的ftp指令来进行数据传输,输入 ?可查看所有指令

mount.cifs:直接挂载邻居成为网络驱动器
早期的samba主要是提供smbmount或mount.smbfs指令来挂载,现已被mount.cifs取代

mount.cifs语法:
mount -t cifs //IP/分享资源名 /挂载点 [-o options]
选项与参数:
-o :后面接的参数(options)常用如下:
username=你的登录账号,例如 username=smb1
password=你的登入密码,需要与username参数对应
iocharset=本机的语系编码方式,如big5或utf8等等
codepage=远程主机的语系编码方式,例如繁体中文为cp950

nmblookup :查询NetBIOS name与IP及其他相关信息
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

smbtree:网络上的邻居的浏览器显示模式
smbtree [-bDS]
选项与参数:
-b :以广播的方式取代主要浏览器的查询
-D:仅列出工作组,不包括分享的资源
-S:列出工作组与该工作组下的计算机名称(NetBIOS)不包括各项资源目录

smbstatus:观察SAMBA的状态;是服务器的相关功能,必须安装samba才能使用此指令
smbstatus [-pS] [-u username]
选项与参数:
-p:列出已经使用samba联机的程序PID;
-S:列出已经被使用的资源共享状态;
-u:只列出某个用户相关的分享数据

猜你喜欢

转载自blog.51cto.com/3134965/2131906