RHEL5中搭建samba服务器
一、samba的作用
简而言之,能够实现windows和linux之间的资源共享和NFS一样,sanba和ftp的区别就是:用户可以直接在本地进行操作,而不必下载之后才能进行操作。
二、samba相关协议
大家都知道NFS是构建在RPC Server之上的,与之类似,Samba是建立在NetBIOS(network basic input/output system)之上的。netbios有IBM开发,作用是互联局域网中的计算机,由于并非针对大型网络设计,所以netbios并不能跨路由,但是它在局域网中的应用是较为有效和便利的。windows使用了这个协议来互连局域网中的用户,同样samba也建立在此协议上。
由于netbios不可以跨越路由,那么是否基于此协议的服务器也受到服务器这样的限制呢?答案是不会。这里可以使用netbios over tcp/ip 来使得不同网络的服务器和客户端之间沟通。虽然netbios局限于局域网,但是凭借tcp/ip的传送功能,可以使得不同网络的主机具有像在局域网内一样的沟通的能力。这样,samba可以在互联网范围内进行与不同主机的沟通,尽管samba的常见应用范围是在局域网络之内。
三、samba的守护进程
在运行着netbios的主机之间的通信,需要通过他们的netbios名称来定位对方。通信流程如下:首先互通的主机需要在一个工作组(workgroup)内,然后通过netbios名称识别找到对方主机,接下来就是进行连接及身份和权限方面的验证。
samba有两个守护进程,分别做netbios名称解析和权限验证。
nmbd:此守护进程用于对工作组和netbios名称的判断和解析。它监听udp的137和138端口。 smbd:此守护进程管理着服务器上的文件、目录和打印机。资料传输时使用tpc协议,他监听139和445端口。 |
四、Samba的安装
在RHEL5光盘上,有5个Samba服务器/客户端相关的包,其中,3个事需要安装的,另外两个图形化配置工具可选。下面的列表介绍了这些RPM包得作用。
samba-3*rpm 包含samba主要的程序、文档及脚本等。 samba-common*rpm 包含samba的配置程序及语法检查程序等。 samba-client samba客户端所需要的程序。 samba-swat*rpm samba的图形化配置工具,需要xinetd的支持。 system-config-samba*rpm samba的图形化配置工具。 |
手动启动samba服务:
service smb start
chkconfig smb on
现在,samba的安装完成了,并且已经顺利启动。
在iptable设定这里,需要打开udp的137和129端口,以及tcp的139和445端口.
如果系统开启了SElinux,那么需要执行下面的命令,让samba可以正常访问/home目录.
setsebool –P samba_enable_home_dirs=1
此外,如果只需要开放samba的只读共享,那么需要执行:
setsebool –P samba_export_all_ro=1
如果需要开放samba的文件读写功能,则需要执行:
setsebool –P samba_export_all_rw=1
五、samba相关文件介绍
下面的列表介绍了samba相关文件。
/usr/sbin/smbd samba主守护进程 /usr/sbin/nmbd netbios解析守护进程 /etc/samba/smb.conf samba主配置文件 /usr/bin/smbclient samba客户端程序,界面类似与ftp程序 /usr/bin/testparm samba主配置文件测试程序 /etc/rc.d/init.d/smb samba启动/停止/重载脚本 /sbin/mount.cifs 挂在samba文件系统的程序,它取代了早期的samba中的smbmount. /user/bin/smbpasswd 设定samba用户的密码 /usr/bin/smbprint 此脚本文件可以将要打印的内容打印到samba主机连接的打印机上。 /usr/bin/smbstatus 列出samba的连接情况 |
六、samba主配置文件smb.conf
在/etc/samba/smb.conf中,“#”号和“;”号都是注释符号。下面讲解smb.conf中的常用参数:
1、全局设定 [global] 全局设定的起始标签 2、网络相关设定 workgroup = MYGROUP 工作组名称 server string = Samba Server Version %v 服务器说明,这里显示了samba版本信息 ; netbios name = MYSERVER 主机的netbios名称,每一台主机的netbios名称是不同的 ; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 interfaces参数可以让samba使用多个网卡或网络界面,使用这个参数的时候不要遗漏了localhost界面。 ; hosts allow = 127. 192.168.12. 192.168.13. 主机允许列表。 3、登录设定 # logs split per machine ; log file = /var/log/samba/%m.log 日志文件路径和名称设定 # max 50KB per log file, then rotate ; max log size = 50 如果日志到了50KB,则重新记录。 4、security=user 这里的security参数可以设定为4种:user、server、domain、和share。下面分别说明这4种安全级别的区别。 user:使用samba自身的数据库验证用户。 share:无需共享密码。任何人都可以访问samba资源。 server:在此级别下,设分验证由windows主机或samba主机负载。 domian:身份验证由另一台windows主机负责。 passdb backend = tdsam passdb backend的参数设定有3种:smbpasswd、tdbsam、和ldapsam。默认设定为tdsam。 smbpasswd:使用smbpasswd给系统用户设定samba密码。smbpasswd文件在/etc/samba目录下。 tdbsam:使用数据库文件passdb.tdb,该文件在/etc/samba下。如果使用smbpasswd设定samba用户的话,则用户必须为系统用户。同时可以使用pdbedit命令建立samba账户。 ldapasam:使用ldap方式验证用户。 5、与成员选项 ; realm = MY_REALM 指定Active Directory ; password server = 指定密码验证服务器。 6、域控制器选项
; domain master = yes 设定samba服务器是否成为网域主浏览器 ; domain logons = yes 设定samba服务器是否成为域控制器 # the login script name depends on the machine name ; logon script = %m.bat 如果用户从windows客户机登录,则执行samba提供的登录文件。 # the login script name depends on the unix user used ; logon script = %u.bat ; logon path = \\%L\Profiles\%u 用户配置文件存放位置,%L表示服务器名,%u表示用户名 # disables profiles support by specifing an empty path ; logon path =
; add user script = /usr/sbin/useradd "%u" -n -g users 添加用户时调用系统的命令。这里,%u是用户名,-n表示不创建和用户名同名的组(在RHEL5中添加用户,默认会创建一个与用户名同名的组),-g users表示假如users组。 ; add group script = /usr/sbin/groupadd "%g" 添加组时调用系统的命令。%g表示组名。 ; add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u" 添加机器时调用系统的命令。-c为注释,-s为shell,-d为家目录,-M表示不创建用户家目录。 ; delete user script = /usr/sbin/userdel "%u" 删除用户时调用系统的命令。
; delete user from group script = /usr/sbin/userdel "%u" "%g" 从组中删除用户时调用系统的命令。 ; delete group script = /usr/sbin/groupdel "%g" 删除组时调用系统的命令。 7、浏览器控制选项。 ; local master = no samba服务器不作为主浏览器。在windows网络中有一台机器保存浏览表,这台机器由网络中的机器进行竞争得到。当local master设定为Yes的时候,则samba服务器参加浏览器竞争。 ; os level = 33 如果让samba服务器参与网络中浏览器的竞争,则这个选项可以让samba在竞争中胜出。os level的值可以是0~255,windows NT 的os level为33,windows 95/98为1,windows 2000为64,。如果os level为0,则samba服务器将不参与浏览器选择。为了让samba成为主域控制器(Primary Domain Controller,PDC),则os level的值需要设置的大一些。 ; preferred master = yes 当samba服务器工作量不足时,此选项将服务器作为优先选择的主浏览器。 8、名称解析 ; wins support = yes 支持winds解析 ; wins server = w.x.y.z wins服务器地址 ; wins proxy = yes 为了兼容比较旧的windows系统,需要打开这个选项,使这些机器也能访问wins ; dns proxy = yes DNS支持。如果计算机不在wins中,则由dns来完成解析。 9、打印选项 load printers = yes 自动加载打印机列表 cups options = raw 向打印机cpus驱动传递的参数。
; printcap name = /etc/printcap 选择一个Printcap文件 #obtain list of printers automatically on SystemV ; printcap name = lpstat ; printing = cups 使用cpus驱动。 10、文件系统选项。 ; map archive = no 文件的归档属性。 ; map hidden = no 文件的隐藏属性。 ; map read only = no 文件的只读属性。 ; map system = no 文件的系统属性。 ; store dos attributes = yes 可存储DOS文件属性。 11、共享设定部分 (1)家目录共享 [homes] 家目录设定的起始标签 comment = Home Directories 注释 browseable = no 是否可以被浏览 writable = yes 是否可写 ; valid users = %S 具有合法身份的用户登录时,家目录变更为自己的家目录。 ; valid users = MYDOMAIN\%S (2)共享打印机 [printers] 打印机设定起始标签 comment = All Printers 注释 path = /var/spool/samba 打印队列路径 browseable = no 是否可被浏览 guest ok = no 是否允许guest访问 writable = no 是否可写 printable = yes 是否可打印 (3)域登录目录设定 ; [netlogon] 域登录目录的起始标签。 ; comment = Network Logon Service 注释。 ; path = /var/lib/samba/netlogon 配置文件所在路径。 ; guest ok = yes 是否允许guest登录。 ; writable = no 是否可写 ; share modes = no 共享模式设定为关闭 (4)本地配置文件设定 ; [Profiles] ; path = /var/lib/samba/profiles ; browseable = no 是否可被浏览 ; guest ok = yes 是否允许guest访问。 (5)公共目录共享 ; [public] ; comment = Public Stuff
; path = /home/samba 公共目录路径。 ; public = yes 配置为公共使用。 ; writable = yes 该目录是否可写。 ; printable = no 是否可以打印。 ; write list = +staff 该目录除了staff的组员可以拥有读写权限之外,其它用户仅只读。 |
七、samba作为独立服务器
一***立服务器可以是一台工作组服务器,或者在工作组环境下的成员之一。独立服务器不是域控制器并且也不属于某个域。下面将给出两个实例来讲解samba作为独立服务器的配置。
1、 匿名用户可访问目录和打印机
[global]
workgroup=MYGROUP
server string=Samba Server Version %v
security=share
[test]
comment=Directory for sharing
path=/tmp/test
read only=yes
guest only=yes
[printers]
comment=All Printers
path=/var/spool/samba
browseable=yes
guest ok=yes
printables=yes
在这个例子中,匿名用户可以访问/tmp/test目录,并且拥有只读权限;同时匿名用户可以使用samba打印机。这里的security使用了share,也就是共享的级别。客户端访问目录的权限由两处决定:目录本身的权限和samba配置文件中设定的权限。所以在设定/tmp/test目录时,需要确认该目录本身的权限至少应为755。
2、 访问目录和打印机需要身份验证
[global]
workgroup=MYGROUP
server string=Samba Server Version %v
security=user
[homes]
comment=Home Directories
valid users=%S
read only = no
browseable=no
[test]
comment=Directory for testing
path=/tmp/test
force user=leon
force group=leon
guest ok=no
read only=no
[printers]
comment=All Printers
path=/var/spool/samba
browseables=yes
guest ok=no
printable=yes
此例中,访问/tmp/test目录需要身份验证。并且因为有force user和force group设定,所有具有合法的身份账号登陆之后,在/tmp/test下创建的文件的用户身份为leon,用户组为Leon。在这个配置文件中,用户访问热河资源均需要合法账号,匿名用户将不能访问任何资源。
3、 创建samba用户账号
samba的用户和Linux系统用户有一定的区别,但是首先samba用户必须是系统用户,其次samba用户的密码与用户的系统密码无关,该密码由damba软件包中提供的工具设定。
假设在linux系统中有一个用户名为leon,那么使用下面的命令来设定密码:
pdbedit –au leon
pdbedit是一个用来管理SAM数据库的工具。它的常用参数解释如下:
-L 列出所有在用户数据库中的用户 -v 显示详细信息。 -u 这个参数后指定用户名,在打印/增加/删除用户时可以用到 -a 增加用户。一般与-u一起使用 -r 修改用户。一般与-u一起使用 -x 删除用户 |
设定密码后,samba用户就可以进行身份验证了。
八、samba客户端的使用
1、查看samba服务器共享情况
在Linux系统中,如果 samba-client软件包,那么可以使用smbclient命令来查看samba服务器的共享情况:
smbclient –L 服务器名 –U Samba用户名
如果服务器为share共享级别,那么无需-U参数;如果服务器需要身份验证,那么需要-U参数及合法的samba用户账号登录。
在Gnome图形界面下,可以用文件管理器Nautius来查看samba服务器的共享。在Nautilus的地址栏输入如下命令。
smb://samba服务器主机或IP
可以看到服务器上的共享情况,如图所示1所示,如果访问需要身份验证的资源,Nautilus会提示输入用户信息,如图2所示。
图1
图2
2、使用samba共享资源
前面提到了smbclient命令,这个命令除了可以查看samba服务器的共享资源列表之外,还可以对共享目录和资源进行操作。smbclient提供了类似于命令行ftp工具的界面,假设samba服务器“baby.com”上有一个工项目目录为test,leon为samba用户,那么执行如下命令:
smbclient –L //baby.com/test –U leon
之后会要求输入密码,在身份验证之后,就可以对共享目录进行操作了。
此外,使用mount命令也可以将samba共享目录直接挂载到本地目录下,然后可以像操作本地文件那样去操作samba共享资源。命令格式如下:
mount –t cifs –o username=samba用户名 //samba主机名或者ip/共享目录/本地挂载点
如果需要访问上例中的资源,则可以执行:
mount –t cifs –o username=leon //baby.com/test /mnt
这样,test目录的内容就被挂载在/mnt目录下了。与卸载本地分区一样,使用umount命令可以卸载samba共享目录。
3、客户端为windows系统
在windows中,可以在资源管理器输入来访问samba资源。使用”net use”命令可以查看连接情况。如果需要删除已存在的ipc连接,可以使用”net use\\samba主机名或IP\ipc$/delete”命令。这些操作与访问windows文件服务器资源的操作是一样的。