samba配置文件详解

samba配置文件详解

[global]                                #全局设定
   workgroup = MSHOME                   #设定samba server的工作组为MSHOME, 即在网上邻居中所处的工作组为 MSHOME;
   netbios name = Ben                  #你可以指定你samba服务器的netbios名字。通过windows机器的网络邻居可以看到这个名字。如果你没有特别指定,Linux将会使用它自己的网络名作为netbios名。

   server string = %h server            #设定samba server 的服务器说明
   wins support = no
   dns proxy = no
   log file = /var/log/samba/log.%m     #设定日志文件的存储位置 %m代表访问机器名称
   max log size = 1000                  #设定sambaserver所能存储日志的最大容量, 单位:KB
   syslog = 0                           #设定日志级别,级别越高,记录内容越多
   panic action = /usr/share/samba/panic-action %d
    security = user                      #使用SAMBA本身的密码数据库,与下面的smb passwd file有关

=============================SAMBA的安全级别(begin)==================================

       Samba 有四种安全级,由参数 security 定义,该参数只能出现在 [global] 中,是一个全局参数.
这四种安全级是 share,user,server,domain ,其中后三种属于安全模式( Security Mode )
(1) security = share
   当客户机连接到一个 share 安全级的服务器时,它在连接共享之前,不需要提供正确的帐号和密码就可以登录到服务器

注意: 服务器总是使用有效的 Linux 帐号来提供服务,即使是工作在 share 安全级.

因为客户机并不向 share 级的服务器提供帐号,所以服务器使用下面的技术来确定使用什么帐号提供服务:
1> 如果该共享包含 " guest only =yes " 参数,则使用 " guest account= " 参数指定的 guest 帐号,忽略下面的步骤.
2> 如果连接请求同时提供一个帐号,那么该帐号被认为是潜在的帐号.
3> 如果客户机在此之前发出过登录请求,那么该请求包含的帐号也被视为潜在的帐号.
4> 客户机请求连接的共享名被视为潜在帐号.
5> 客户机的 NetBIOS 名被视为潜在帐号.
6> " user = " 列表中的帐号被视为潜在帐号.
如果 " guest only " 参数为假,则检查所有的潜在帐号,使用第一个和密码匹配的帐号.如果 guest only " 参数为真,或者该共享允许使用 " guest account " ,则使用之,否则拒绝连接.可见, share 服务器决定帐号的过程是很复杂的.

2) security = user

        这是 Samba 默认使用的安全级.使用 user 安全级时,服务器要求客户机首先以正确的帐号和密码登录(可以对帐号进行映射). " force user = " 和 "guest only " 等可能改变用户身份的参数只有在用户成功登录之后才起作用.

注意: 客户机请求连接的共享名只有在登录之后才传递给服务器,因此没有通过身份验证的用户无法访问任何共享(包括 guest 共享).可以使用 "map to guest " 选项将未知用户映射为 guest 用户,以允许访问 guest 共享.

share 和 user 安全级的比较
========================SAMBA的安全级别(end)========================================

   encrypt passwords = true      #是否对samba用户的密码进行加密处理,如果设为user一定要选这个,因为window默认设置为加密处理的
   passdb backend = tdbsam (通常不用这个,多数用smb passwd file)      #设定SAMBA用户密码的存放方式, 为tdbsam时密码存放在 /var/lib/samba/passdb.tdb 文件中
    smb passwd file = /etc/samba/smbpasswd          #如果设为smbpasswd方式则需要使用smb passwd file 来指定密码文件存放路径,如果没有就自己新建
========================SAMBA的账户密码策略(begin)====================================

SAMBA的默认账号是Linux系统上面的账户/etc/passwd,但是密码和Linux的密码文件不同,SAMBA的密码是放在
/etc/samba/smbpasswd文件中的,而且必须经过加密,加密的方法是通过smbpasswd命令。

smbpasswd命令常用选项有:

-a 增加一个用户帐号,该帐号必须出现在 /etc/passwd 文件中,亦即是一个合法的 Linux 帐号,只有 root 可以使用本选项。
-d 禁止一个用户帐号,并不将其删除,仅供 root 使用。
-e 恢复一个被禁止的用户帐号,仅供 root 使用。
-U username 修改用户密码

