Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下。
smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。
每段的参数的格式是:名称=值。配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm–v命令可以详细的列出smb.conf支持的配置参数。
在配置参数有以下几个共性:
(1)参数配置基本采用“参数” = “值”的方式,如果参数有多个值时,多个参数之间用空格分隔。
(2)当使用用户和组作为参数时,值为组时需在组名前加@字符。
(3)以“;”或“#”开始的是注释行。
(4)方括号标识表示为标志,比如[global]为全局配置标识。
(5)一般当全局配置与某个共享资源配置发生冲突时,共享资源配置优先。
(6)关键字对大小写不敏感
Samba配置文件中可以使用的变量
变量名 |
作用 |
变量名 |
作用 |
%S |
当前服务名(如果存在) |
%L |
Samba服务器的NetBIOS名 |
%P |
当前服务的根目录(如果存在) |
%N |
NIS服务器主机名 |
%u |
当前服务的用户名(如果存在) |
%p |
NIS服务器家目录 |
%g |
当前用户的初始组 |
%R |
采用协议等级 |
%U |
当前连接的用户名 |
%d |
Samba服务的进程ID |
%G |
当前连接用户的初始组 |
%a |
访问Samba服务器的客户端系统 |
%D |
当前用户所属域或工作组名称 |
%I |
访问Samba服务器的客户端IP地址 |
%H |
当前服务用户的家目录 |
%M |
访问Samba服务器的客户端主机名 |
%v |
Samba服务器的版本 |
%m |
访问Samba服务器的客户端NetBIOS名 |
%h |
Samba服务器的主机名 |
%T |
Samba服务器日期及时间 |
代码如下:
…
#======================= Global Settings =====================================
[global]
…
格式:
configfile = /usr/local/samba/lib/smb.conf.%m
描述:
config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。
源码如下
# ----------------------- Network-Related Options-------------------------
#
# workgroup = the Windows NT domain name orworkgroup name, for example, MYGROUP.
#
# server string = the equivalent of the Windows NTDescription field.
#
# netbios name = used to specify a server namethat is not tied to the hostname.
#
# interfaces = used to configure Samba to listenon multiple network interfaces.
# If you have multiple interfaces, you can use the"interfaces =" option to
# configure which of those interfaces Sambalistens on. Never omit the localhost
# interface (lo).
#
# hosts allow = the hosts allowed to connect. Thisoption can also be used on a
# per-share basis.
#
# hosts deny = the hosts not allowed to connect.This option can also be used on
# a per-share basis.
#
# max protocol = used to define the supportedprotocol. The default is NT1. You
# can set it to SMB2 if you want experimental SMB2support.
#
workgroup= MYGROUP
serverstring = Samba Server Version %v
; netbiosname = MYSERVER
; interfaces= lo eth0 192.168.12.2/24 192.168.13.2/24
; hostsallow = 127. 192.168.12. 192.168.13.
; maxprotocol = SMB2
格式:
workgroup =WORKGROUP
描述:
设定 Samba Server 所要加入的工作组或者域。
格式:
serverstring = Samba Server Version %v
描述:
设定 Samba Server 的注释,可以是任何字符串,也可以不填。
宏%v表示显示Samba的版本号。
格式:
netbiosname = smbserver
描述:
设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
格式:
interfaces =lo eth0 192.168.12.2/24 192.168.13.2/24
描述:
设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
格式:
hostsallow = 127. 192.168.1. 192.168.10.1
描述:
表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接
格式:
maxconnections = 0
描述:
max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
代码:
# --------------------------- Logging Options-----------------------------
#
# log file = specify where log files are writtento and how they are split.
#
# max log size = specify the maximum size logfiles are allowed to reach. Log
# files are rotated when they reach the sizespecified with "max log size".
#
# logfiles split per-machine:
log file= /var/log/samba/log.%m
# maximumsize of 50KB per log file, then rotate:
max logsize = 50
格式:
logfile = /var/log/samba/log.%m
描述:
设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
格式:
maxlog size = 50
描述:
设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。
Standalone Server Options、Domain MembersOptions、Domain Controller Options三部分均与Samba的认证方式及工作角色,三部分均需要配置合适的security(安全级别,用于配置Samba的认证方式),此三部分为服务器的三种角色。
使用独立服务器作为Samba服务器认证用户来源,也就是当访问Samba服务器时输入的用户名和密码的验证工作由Samba服务器本机系统内账户完成。
源码:
# ----------------------- Standalone ServerOptions ------------------------
#
# security = the mode Samba runs in. This can beset to user, share
# (deprecated), or server (deprecated).
#
# passdb backend = the backend used to store userinformation in. New
# installations should use either tdbsam orldapsam. No additional configuration
# is required for tdbsam. The"smbpasswd" utility is available for backwards
# compatibility.
#
security= user
passdbbackend = tdbsam
格式:
security =user
描述:
设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share:用户访问SambaServer不需要提供用户名和口令, 安全性能较低。
2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
3. server:依靠其他WindowsNT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
格式:
passdbbackend = tdbsam
描述:
passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
该部分将Samba服务器加入Windows NT平台域或Windows 2000 Server/2003/2008活动目录中。也就是当访问Samba服务器时输入的用户名和密码的验证工作由域控制器完成。
# ----------------------- Domain Members Options------------------------
#
# security = must be set to domain or ads.
#
# passdb backend = the backend used to store userinformation in. New
# installations should use either tdbsam orldapsam. No additional configuration
# is required for tdbsam. The"smbpasswd" utility is available for backwards
# compatibility.
#
# realm = only use the realm option when the"security = ads" option is set.
# The realm option specifies the Active Directoryrealm the host is a part of.
#
# password server = only use this option when the"security = server"
# option is set, or if you cannot use DNS tolocate a Domain Controller. The
# argument list can include My_PDC_Name,[My_BDC_Name], and [My_Next_BDC_Name]:
#
# password server = My_PDC_Name [My_BDC_Name][My_Next_BDC_Name]
#
# Use "password server = *" toautomatically locate Domain Controllers.
; security= domain
; passdbbackend = tdbsam
; realm = MY_REALM
; passwordserver =
格式:
security =domain
描述:
domain:Samba服务器在一个基于Windows NT平台的Windows域中,访问共享资源需要输入用户名和密码,认证用户来源为Windows域。
ads:Samba服务器在一个基于Windows 200X平台的Windows活动目录中,访问共享资源需要输入用户名和密码,认证用户来源为Windows活动目录。
user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
格式:
passdbbackend = tdbsam
描述:
同” Standalone Server Options”,默认为tdbsam,不用修改。
(1)tdbsam:该方式使用一个数据库文件来建立用户数据库,数据库文件名为passdb.tdb。可以使用#smbpasswd -a [用户名]来建立Samba用户。也可以使用pdbedit命令来建立用户。
(2)smbpasswd:该方式使用Samba提供的工具smbpasswd来给系统用户设置一个用于访问Samba服务的密码,客户端就用这个密码访问Samba共享资源。此方式还要使用一个 smb passwd file =/usr/local/samba/etc/smbpasswd(或/etc/samba/smbpasswd)参数来指定保存用户名和密码的文件,该文件需要手动建立。不推荐使用此方法。
(3)ldapsam:该方式基于LADP的账户管理方式来验证用户,先要建立LDAP服务。
(4)mysql:该方式是将Samba服务器的用户名和密码存储到MySQL数据库中。
格式:
realm =MY_REALM
描述:
格式:
passwordserver =
描述:
指定进行身份验证的域控制器IP地址或主机名。
该部分将Samba服务器配置为一台域控制器.
# ----------------------- Domain ControllerOptions ------------------------
#
# security = must be set to user for domaincontrollers.
#
# passdb backend = the backend used to store userinformation in. New
# installations should use either tdbsam or ldapsam.No additional configuration
# is required for tdbsam. The"smbpasswd" utility is available for backwards
# compatibility.
#
# domain master = specifies Samba to be the DomainMaster Browser, allowing
# Samba to collate browse lists between subnets.Do not use the "domain master"
# option if you already have a Windows NT domaincontroller performing this task.
#
# domain logons = allows Samba to provide anetwork logon service for Windows
# workstations.
#
# logon script = specifies a script to run atlogin time on the client. These
# scripts must be provided in a share namedNETLOGON.
#
# logon path = specifies (with a UNC path) whereuser profiles are stored.
#
#
; security= user
; passdbbackend = tdbsam
; domainmaster = yes
; domainlogons = yes
# thefollowing login script name is determined by the machine name
# (%m):
; logonscript = %m.bat
# thefollowing login script name is determined by the UNIX user used:
; logonscript = %u.bat
; logonpath = \\%L\Profiles\%u
# use anempty path to disable profile support:
; logonpath =
# variousscripts can be used on a domain controller or a stand-alone
# machineto add or delete corresponding UNIX accounts:
; add userscript = /usr/sbin/useradd "%u" -n -g users
; add groupscript = /usr/sbin/groupadd "%g"
; addmachine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d/nohome -s /bin/false "%u"
; deleteuser script = /usr/sbin/userdel "%u"
; deleteuser from group script = /usr/sbin/userdel "%u" "%g"
; deletegroup script = /usr/sbin/groupdel "%g"
格式:
security =user
描述:
在Domain Controller Options中,该参数必须设置为user,即:
user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
格式:
passdb backend = tdbsam
描述:
同” Standalone Server Options”,默认为tdbsam,不用修改。
格式:
domainmaster = yes
描述:
让Samba成为主域控制器(PDC),在此部分中此参数必须为yes。
格式:
domainlogons = yes
描述:
允许旧的Windows客户端提交验证信息。
格式:
logon script = %m.bat/%u.bat
描述:
当用户登录到域时执行的启动脚本,依据机器名或用户名加载脚本(相当于Windows组策略中用户开机脚本)。
格式:
logon path =\\%L\Profiles\%u
描述:
当用户登录到域后的配置文件存放的位置,用来初始化工作环境(相当于Windows中的漫游配置文件)。
格式:
add user script =/usr/sbin/useradd "%u" -n -g users
描述:
指定Windows与Linux中用户信息同步脚本,当Windows域中新建用户后指定脚本会将该用户的信息复制到Linux中.
格式:
add group script =/usr/sbin/groupadd "%g"
描述:
指定Windows与Linux中组信息同步脚本,当Windows域中新建组后指定脚本会将该组信息复制到Linux中。
格式:
add machine script = /usr/sbin/useradd-n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
描述:
指定Windows与Linux中计算机信息同步脚本,当Windows域中加入新的计算机后指定脚本会将计算机信息复制到Linux中。
格式:
delete user script = /usr/sbin/userdel"%u"
描述:
指定Windows与Linux中用户信息同步脚本,当Windows域中删除用户后指定脚本会将该用户信息复制到Linux中。
格式:
delete user from group script = /usr/sbin/userdel "%u""%g"
描述:
指定Windows与Linux中用户信息同步脚本,当Windows域中将用户从组中删除后指定脚本会将信息复制到Linux中。
格式:
delete group script = /usr/sbin/groupdel"%g"
描述:
指定Windows与Linux中组信息同步脚本,当Windows域中删除组后指定脚本会将该组的信息复制到Linux中。
主浏览服务器的功能主要是实现Windows中的网上邻居。计算机浏览服务是一系分部式的含有可用的网络资源列表,这些列表分布在一些计算机上,提出浏览请求的计算机充当浏览工作站,面提供浏览列表的计算机充当浏览服务器。该操作通过计算机从同一个子网中的主浏览服务器获得浏览列表副本完成。
浏览服务器有域主浏览服务器、主浏览服务器、备份浏览服务器、潜在浏览服务器,非浏览服务器之分。
# ----------------------- Browser Control Options----------------------------
#
# local master = when set to no, Samba does notbecome the master browser on
# your network. When set to yes, normal electionrules apply.
#
# os level = determines the precedence the serverhas in master browser
# elections. The default value should bereasonable.
#
# preferred master = when set to yes, Samba forcesa local browser election at
# start up (and gives itself a slightly higherchance of winning the election).
#
; localmaster = no
; os level= 33
; preferredmaster = yes
格式:
local master = yes/no
描述:
是否允许Samba服务器作为主浏览服务器。
ocal master用来指定SambaServer是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。
格式:
os level = 33
描述:
该数字越大被选举为主浏览服务器的可能性越高。
os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着SambaServer将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。
格式:
preferredmaster = yes
描述:
当为yes时被选为主浏览服务器的可能性越高。
设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
该部分包括Samba服务器名称解析方法相关配置。
#----------------------------- Name Resolution-------------------------------
#
# This section details the support for the WindowsInternet Name Service (WINS).
#
# Note: Samba can be either a WINS server or aWINS client, but not both.
#
# wins support = when set to yes, the NMBDcomponent of Samba enables its WINS
# server.
#
# wins server = tells the NMBD component of Sambato be a WINS client.
#
# wins proxy = when set to yes, Samba answers nameresolution queries on behalf
# of a non WINS capable client. For this to work,there must be at least one
# WINS server on the network. The default is no.
#
# dns proxy = when set to yes, Samba attempts toresolve NetBIOS names via DNS
# nslookups.
; winssupport = yes
; winsserver = w.x.y.z
; winsproxy = yes
; dns proxy= yes
格式:
wins support = yes
描述:
设置nmbd进程支持WINS服务器。
格式:
wins server = w.x.y.z
描述:
设置WINS服务器IP地址。
格式:
wins proxy = yes
描述:
设置WINS服务器IP地址。
格式:
dns proxy = yes
描述:
设置Samba服务器是否在无法联系WINS服务器时通过DNS去解析主机的NetBIOS名。
该部分包括Samba服务器打印机相关设置。
# --------------------------- Printing Options-----------------------------
#
# The options in this section allow you toconfigure a non-default printing
# system.
#
# load printers = when set you yes, the list ofprinters is automatically
# loaded, rather than setting them upindividually.
#
# cups options = allows you to pass options to theCUPS library. Setting this
# option to raw, for example, allows you to usedrivers on your Windows clients.
#
# printcap name = used to specify an alternativeprintcap file.
#
loadprinters = yes
cupsoptions = raw
; printcapname = /etc/printcap
# obtaina list of printers automatically on UNIX System V systems:
; printcapname = lpstat
; printing= cups
格式:
load printers = yes
描述:
是否自动共享打印机,而不根据[printer]标签内的配置。
格式:
load printers = raw
描述:
格式:
printcap name = /etc/printcap
描述:
设置获取打印机描述信息的文件位置。默认为/etc/printcap。
格式:
printing = cups
描述:
定义打印机的系统类型,可选项有:bsd、sysv、plp、lprng、aix、hpux、qnx、cups
该部分包括Samba服务器如何保留从Windows客户端复制或移动到Samba服务器共享目录文件的Windows文件属性的相关配置。
--------------------------- File System Options---------------------------
#
# The options in this section can be un-commentedif the file system supports
# extended attributes, and those attributes areenabled (usually via the
# "user_xattr" mount option). Theseoptions allow the administrator to specify
# that DOS attributes are stored in extendedattributes and also make sure that
# Samba does not change the permission bits.
#
# Note: These options can be used on a per-sharebasis. Setting them globally
# (in the [global] section) makes them the defaultfor all shares.
; maparchive = no
; maphidden = no
; map readonly = no
; mapsystem = no
; store dosattributes = yes
格式:
maparchive = no
描述:
当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的存档属性。默认yes。
格式:
maphidden = no
描述:
当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的隐藏文件属性。默认yes。
格式:
mapread only = no
描述:
当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的只读属性。默认为yes。
格式:
map system = no
描述:
当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的系统文件属性。默认为no。
格式:
store dos attributes = yes
描述:
当Windows客户端将文件复制或移动到Samba服务器共享目录时,是否保留文件在Windows中的相关属性(只读、系统、隐藏、存档属性)。默认为no。
格式:
unix charset = utf8
displaycharset = utf8
doscharset = utf8
描述:
设置与系统所使用的字符集相同。
实例如下:
[homes]
comment =Home Directories
browseable= no
writable= yes
; validusers = %S
; validusers = MYDOMAIN\%S
接下来对参数依次说明
描述:
comment = 任意字符串
格式:
说明:comment是对该共享的描述,可以是任意字符串。
描述:
path = 共享目录路径
格式:
path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m。
描述:
browseable =yes/no
格式:
browseable用来指定该共享是否可以浏览。
描述:
writable =yes/no
格式:
writable用来指定该共享路径是否可写。
描述:
available =yes/no
格式:
available用来指定该共享资源是否可用。
描述:
adminusers = 该共享的管理者
格式:
admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。
描述:
validusers = 允许访问该共享的用户
格式:
valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
描述:
invalidusers = 禁止访问该共享的用户
格式:
invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
描述:
write list = 允许写入该共享的用户
格式:
write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
描述:
public = yes/no
格式:
public用来指定该共享是否允许guest账户访问。
描述:
guestok = yes/no
格式:
意义同“public”。
描述:
mapto guest = bad user
格式:
是将匿名用户映射为nobody用户。