分类: LINUX
2009-08-05 11:21:42
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主机之间的打印机共享 |
[root@max samba]# rpm -qa | grep samba samba-common-3.0.28-0.4.3AXS3 samba-client-3.0.28-0.4.3AXS3 samba-3.0.28-0.4.3AXS3 samba-swat-3.0.28-0.4.3AXS3 [root@max samba]# |
该文件的初始内容很多,其实很多都是注释,但这些注释往往对我们的后续配置很有帮助,建议仔细阅读。 Samba的配置可以分为三部分:全局部分(由[global]标识)、打印机部分(由[printers]标识)和共享部分(由[homes]标识和自己设定的其他标识)。全局部分的配置影响到其它所有部分,打印机部分用于设置打印机的共享,而其余部分则是提供一般共享的部分。所以,Samba配置的一般方法就很明确了,配置global部分,设置全局参数,配置打印机部分则可以实现打印机共享,其它共享部分的配置则是提供特殊共享服务,配置[homes]部分可以让本地用户的目录也加入共享。 |
假如公司有财务,技术,领导3个部门,我们分别为3个部门建立3个用户组为caiwu,network,lingdao。 三个部门里各有2个用户,我们建用户分别为caiwu01,caiwu02,network01,network02,lingdao01,lingdao02 然后我们分别就公司的具体情况建立相应的目录及访问权限,通过以下的例子,希望大家能在平时的工作中灵活的应用samba的安全权限来设置你们的samba文件服务器。 1。首先服务器采用用户验证的方式,每个用户可以访问自己的宿主目录,并且只有该用户能访问宿主目录,并具有完全的权限,而其他人不能看到你的宿主目录。 2。建立一个caiwu的文件夹,希望caiwu组和lingdao组的人能看到,network02也可以访问,但只有caiwu01有写的权限。 3。建立一个lindao的目录,只有领导组的人可以访问并读写,还有network02也可以访问,但外人看不到那个目录 4。建议一个文件交换目录exchange,所有人都能读写,包括guest用户,但每个人不能删除别人的文件。 5。建议一个公共的只读文件夹public,所有人只读这个文件夹的内容。 |
[root@max samba]# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[caiwu]" Processing section "[lingdao]" Processing section "[exchange]" Processing section "[public]" Processing section "[printers]" Processing section "[homes]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] workgroup = MYGROUP server string = Max's Samba Server Version %v passdb backend = tdbsam log file = /var/log/samba/%m.log max log size = 50 cups options = raw [homes] comment = Home Directories valid users = %S create mask = 0644 browseable = No [caiwu] comment = caiwu group path = /home/samba/caiwu valid users = @caiwu, @lingdao, network02 write list = caiwu01 [lingdao] comment = lingdao group path = /home/samba/lingdao valid users = @lingdao, network2 write list = @lingdao [exchange] comment = exchange directory path = /home/samba/exchange read only = No guest ok = Yes [public] comment = read only directory path = /home/samba/public guest ok = Yes [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No include = /etc/samba/smbshared.conf [root@max samba]# |
exchange段基本能满足我们的第4要求,但不能满足每个人不能删除别人的文件这个条件,即使里设置了mask也是没用,其实这个条件只要unix设置一个粘贴位就行 chmod -R 1777 /home/samba/exchange 粘贴位简介:如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。 |
添加系统组及用户 groupadd caiwu groupadd network groupadd lingdao useradd caiwu01 -g caiwu useradd caiwu02 -g caiwu useradd network01 -g network useradd network02 -g network useradd lingdao01 -g lingdao useradd lingdao02 -g lingdao mkdir /home/samba/{caiwu,lingdao,exchange,public} -p 添加samba用户及密码 smbpasswd -h smbpasswd -a caiwu01 smbpasswd -a caiwu02 smbpasswd -a lingdao01 smbpasswd -a lingdao02 smbpasswd -a network01 smbpasswd -a network02 |
[root@max samba]# /etc/init.d/smb status smbd (pid 2961 2953) 正在运行... nmbd (pid 2958) 正在运行... [root@max samba]# |
[root@max can]# smbclient -L 192.168.228.218 -N Anonymous login successful Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.4.3AXS3] Sharename Type Comment --------- ---- ------- caiwu Disk caiwu group lingdao Disk lingdao group exchange Disk exchange directory public Disk read only directory IPC$ IPC IPC Service (Max's Samba Server Version 3.0.28-0.4.3AXS3) Anonymous login successful Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.4.3AXS3] Server Comment --------- ------- DEEPIN-AA0646F7 LE1 Samba Server Version 3.0.28-0.4.3AXS3 MAX Max's Samba Server Version 3.0.28-0.4.3AXS3 Workgroup Master --------- ------- MYGROUP LE1 挂载 [root@max can]# mount -t cifs -o username=caiwu01,password=caiwu01 //192.168.228.218/caiwu01 /mnt/cd/ [root@max can]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda1 19G 18G 636M 97% / tmpfs 251M 0 251M 0% /dev/shm /dev/sda3 23G 18G 4.1G 82% /mnt/hda1 /dev/sda4 31G 23G 5.8G 80% /mnt/hda5 //192.168.228.218/caiwu01 19G 18G 636M 97% /mnt/cd [root@max can]# ls /mnt/cd/ -a . .bash_logout .bashrc .emacs .fonts.conf.ko .gtkrc-2.0 Readme .. .bash_profile Desktop .fonts.conf.ja .fonts.conf.zh .kde .zshrc [root@max can]# |
a) 全局设置 workgroup = pggroup 设置该Samba服务器所在的工作组或者域(如下面的security=domain的话)。 server string = pg’s Samba Server %v 设定Samba服务器的显示名。还可以包含特定变量。常用的包括: 变量 含 义 %S 当前服务名(如果有的话)常用 %P 当前服务的根目录(如果有的话) %u 当前服务的用户名(如果有的话) %U 当前对话的用户名 %H 当前服务的用户的Home目录 常用 %v Samba服务的版本号 %h 运行Samba服务机器的主机名 %m 客户机的NETBIOS名称 %L 服务器的NETBIOS名称 %M 客户机的主机名 %I 客户机的IP %T 当前日期和时间 hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .up.com 可以设置允许访问的网络和主机IP,比如允许192.164.228.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 定义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 = 设置验证服务器的服务器名。当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目录并使之共享。下面是这个段的最基本的几个设置。 [share]/[share$] --共享名,后面一个是设置隐藏共享 comment =comment --共享描述 path = /pg --共享文件位置,是本机的存在的目录 allow hosts = host(subnet) --允许共享访问的设置,同[global]中设置方法 deny hosts = host(subnet) --不允许访问共享的限制,方法同上 writable = yes|no --共享是否可以写入 valid users = user(@group) --允许访问的用户和组.多个用户用空格分隔,帐号一定要在smbpasswd文件中存在 invalid users = user(@group) --不允许访问的用户和组 read list = user(@group) --只允许读取的用户和组 write 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 = pg 如果一个目录,让guest可以写,那么guest就可以删除,如果用force user= pg强制建立文件的属主是pg,同时限制create mask = 0755,这样guest就不能删除了。 read only = yes|no --共享为只读方式 |
打印机共享的设置: [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no匿名是否可以访问 writable = no printable = yes 打印机设置: startx-------system-config-printer service cups start 在admin打印机添加完后,就可以用samba 共享出去了,但是windows 要使用此打印机必须要手动安装驱动。 这里printable指明该打印机可以打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。printer driver的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。 |