> CentOS > CentOS服务器 >

Cetnos 文件服务器samba配置案例

1. Samba协议基础
自从出现NetBIOS协议,Microsoft用他实现了网络文件/打印服务,即大家熟知的打印和共享服务,他是基于SMB(Server Message Block)协议,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。因此他将原有的几乎没有多少技术文件的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将他和NetBIOS相脱离,试图使他成为Internet上的一个标准协议。
为了让视窗系统和UNIX主机实现资源共享,可行的一种方法就是在UNIX计算机中安装支持SMB/CIFS协议的软件,这样视窗系统客户就不必更改设置,同对待视窗系统主机相同,能用UNIX计算机上的资源了。Samba是用来实现SMB的一种软件,他的工作原理是让NetBIOS(Network Basic Input/Output System)和SMB这两个协议运行于TCP/IP协议之上,并且使用视窗系统的NetBEUI(Net BIOS Enhanced User Interface)协议,让类UNIX主机能在网络邻居上被视窗系统主机看到。他的功能有:
n 实现Linux主机之间和Linux主机和视窗系统主机之间的文件共享
n 实现Linux主机之间和Linux主机和视窗系统主机之间的打印机共享
2. Samba的设置
(1) 安装Samba
检查是否已安装了Samba:
#rpm -qa | grep samba 
samba-swat-3.0.7-1.3E.1 --Samba的web管理工具,端口为901
samba-3.0.7-1.3E.1 --Samba的核心文件
redhat-config-samba-1.0.16-2 --Samba的可视化设置工具
samba-common-3.0.7-1.3E.1 --Samba通用文件
samba-client-3.0.7-1.3E.1 --Samba客户端工具
如果没有安装,则能通过光盘或NFS(后面讲解)安装。安装文件的具体光盘位置,请查看光盘下RedHat/RPMS下的内容。安装的方法如下:
可使用 yum -y install samba 或#rpm -ivh *samba*.rpm --能一次完成所有安装

或参照centOS下yum安装配置samba教程:

