LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3788|回复: 3

网路服务器之—SAMBA共享配置

[复制链接]
发表于 2006-8-25 15:11:14 | 显示全部楼层 |阅读模式
1.        Samba协议基础
自从出现NetBIOS协议,Microsoft用它实现了网络文件/打印服务,即大家熟知的打印与共享服务,它是基于SMB(Server Message Block)协议,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。
为了让Windows和UNIX主机实现资源共享,可行的一种方法就是在UNIX计算机中安装支持SMB/CIFS协议的软件,这样Windows客户就不需要更改设置,同对待Windows主机一样,能用UNIX计算机上的资源了。Samba是用来实现SMB的一种软件,它的工作原理是让NetBIOS(Network Basic Input/Output System)和SMB这两个协议运行于TCP/IP协议之上,并且使用Windows的NetBEUI(Net BIOS Enhanced User Interface)协议,让类UNIX主机可以在网络邻居上被Windows主机看到。它的功能有:
        实现Linux主机之间和Linux主机与Windows主机之间的文件共享
        实现Linux主机之间和Linux主机与Windows主机之间的打印机共享
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下的内容。安装的方法如下:
#rpm  -ivh   *samba*.rpm                           --可以一次完成所有安装
(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:验证通过网络上的Windows的主域控制器进行。
后面三种安全级都要求“用户”在提供共享的Linux主机上要有帐户。
password server = <NT-Server-Name>
设置验证服务器的服务器名。当security设为server或者domain的时候才有必要。
encrypt passwords = yes|no
设置是否对密码进行加密,samba本身有一个密码文件/etc/samba/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,samba直接把这个密码和Linux里的/etc/samba/smbpasswd密码文件进行验证。但是在Windows 95 OS/2以后的版本和Windows 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*
这三项设置能否从Windows的应用程序修改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=[Windows 1.0] Server=[Windows 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)        Windows下访问Linux的共享
要在Windows下访问Linux中提供的共享,和使用一般的Windows共享一样,可以有多种方法:
1)        在Windows搜索Linux服务器
2)        在使用Windows提供的网络邻居功能
3)        在地址栏输入//samba服务器IP/共享名
发表于 2006-9-5 11:51:37 | 显示全部楼层
force user = grind
如果一个目录,让guest可以写,那么guest就可以删除,如果用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。

楼主你确定这个方法好用?
我怎么试了N次都不好用?
回复 支持 反对

使用道具 举报

发表于 2006-9-7 16:16:40 | 显示全部楼层
楼主呢?
怎么不回答我的问题???
回复 支持 反对

使用道具 举报

发表于 2006-10-31 15:36:56 | 显示全部楼层
感谢搂主!

我也有楼上的同样的问题,设了force user,查看写入的文件的属主也确实是设置的force user用户了,但guest还是可以把它删掉,guest甚至可以删除不是自己建立的文件,好晕
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表