Linux之Samba基础知识及应用
一、Samba简介
Server Message Block的缩写是SMB,即服务器消息块,SMB主要是作为Microsoft的网络通讯协议。Samba将SMB通信协议应用到了Linux系统上。其功能特性可实现:WINS和DNS服务、网络浏览服务、Linux和Windows域之间的认证和授权、UNICODE字符集和域名映射、满足CIFS协议的UNIX共享等
SMB是基于客户机/服务器型的协议,故一台Samba服务器既可当文件共享服务器,也可充Samba的客户端。Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。
SMB工作原理大致分为:
1、协议协商:客户端在访问Samba服务器时,首先由客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器在接收到请求信息后开始响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回oXFFFFH信息,结束通信。
2、建立连接:当SMB协议版本确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX请应答数据报来允许或拒绝本次连接。
3、访问共享资源:当客户端和服务器完成了协商和认证之后,它会发送一个Tcon或SMB TconX数据报并列出它想访问网络资源的名称,之后服务器会发送一个SMB TconX应答数据报以表示此次连接是否被接受或拒绝。
4、断开连接:连接到相应资源,SMB客户端就能够open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。
二、安装Samba服务
#rpm -qa | grep samba
#yum install samba samba-client
注:Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm �Cv命令可以详细的列出smb.conf支持的配置参数
三、简要说明Samba服务配置文件
Samba的主配置文件位置:/etc/samba/smb.conf
配置文件分两部分:
1、Global Settings (55至245行):该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
2、Share Definitions (246-尾行):该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。
以下为全局参数和共享参数说明:
#==================Global Settings ===================
全局参数---[global]
config file = /usr/local/samba/lib/smb.conf.%m
##config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台 samba服务器模拟多台不同配置的服务器。
workgroup = WORKGROUP
##设定 Samba Server 所要加入的工作组或者域。
server string = Samba Server Version %v
##设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
netbios name = smbserver
##设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
##设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1
##表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
hosts allow=172.17.2.0/255.255.0.0
##表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
##表示容许来自M1和M2两台计算机连接
hosts allow=@pega
##表示容许来自pega网域的所有计算机连接
max connections = 0
##max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
deadtime = 0
##deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
time server = yes/n
##time server用来设置让nmdb成为windows客户端的时间服务器。
log file = /var/log/samba/log.%m
##设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件
max log size = 50
##设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。
security = user
##设置用户访问Samba Server的验证方式,一共有四种验证方式。
share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
domain:域安全级别,使用主域控制器(PDC)来完成认证。
passdb backend = tdbsam
##passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写:
smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库 可以使用smbpasswd �Ca来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。
pdbedit �Ca username:新建Samba账户。
pdbedit �Cx username:删除Samba账户。
pdbedit �CL:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit �CLv:列出Samba用户列表的详细信息。
pdbedit �Cc “[D]” �Cu username:暂停该Samba用户的账号。
pdbedit �Cc “[]” �Cu username:恢复该Samba用户的账号。
ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
encrypt passwords = yes/no
##是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
smb passwd file = /etc/samba/smbpasswd
##用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。
username map = /etc/samba/smbusers
##用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。
guest account = nobody
##用来设置guest用户名。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
##用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
domain master = yes/no
##设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
local master = yes/no
##local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。
preferred master = yes/no
##设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
os level = 200
##设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。
domain logons = yes/no
##设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
logon script = %u.bat
##当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。
wins support = yes/no
##设置samba服务器是否提供wins服务。
wins server = wins服务器IP地址
##设置Samba Server是否使用别的wins服务器提供wins服务。
wins proxy = yes/no
##设置Samba Server是否开启wins代理服务。
dns proxy = yes/no
##设置Samba Server是否开启dns代理服务。
load printers = yes/no
##设置是否在启动Samba时就共享打印机。
printcap name = cups
##设置共享打印机的配置文件。
printing = cups
##设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
共享参数
#================== Share Definitions ==================
[共享名]
comment = 任意字符串
##comment是对该共享的描述,可以是任意字符串。
path = 共享目录路径
##path用来指定共享目录的路径。
browseable = yes/no
##browseable用来指定该共享是否可以浏览。
writable = yes/no
##writable用来指定该共享路径是否可写。
available = yes/no
##available用来指定该共享资源是否可用。
admin users = 该共享的管理者
##admin users用来指定该共享的管理员(对该共享具有完全控制权限)。
valid users = 允许访问该共享的用户
##valid users用来指定允许访问该共享资源的用户。
invalid users = 禁止访问该共享的用户
##invalid users用来指定不允许访问该共享资源的用户。如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
write list = 允许写入该共享的用户
##write list用来指定可以在该共享下写入文件的用户。
public = yes/no
##public用来指定该共享是否允许guest账户访问。
guest ok = yes/no
#意义同“public”。
------几个特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no
[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes
四、应用实践
要求:
1.建立samba共享,共享目录为/data;
2.共享名为shared,工作组为magedu;
3.添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;
4.添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;
5.此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;
6.此samba共享服务允许来自于192.168.1.0/24(可根据自己的网络情况来设置)网络的主机访问
配置过程:
1.先创建相关的用户(系统用户和smb用户)、组、密码
#groupadd develop
#useradd -G develop gentoo
#useradd -G develop centos
#useradd ubuntu
#passwd gentoo
#passwd centos
#pas ubuntu
#smbpasswd -a gentoo
#smbpasswd -a centos
#smbpasswd -a ubuntu
注意:如果smbpasswd设置用户密码不加参数-a,会出现以下错误
[root@hc01 ~]# smbpasswd ubuntu
New SMB password:
Retype new SMB password:
Failed to find entry for user ubuntu.
2.创建根下data目录,设置权限可读可写
[root@hc01 ~]# mkdir /data
[root@hc01 ~]# chmod 777 /data/
3.编辑smb.conf配置文件,共享名为data的共享名为shared,develop可写,其他都只读
# vim /etc/samba/smb.conf
//添加以下内容
hosts allow = 192.168.1 //80行
[shared] //共享目录
comment = shared
path = /data
browseable = yes
guest ok = no
writable = no
write list = +develop
4.启动smb服务
service smb start
5.用户centos 和ubuntu用户测试