(2) 启动Samba服务器和web管理服务
#chkconfig smb on --将服务添加到服务管理器中
#service smb start --启动共享服务,但修改后仍需要重启动
#chkconfig swat on --取消swat在xinetd服务中的不启动限制
#service xinetd restart --通过重新启动xinetd服务启动swat服务
(3) 设置Samba
Samba的设置文件为/etc/samba/smb.conf,该文件的初始内容非常多,其实非常多都是注释,但这些注释往往对我们的后续设置非常有帮助,建议读者仔细阅读。
Samba的设置能分为三部分:全局部分(由[global]标识)、打印机部分(由[printers]标识)和共享部分(由[homes]标识和自己设定的其他标识)。全局部分的设置影响到其他所有部分,打印机部分用于设置打印机的共享,而其余部分则是提供一般共享的部分。所以,Samba设置的一般方法就非常明确了,设置global部分,设置全局参数,设置打印机部分则能实现打印机共享,其他共享部分的设置则是提供特别共享服务,设置[homes]部分能让本地用户的目录也加入共享。
a) 全局设置
workgroup = syd168Group
设置该Samba服务器所在的工作组或域(如下面的security=domain的话)。
server string = syd168’s Samba Server %v
设定Samba服务器的显示名。还能包含特定变量。常用的包括:
变量 含 义
%S 当前服务名(如果有的话)
%P 当前服务的根目录(如果有的话)
%u 当前服务的用户名(如果有的话)
%U 当前对话的用户名
%H 当前服务的用户的Home目录
%v Samba服务的版本号
%h 运行Samba服务机器的主机名
%m 客户机的NETBIOS名称
%L 服务器的NETBIOS名称
%M 客户机的主机名
%I 客户机的IP
%T 当前日期和时间
表2-1
hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .syd164.com
能设置允许访问的网络和主机IP,比如允许192.164.1.0/24和192.164.2.1/32访问,就用hosts allow = 192.164.1. 192.164.2.1 123.0.0.1 注意后面加“.”号,各个项目间用空格隔开,注意要把本机也加进去,否则本地也将无法测试。
printcap name = /etc/printcap 
存放打印机描述信息的文件,一般是/etc/printcap。
load printers = yes|no
设定是否自动共享打印机而不用设置[printers]部分
printing = lprng
定义打印系统的类型,缺省是lprng,可选项有:bsd, sysv, plp, lprng, aix, hpux, qnx。
guest account = guest
定义游客帐号,而且该账号必须已存在于/etc/passwd中,不然他就用缺省的nobody
log file = /var/log/samba/%m.log
定义记录文件的位置LogFileName(一般是用/var/log/samba/%m.log)
max log size =100
定义记录文件的大小size(单位是KB,如果是0的话就不限大小)
security = security_level
定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。他们对应的验证方式:
Ø share:所有用户无需用户名和口令即可访问服务器上的资源。
user:samba的默认设置,在访问共享资源之前必须通过本地用户验证。Ø
Ø Server:验证是通过另一台服务器进行的,如果失败,就退到user级。
Ø domain:验证通过网络上的视窗系统的主域控制器进行。
后面三种安全级都需求“用户”在提供共享的Linux主机上要有帐户。
password server = 
设置验证服务器的服务器名。当security设为server或domain的时候才有必要。
encrypt passwords = yes|no
设置是否对密码进行加密,samba本身有一个密码文件/etc/samba/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,samba直接把这个密码和Linux里的/etc/samba/smbpasswd密码文件进行验证。不过在视窗系统 95 OS/2以后的版本和视窗系统 NT SP3以后的版本缺省都不传送明文密码,要让这些系统能传送明文密码必须在其注册表里更改,比较麻烦,好的方法就是把这里的这个开关设置为yes。
smb passwd file = /etc/samba/smbpasswd
设置存放samba用户密码的文件smbPasswordFile(一般是/etc/samba/smbpasswd)。
ssl CA certFile = sslFile
当samba编译为支持SSL的时候,需要指定SSL的证书的位置(一般在/usr/share/ssl/certs/ca-bundle.crt)。
UNIX password sync = yes|no
passwd program = /usr/bin/passwd %u
passwd chat =*New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
这三项设置能否从视窗系统的应用程式修改UNIX系统的用户密码
username map =/etc/samba/smbusers
指定用户映射文件(一般是/etc/samba/smbusers),当我们在里面指定一行root = administrator admin的时候,当客户机以用户admin或administrator连接时会被当作用户root看待。
include = MachineConfFile
指定对不同机器的连接采用不同的设置文件MachineConfFile(一般为了灵活管理设置为/etc/samba/smb.conf.%m,由于采用了samba的变量,把设置文件和客户机的NETBIOS名称关联起来,能非常容易地控制这些客户机的权限和设置)。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
这个是网络socket方面的一些参数,能实现最佳的文件传输性能。相关的选项更有SO_KEEPALIVE、SO_REUSEADDR、SO_BROADCAST、IPTOS_LOWDELAY、IPTOS_THROUGHPUT、SO_SNDLOWAT(*)、SO_RCVLOWAT(*)等,带*号的要指定数值。本地网络,就只用IPTOS_LOWDELAY,如果是广域网络,就试试IPTOS_THROUGHPUT。
interfaces = interface1 interface2
如果有多个网络接口,就必须在这里指定。如interface = 192.164.12.2/24 192.164.13.2/24
remote browse sync = host(subnet)
这里指定浏览列表同步信息从哪里取得, 如用host(比如192.164.3.25)或整个子网(192.164.1.255)。
remote announce = 192.164.2.255/SERVERS 192.164.4.255/STAFF
指定这些机器向网络宣告自己,从而在“网络邻居”中能看到该机器。
local master = yes|no
这个参数指定nmbd是否试图成为本地主浏览器,默认值是yes,如果设为no则samba服务器就永远都不会成为本地主浏览器。但即使设置了yes,也不等于samba服务器就会成为本地主浏览器。只是参和本地主浏览器选择。
os level = n
n的值是个整数,决定了nmbd是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着nmbd失去浏览选择。如果要nmbd更有机会成为本地主浏览器的话,能设为65。
domain master = yes|no
这个参数让nmbd成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
preferred master = yes|no
这个参数指定nmbd是否是工作组里的主浏览器,如果指定为yes,nmbd在启动的时候就强制一个浏览选择。
preserve case = yes|no
short preserve case = yes|no
指定拷贝DOS文件的时候保持大小写,缺省是no
default case = lower|upper
所有的DOS文件的缺省是大写还是小写
case sensitive = yes|no
大小写敏感,一般是no,不然会出现一些问题。
b) 共享设置:
每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。共享名必须放在[]中,如[homes]。如果一个资源的名字的最后一个字母为$,则这个共享就为隐藏共享,不能直接出目前浏览列表中,而只能通过直接访问这个名字来进行访问。
[homes]段 这是samba共享中比较奇怪的一个段,专门用于提供用户目录共享的。这个段一般不必设置共享资源的路径,其实路径就是每个用户的主目录。当客户机发出服务请求时,首先查找由smb.conf文件的其他设置部分设定的共享服务,如果没有发现,并且设置了homes段,则通过搜索/etc/passwd得到用户的home目录。通过homes段,Samba能得到用户的home目录并使之共享。下面是这个段的最基本的几个设置。
[homes]
comment=Home Directory
browseable=no
writable=yes
其他共享段。其他共享段是提供特别共享的段,每个共享继承[global]中的设置,但如果该段中再次设置了参数,则覆盖[global]中的设置参数。下面是个显示为share1的共享的设置:
===========================共享的建立============================
[share1] --共享名
comment =comment --共享说明
path = /home/grind --共享文件位置
allow hosts = host(subnet) --允许共享访问的设置,同[global]中设置方法
deny hosts = host(subnet) --不允许访问共享的限制,方法同上
writable = yes|no --共享是否能写入
valid users = user(@group) --允许访问的用户和组
invalid users = user(@group) --不允许访问的用户和组
read list = user(@group) --只允许读取的用户和组
write list = user(@group) --总是允许读写的用户和组
admin list = user(@group) --能管理该共享(读写和权限修改等)的用户和组
guest ok = yes|no --是否允许游客访问,即无需密码访问
guest account = nobody --游客访问帐号,必须在/etc/passwd中存在
hide dot files = yes|no --是否不显示隐含文件
create mode = 0755 --新建立的文件的属性,一般是0755
directory mode = 0755 --新建立的目录的属性,一般是0755
sync always = yes|no --对该共享资源进行写操作后是否进行同步操作
case sensitive = yes|no --是否区分大小写,一般选no,不然可能引起错误
force user = grind 
如果一个目录,让guest能写,那么guest就能删除,如果用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。
wide links = yes|no 
上面设置确定是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或目录,如果设置wide links = no将使该连接不可用。
max connections = 100 --同时连接最大数
read only = yes|no --共享为只读方式
===========================共享的建立============================
通过上面的方法,我们能实现多个不同的共享设置,只要各个共享的显示名不同就能了。但如果想把光驱、移动硬盘等“动态”设备共享,就需要注意,这些设备可能不是常“在线”的,所以,需要动态建立共享。下面我们就以光驱的共享为例,看看怎么实现“动态”资源的共享。
===========================光驱的共享===========================
[cdrom]
comment = syd168’s DVDROM
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 -0 iocharset=cp936 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
===========================光驱的共享===========================
这里root preexec指明了连接时用root的身份运行mount命令,而root postexec则指明了断开时用root身份运行umount,有效实现了对光驱的共享。
c) 打印机共享的设置:
==========================打印机的共享===========================
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
==========================打印机的共享===========================
这里printable指明该打印机能打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。printer driver的作用是指明该打印机的类型,这样我们在安装网络打印机的时候能直接自动安装驱动而不必选择。
d) Samba用户管理:
需要注意的是,如果Samba的security设置为user,则将由 Samba服务器负责用户的认证。所有要访问Samba的本地用户帐号必须包含在smb passwd file 参数指定的文件中,默认是/etc/samba/smbpasswd。要将系统用户添加到smbpasswd中,使用smbpaswd命令即可实现,smbpasswd的命令格式如下:
smbpasswd 参数 用户
具体参数见下表:
变量 含 义 举例
-a 添加用户 #smbpasswd -a syd1
-x 删除用户 #smbpasswd -x syd168
-d 禁用帐号 #smbpasswd -d guest
-e 取消禁用 #smbpasswd -e guest
-n 清除密码 #smbpasswd -a syd1
表2-2
上面主要介绍了Samba服务端的设置,一般应用中使用上面的设置就能满足需要了,对于一些不常用的设置就省略了,周详的信息能用man smb.conf参考。
e) Linux 下访问Samba服务
1)列出可共享的网络资源:
smbclient -L IP或NETBIOS名
作用是显示某台提供samba服务的服务器上的共享资源。命令执行效果如下:
#smbclient ?L 172.12.0.3 
该命令的执行结果如下:
========================下面是共享的信息========================
共享名 共享类型 说明
--------- ---- -------
Homes Disk Home Directories
Var Dis var
IPC$ IPC syd168’s samba server v3.0.7-1.3E.1
ADMIN$ IPC syd168’s samba server v3.0.7-1.3E.1
sydlinuxp1 Printer Created by redhat-config-printer 0.2.x
================下面是共享服务器的信息========================
服务器 说明
--------- -------
SYDLINUX syd168’s samba server v3.0.7-1.3E.1
=====================下面是Mast机器的信息=====================
工作组 主服务器
--------- -------
SYD168-RHAS3 SYDLINUX
上面第一段列举了该机器172.12.0.3上面的共享资源,第二段列举了172.12.0.3所在的工作组里面所有提供samba服务的机器,第三段列举了其他工作组提供Browse服务的Master机器信息。
2)使用网络资源:
smbclient //IP或NETBIOS名/共享名 [-U 用户名]
命令执行效果如下:
#smbclient //172.12.0.3/syd1
added interface IP=172.12.0.3 bcast=172.12.251.255 nmask=251.251.0.0
got a positive name query response from 172.12.0.3 (172.12.0.3)
Password:
Domain=[BLUESUN] OS=[视窗系统 1.0] Server=[视窗系统 2000 LAN Manager]
smb: >
接着的操作和ftp的命令相同,用get下载文件,用put上传文件,用help命令查看帮助。
另一种使用共享的方法就是将共享挂载在文件系统下,象访问本地目录相同访问。挂载的方法如下:
smbmount //IP或NETBIOS名/共享名 /本地挂接点 [-o option]
常用的option有username=用户名>,password=密码>,guest(指定为用guest访问,不用提供密码,但username=guest也会需求输入密码),ro(有时候为了系统安全要指定为只读模式),rw为可读写,如有多个option,之间用逗号隔开。
或能用如下命令实现同样的功能:
mount -t smbfs [-o option] //IP或NETBIOS名/共享名 /本地挂接点
例子如下:
#smbmount /172.12.0.3/syd1 /mnt/test1 -o guest 
或 
#mount -t smbfs -o guest iocharset=cp936 //172.12.0.3/syd1 /mnt/test1
然后就能通过访问/test来使用网络上的资源了。
如果不再需要,能简单地使用如下的命令卸载连接:
smbumount /mnt/test1 或 umount /mnt/test1
f) 视窗系统下访问Linux的共享
要在视窗系统下访问Linux中提供的共享,和使用一般的视窗系统共享相同,能有多种方法:
1) 在视窗系统搜索Linux服务器
2) 在使用视窗系统提供的网络邻居功能
3) 在地址栏输入//samba服务器IP/共享名

 