注意:smbpasswd的密码不同用linux上的用户密码,2者可以相同也可不同


========================SAMBA的账户密码策略(end)=====================================
   obey pam restrictions = yes          #当用户认证时,服从PAM的管理限制
   map to guest = bad user               #guest用户映射策略,想不输入用户名可以浏览到samba的共享就一定要设置
   guest account = nobody              #可以将guest映射为这个设置里面的账户,如果没有,就参照下面的设置
   username map = /etc/samba/smbuser            #用户映射,其值是一个文件名

======================================用户映射(begin)================================

====================================用户映射(end)===================================

   guest account = nobody   (有上面的通常不用再设置了)            #设定guest对应的系统账户
   invalid users = root                 #禁止root用户通过网络访问
   load printers = yes               #决定是否装载printcap文件中所有的打印机以供浏览。默认值是 load
   unix password sync = no             #设定在系统添加用户时是否同时添加到samba用户列表
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
   socket options = TCP_NODELAY

(其他更多选项可以通过过man smb.conf查看)

宏 描 述

%S 当前服务或共享的名称
%P 当前服务或共享的目录
%u 当前服务或共享使用的用户名
%g %u 所在组的名称
%U 当前会话使用的用户名(登录名?!),即客户机所期望的用户名,可以和客户机真正得到的用户名不同.
%G %U 所在组的名称
%H %u 的私人目录(主目录)
%v Samba 的版本号
%h Samba 服务器的 NetBIOS 名
%m 客户机的 NetBIOS 主机名(Win9x的机器名)
%L 服务器的 NetBIOS 名
%N 服务器的(?????)名
%M 客户机的 Internet 主机名
%I 客户机的 IP 地址
%T 当前的日期和时间
%d 当前服务器进程 ID
%a 远程客户机的体系结构,目前只能识别WfWg,NT,和 Win 95、98,并且不是100%可靠,其他系统被标示为 UNKNOWN


#共享项目设定

[homes]
   

         #如果配置文件中包含该节,那么服务器就可以动态地为用户提供连接到其私人目录/home/user的共享.如果用户要求连接一个配置文件中不存在的共 享,服务器就假设用户提供的共享名是一个帐号,然后在本地的密码文件中查找该帐号.如果该帐号存在,并且用户提供了正确的口令,那么服务器就拷贝[在 home]节来建立一个新的共享,同时作出如下修改:
1> 将共享名改为帐号名.
2> 如果在[home]节中没有指定要共享的目录,那么就使用该帐号的私人目录.
3> 如果要在[home]节中指定 path 参数,那么宏 %S 是非常有用的,它代表当前共享的名称.例如: path=/data/%S
这种方法允许为 PC 用户和 Linux 用户提供不同的私人目录.
由此可见,使用 [home] 节可以简单而快速地允许大量用户存取各自的私人目录.如果用户请求的共享名就是 homes ,服务器同样会为其动态地建立共享,唯一的不同是新共享的名称仍然是 homes.

   comment = Home Directories           #说明文字
   browseable = no                      #在浏览网上邻居时, 是否显示共享名称, 设为否, 则必须使用完整路径在能访问
   writable = no                            #是否可以写操作,还要注意共享的文件夹的用户权限
   create mask = 0700                   #用户创建文件时的默认权限
   directory mask = 0700                #用户创建目录时的默认权限
   valid users = %S                     #以登陆的用户名单(不包括用guest map映射的账户),可以指定用空格分开的多个登录名。

===============================用户的身份验证(begin)===================================

    帐号对于 Samba 来说非常重要,用户必须拥有合法的帐号才能连接非 guest 性质的Samba 服务,并且该帐号决定了他享有的权限.即使一个共享是 guest 共享, Samba 也需要一个特定的帐号来提供服务.
