1.Samba协议基础
在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。

2.安装
采用redhat5.4安装,使用yum工具
yum  install  -y samba

3.配置信息

netbios name = MYSERVER   定义自己的共享主机名。
interfaces = lo eth0 192.168.50.11/24
如果有多个网络接口,就必须在这里指定。如interfaces = 192.168.50.10/24 192.168.50.11/24
hosts allow = 127. 192.168.12. 192.168.13.  //允许那个网断的计算机可以访问共享资源
log file = /var/log/samba/%m.log   日志文件,可以修改为log file = /var/log/samba/samba.log,重启服务后登陆信息和操作信息就会记录在日志文件内。
security = user
定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
后面三种安全级都要求用户在本Linux机器上也要系统帐户。否则是不能访问的。

域成员参数,域控制参数,Brows控制参数,打印参数和文件系统参数本文没有介绍。因为需要domain域级别才能试验。

4.共享设置:
每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。如果一个资源的名字的最后一个字母为$,则这个共享名就为隐藏共享,不能直接表现在浏览列表中,而只能通过直接访问这个名字来进行访问。在SMB协议中,为了获得服务器提供的资源列表,必须使用一个隐藏的资源名字IPC$来访问服务器,否则客户无法获得系统资源的列表
默认共享设置有两个段:
[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

writeable指定了这个目录缺省是否可写,也可以用readonly = no来设置可写。
user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开。
valid users指定能够使用该共享资源的用户和组。
invalid users指定不能够使用该共享资源的用户和组。
read list 指定只能读取该共享资源的用户和组。
write list指定能读取和写该共享资源的用户和组。
admin list指定能管理该共享资源(包括读写和权限赋予等)的用户和组。
public指明该共享资源是否能给游客帐号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ok = yes其实和public = yes是一样的。
hide dot files指明是不是像unix那样隐藏以“.”号开头的文件。
create mode指明新建立的文件的属性,一般是0755。
directory mode指明新建立的目录的属性,一般是0755。
sync always指明对该共享资源进行写操作后是否进行同步操作。
short preserve case指明不管文件名大小写。
preserve case指明保持大小写。
case sensitive指明是否对大小写敏感,一般选no,不然可能引起错误。
mangle case指明混合大小写。
default case指明缺省的文件名是全部大写还是小写。
force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= zhangsan强制建立文件的属主是zhangsan,同时限制create mask = 0755,这样guest就不能删除了。
wide links指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
max connections = n设定同时连接数是n。
delete readonly指明能否删除共享资源里面已经被定义为只读的文件。
有两类特殊的共享,分别是光驱和打印机。

5.创建smb帐号库:
首先访问帐号需是本地帐号,然后赋予本地帐户的smb口令
smbpasswd  -a   账号 (取自本地账号)

-a必须加,为了生成密码文件smbpasswd,该密码是windows登陆Linux的smbuser用户密码
Smbpasswd  -a  zhangsan,然后就可以用zhangsan登陆smb服务器

6.相关用法:

先创建两个用户,user1和user2.

[root@localhost ~]# useradd user1 

[root@localhost ~]# smbpasswd -a user1

密码随便输。

[root@localhost ~]# useradd user2

[root@localhost ~]# smbpasswd -a user2

密码随便输。

(1)安全级别的设置:

当我们把完全级别设置为share时,可以不用输入任何验证信息直接登录samba服务器。

[root@localhost ~]# vim /etc/samba/smb.conf

image

[root@localhost ~]# service smb restart                #重新启动samba服务

image

image

直接可以访问。

当我们把安全级别设置为user时,这个时候得需要身份验证。

image

[root@localhost ~]# service smb restart     

image

(2)指定特定地址访问samba服务器:

让192.168.5.102的用户和本地用户访问samba服务器.

[root@localhost ~]# vim /etc/samba/smb.conf

image

image

image

说明可以进行身份验证。

当将用户端地址给为其它,比如192.168.5.101时,看看结果:

image

image

将不再被允许访问。

(3)基于接口控制的samba服务器的访问:

在增加一个地址:192.168.5.110,默认情况下,用户访问这个两个地址都可以访问到。为了让用户只能访问192.168.5.100,而不能访192.168.5.110,我们做如下操作:

image

先测试192.168.5.100

image

image

再测试192.168.5.110

image

image

访问失败。

7.小案例:

在/tmp目录下,建立三个文件夹:/tmp/abc,/tmp/user1,/tmp/user2.

user1的共享名为smbuser1,只有user1一个人能访问,可读可写;user2的共享名为smbuser2,只有user2一个人能访问,可读可写;abc的共享名为public,任何人都可以访问,但是是只读文件。

[root@localhost ~]# mkdir /tmp/abc /tmp/user1 /tmp/user2

[root@localhost ~]# ll -d /tmp/abc /tmp/user1 /tmp/user2

[root@localhost ~]# chown user1.user1 /tmp/user1           

[root@localhost ~]# chown user2.user2 /tmp/user2                    #修改用户和组的权限

image

[root@localhost ~]# vim /etc/samba/smb.conf

[root@localhost ~]# cd /tmp/abc

[root@localhost abc]# touch p1

[root@localhost abc]# cd ../user1

[root@localhost user1]# touch f1.user1

[root@localhost user1]# cd ../user2
[root@localhost user2]# touch f2.user2                           #创建各个文件作为标志

[root@localhost ~]# vim /etc/samba/smb.conf

image

[root@localhost ~]# testparm                                       #检测samba配置文件中语法是否正确

[root@localhost ~]# service smb restart

 

检测结果:

首先是user1的检测:

image

image

进入smbuser1,可以删除和新建文件

image

但是进入public中不能新建,删除和上传文件,能下载文件。

image

user2跟user1的情况一样,在这里就不再截图。