(samba)配置案例

一、环境

1、 企业组织结构:

其他部:                                         网段:192.168.1.0/24

设计部:部门经理davidxu  — 员工 tomyang         网段:192.168.2.0/24

财务部:部门经理mikeliu  — 员工 janeli            网段:192.168.3.0/24

 

2、 网络环境

网段:192.168.32.0/24

文件服务器:192.168.32.31

 

3、 权限要求:

l  财务部和设计部所有客户端,但公用机(192.168.1.99)除外,可以使用该文件服务器

l  设计部所有客户端可以使用文件服务器的光驱

l  需要一个存放内部资料的目录,所有用户只可读其内容

l  每个 部门有一个需要一个存放只能的公用目录,只允许该部门员工可见/可读/可写

l  每个员工有一个自己的目录,除自己可读/可写外,只有该部门经理可读

l  部门经理每位可存放10G文件,设计部每位员工可存放15G文件,财务部每位员工可存放5G文件

 

二、案例实施

1、 软件安装

[root@station1 ~]#yum install samba.i386

 

2、 磁盘配额设置

[root@station1 ~]#vi /etc/fstab

/dev/sda10  /share  ext3   defaults,acl,usrquota,grpquota  0  0

[root@station1 ~]#mount –o remount /share

[root@station1 ~]#quotacheck –ugv