用户有许多种连接 Sabma 服务的方法.服务器遵循下面的步骤决定是否允许一个连接,如果所有的步骤都失败了,就拒绝连接;如果其中有一步成功了,就不再执行其后的步骤.
1> 如果请求连接的共享包含 " guest only = yes " 参数,那么用户就以" guest account = " 参数制定的身份连接,而不考虑其提供的密码.
2> 如果客户机提供了一个帐号/密码对,并且该帐号/密码对通过了 Linux 系统的身份验证,那么用户就以该帐号连接.注意这里包括以 "\\server\service\%username" 形式提供的帐号.
3> 检查客户机的 NetBIOS 名称(亦即 Windows 在网络中使用的计算机名)以及其他曾使用过的帐号,如果有一个可以和提供的密码匹配,那么就允许连接.
4> 如果客户机已经通过了帐号\密码验证,并且向服务器发送了验证标志( validation token),那么用户就以该帐号连接.
5> 如果请求的共享包含 " user = " 参数,同时客户机提供了一个密码,并且该密码可以和帐号列表中的一个帐号匹配,那么用户就以该帐号连接.如果" user = " 参数中的某个帐号以 " @ " 开头,那么它会被视为一个用户组名,该组中所有的用户帐号都被包含在 " user = " 列表中.

===============================用户的身份验证(end)====================================

 

share 安全级面向资源,用户每连接一个非guest 共享都需要提供一个密码.如果主要提供 guest 共享,就应该使用 share 安全级.
user 安全级面向用户,用户登录后,就无需再为单独的共享提供密码,比较方便.如果用户再 PC 上的帐号和在 Linux 上的帐号相同,那么使用 user 安全级是非常合适的.

 

Samba提供的用户映射机制包括“guest用户映射”和“用户映射”两种:

1) guest用户映射
guest用户映射仅适用于安全模式(user,server和domain安全级).如果一个用户没有通过身份验证,就可以将其映射为guest用户,从而允许他访问guest共享.这里 guest 用户由"guest account="参数指定.
guest用户映射由全局参数"map to guest"控制,它只能放在[global]节中,可以是如下三个值:
1>map to guest = Never
不进行映射,拒绝非法用户访问任何资源.这是默认行为.
2>map to guest = Bad User (通常用这种方式进行映射)
如果用户使用一个不存在的帐号登录,就将它映射为guest用户;如果提供的帐号正确而口令错误,则禁止连接.
3>map to guest = Bad Password
将使用错误口令登录的用户映射为guest用户.这样的设置会产生一个问题,即如果用户不小心键入了错误的口令,服务器会"偷偷地"将他映射为guest用户,而不出任何错误信息,这样用户会在不知情的情况下受到种种访问限制.

2) 用户映射
全局参数"username map"用来控制用户映射,它允许管理员指定一个映射文件,该文件包含了在客户机和服务器间进行用户映射的信息,如:
username map = /etc/samba/smbuser 用户映射经常用来在 Windows 和 Linux 主机之间进行映射,因为用户可能在两个系
统上拥有不同的帐号;另一个用途是将几个用户映射为一个用户,以使他们能更方便地共享文件.

[public]
   comment = a public directory
   path = /home/public
   browseable = yes
   read only = yes                      #是否设定问只读模式
# guest ok = yes                      (这个设定和下面的是一样的,2个任选1个就可以了)
     piblic = yes                     #定义一个共享是否对公共访问开放。当设置为 yes 时,在系统上没有帐户的用户将基于map to guest所定义的客户帐户的属性来接收访问。
   force user   = rebacca                    #指定一个Linux帐号,所有用户都使用该帐号访问相应的共享

[private]
   comment = a pass policy directory
   path = /home
   browseable = yes
   writeable = yes
   valid users =     ben               #指定允许进入这个资源的用户,用@groupname可表示groupname这一组用户
   invalid users =   rebacca         #禁止访问该共享的用户列表。

其他一些有用的参数
preexec    # 指定连接建立之后执行的命令,例如:preexec = echo \"%u connected to %S from %m(%l)\" >> /tmp/log
会在连接建立时向日志文件中追加一条记录。
postexec   #指定连接断开之后执行的命令。
root preexec        #和preexec类似,但是这里指定的命令是以root权限运行的。这通常用来安装一个文件系统,如CDROM等。
root postexec       #和postexec类似,但这里指定的命令是以root权限运行的。可以用来卸载文件系统。


#打印机设定
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba              #共享资源的完整路径
   printable = yes                      #是否允许打印
   public = no                          #是否可以匿名访问, 设为no, 则必须使用用户名密码访问
   writable = no
   create mode = 0700

你可能感兴趣的:(linux,职场,samba,休闲)