[root@station1 ~]#quotaon /dev/sda10

 

3、 创建账户和组

[root@station1 ~]#groupadd design             #创建设计、财务、管理组

[root@station1 ~]#groupadd finance

[root@station1 ~]#groupadd manager

 

[root@station1 ~]#useradd –g design tomyang    #创建员工账户

[root@station1 ~]#useradd –g design davidxu

[root@station1 ~]#useradd –g finance mikeliu

[root@station1 ~]#useradd –g finance janeli

[root@station1 ~]#usermod –G manager davidxu   #将经理加入manager组

[root@station1 ~]#usermod –G manager mikeliu

 

 

4、 创建共享文件目录

[root@station1 ~]#mkdir  /share/public              #公用目录

[root@station1 ~]#mkdir  -p  /share/design/public  

[root@station1 ~]#mkdir  -p  /share/finance/public 

 

[root@station1 ~]#mkdir  /share/design/davidxu      #个人专用目录

[root@station1 ~]#mkdir  /share/design/tomyang

[root@station1 ~]#mkdir  /share/finance/mikeliu 

[root@station1 ~]#mkdir  /share/finance/janeli

 

[root@station1 ~]#chmod o+t /share/design/public   #公用目录普通用户不能删除其文件

[root@station1 ~]#chmod o+t /share/finance/public

 

5、 创建samba账户

[root@station1 ~]#smbpasswd –a davidxu

[root@station1 ~]#smbpasswd –a tomgyang

[root@station1 ~]#smbpasswd –a mikeliu

[root@station1 ~]#smbpasswd –a janeli

 

6、 配置samba(修改/etc/samba/smb.conf配置文件)

[root@station1 ~]#vi  /etc/samba/smb.conf

 

[global]             #全局配置,加入如下内容:

hosts allow = lo 192.168.1.0  192.168.2.0  192.168.3.0  EXCEPT 192.168.1.99

include = /etc/samba/%G.smb.conf

include = /etc/samba/%U.smb.conf

#include:指定只配置文件,%G.smb.conf即初始组(主组)设定单独的配置文件,%U.smb.conf即为用户设定单独配置文件

#config file:用户只能访问其单独配置文件定义的共享资源,无法访问主配置(/etc/samba/smb.conf)中定义的共享资源

#include:用户可以同时访问其单独的配置文件中定义的工作资源和主配置(/etc/samba/smb.conf)中定义的共享资源

 

[public]            #公共资源

path = /share/public

 

[cdrom]            #共享光驱

path = /mnt/cdrom

root preexec = /bin/mount –t iso9660 /dev/cdrom /mnt/cdrom

root postexec = /bin/umount  /mnt/cdrom

 

 

 

7、 配置子配置文件

[root@station1 ~]#vi  /etc/samba/design.smb.conf   #设计部配置文件

[design]

path = /share/design/public

write list = @design

 

[davidxu]

path = /share/design/davidxu

write list = davidxu

 

[tongyang]

path = /share/design/tomyang

write list = tomyang

 

[root@station1 ~]#vi  /etc/samba/finance.smb.conf   #财务部配置文件

[finance]

path = /share/finance/public

write list = @finance

 

[mikeliu]

path = /share/finance/mikeliu

write list = mikeliu

 

[janeli]

path = /share/finance/janeli

write list = janeli

 

8、 各自共享目录自身权限设置

[root@station1 ~]#setfacl  -R  –m  d:g:design:rwx /share/design   #设置组默认有rwx权限

[root@station1 ~]#setfacl  -R  –m  g:design:rwx /share/sesign     #赋予组rwx权限

[root@station1 ~]#setfacl  -R  –m  d:g:finance:rwx /share/finance

[root@station1 ~]#setfacl  -R  -m  g:finance:rwx /share/finance

 

9、重启smb服务器

[root@station1 ~]#service smb restart

[root@station1 ~]#chkconfig smb on

(责任编辑:IT)