Linux下的samba服务器配置文件详解 smb.conf
workgroup = MYGROUP
//此项表示在Windows操作系统中的“网上邻居”将会出现的SAMBA服务器所属群组,默认MYGROUP,不区分大小写。
serverstring = Samba Server
//此项表示在Windows客户端启动SAMBA服务器的内容窗口后,所显示的说明。
;hosts allow = 192.168.1. 192.168.2. 127.
//此项在默然情况下的配置下不使用,它可以用来设置局域网中容许访问SAMBA服务器的主机、子网或者是网域。如果超过一个必须用逗号隔开。
例子:
hostsallow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hostsallow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接
printcap name = /etc/printcap
//此项是用来设置开机时自动加载的打印机配置文件名称和路径
loadprinters = yes
//表示是否容许打印机中的所有打印机,在开机时自动加载浏览列表,以支持客户端的浏览功能
printing = cups
//此项用来指定打印系统的类型
; guest account = pcguest
//此项默认不使用,它是用来设置Guest帐号名
log file = /var/log/samba/%m.log
//此项可为所有连接到SAMBA服务器的计算机建立个别的记录日志
max log size = 0
//此项可以设置每个记录日志大小的上限,单位是KB
security = user
//指定SAMBA服务器使用的安全性等级
;password server =<NT-Server-Name>
//此项功能在默认的配置下不使用,而且只有在上个选项设置为“security=server”时才生效,它是用来指定密码服务的名称,所以要使用NETBIOS名称,也可以使用“passwordserver=*”的方式来自动寻找可用的域控制器
; password level = 8
//这个选项是为了避免SAMBA服务器和客户端之间容许密码大写位数不同而产生的错误
; username level = 8
//这个选项是为了避免SAMBA服务器和客户端之间容许帐号大写位数不同而产生的错误
encrypt passwords = yes
//此项表示是否指定用户密码以加密的形态发送到SAMBA服务器
smb passwd file = /etc/samba/smbpasswd
//SAMBA服务器使用的密码文件路径
;ssl CA certFile =/usr/share/ssl/certs/ca-bundle.crt
//它用来指定包含所有受信任CA名称的文件
unix password sync = Yes
// 此项是用来把SAMBA密码文件中的加密内容修改时,可以使用此选项进行同步
passwd program = /usr/bin/passwd %u
//此项用来指定设置UNIX帐号密码的程序,其中%U表示用户名称
passwd chat = *New*password* %n\n *Retype*new*password* %n\n*passwd:*all*authentication*tokens*updated*successfully*
//此项用来设置用户在进行Linux密码转换成SAMBA服务器密码时,屏幕出现的指示字符串,以及与用户产生交互窗口
pampassword change = yes
//此项表示可以使用PAM来修改SMB客户端的密码,而不使用“passwd program”选项中指定的程序
; username map = /etc/samba/smbusers
//此选项指定一个配置文件,在此文件中包含客户端与服务端上的用户对应数据
;include = /etc/samba/smb.conf.%m
//此选项容许SAMBA服务器使用其他的配置文件
; obey pam restrictions = yes
//此项可以决定是否采用PAM帐号及会话管理的指令
socket options = TCP_NODELAY SO_RCVBUF=8192SO_SNDBUF=8192
//这个选项在编写TCP/IP程序时相当重要,因为可以借此调整SAMBA服务器运行时的效率
;interfaces = 192.168.12.2/24 192.168.13.2/24
//此项可以使SAMBA服务器监视多个往来接口,如果服务器上有多张网卡应该配置此项
在配置时可以写成:
interfaces =eth0
interfaces =172.17.4.150
;remote announce = 192.168.1.255 192.168.2.44
//此项容许NMBD定期公布SAMBA服务器的IP地址和群组名称到远程的网络或主机
#========== Share Definitions ===============
[homes]//用户个日的主目录设置内容
comment = HomeDirectories //主目录注释
browseable =no //是否容许其他用户浏览个人主目录
writable =yes//是否容许写入个人目录
valid users =%S //容许登陆的用户,%S表示当前登陆的用户
create mode =0664//新建文件的默认权限
directory mode =0775 //新建目录的默认权限
; map to guest = baduser
//当用户输入不正确的帐号和密码时,可以利用“map toguest”选项来设置处理的方式,但是必须把前面的“security”选项设为“user”“server”“domain”
设置项
说明
user
拒绝访问
server
如果帐号正确,但密码错误,容许以Guest登陆
domain
如果帐号和密码都错误,还是容许以Guest登陆
;[netlogon]//登陆网域时的“netlogon”目录设置内容
;comment = Network LogonService//主目录注释
;path =/usr/local/samba/lib/netlogon//实际访问资源的本机路径
;guest ok =yes//连接时是否需要密码
;writable =no//是否容许写入此目录
;share modes =no//是否容许目录中的文件在不同的用户之间共享
;[Profiles]//用户配置文件目录设置内容
;path =/usr/local/samba/profiles//实际访问资源的本机路径
;browseable =no//是否容许浏览此主目录
;guest ok =yes//连接时是否需要密码
[printers]//设置打印机环境内容
comment = AllPrinters //打印机注解
path =/var/spool/samba //打印队列路径
public=yes //是否容许Guest打印
browseable =no //是否容许浏览打印机内的暂时存盘内容
guest ok =no //连接时是否不需要密码
writable =no//是否容许写入此

Samba的主配置文件。但所包含的内容并不是很全,详见man smb.conf
所有以;或#开头的行为注释行,将被忽略掉。在这个例子中我们使用;表示可以由你来修改或设置的部分,而#则表示真正意义上的注释。
注意:不论你何时何地修改了这个文件,你都应运行一下命令“testparm“来测试你是否犯了一些基本语法的错误。
1、全局设置
[global]
# workgroup = NT-Domain-Name or Workgroup-Name
workgroup = MYGROUP
下面的这句话是后加的,加入的意义为:使WIN用户可以看到主机的名字,但我将此行注释掉后,没看到什么影响。
netbios name = express
下面设置的是服务器的字符串,相当于NT中的计算机说明部分
server string = Samba Server
下面的选项对于安全性很重要。他允许你对是否可以进行本地网络连接的机器进行了限制。
hosts allow = 192.168.1.50 192.168.1.43 192.168.1.44 192.168.1.45192.168.1.46 192.168.1.47 192.168.1.48 192.168.1.49
如果想要自动共享打印机而不是个别地进行单独设置,使用下面的选项:
printcap name = /etc/printcap
load printers = yes
除非你是非标准的,否则下面的选项对于你说清楚打印系统的类型并不是很必要。当前支持的打印系统主要有以下几类:
# bsd, sysv, plp, lprng, aix, hpux, qnx, cups
printing = cups
如果想要一个guest账号的话就不用注释下面的行。你必须把这个加入到/etc/passwd中,否则用户“nobody“会被使用。
; guest account = pcguest
下面的选项告诉samba对不同的机器连接使用不同的日志文件。小心如果你允许访问的机器太多的话,文件可能极多哟!!!:)
log file = /var/log/samba/%m.log
设置log文件的大小(KB)(# Put a capping on the size of the log files (inKb).)
max log size = 0
安全格式。大多数用户使用用户级安全。详见security_level.txt。
security = share
使用密码服务选项,仅用于security = server模式
参数列表可以包括:
# password server = My_PDC_Name [My_BDC_Name][My_Next_BDC_Name]
# 或自动查找域控制器
# password server = *
; password server =<NT-Server-Name>
对于所有的上面和下面的组成部分的_n_characters密码所允许的匹配级别
; password level = 8
; username level = 8
你可能想使用密码编码。见在samba文档中的ENCRYPTION.txt, Win95.txt和WinNT.txt。
除非你已经仔细的读过了那些文档,否则不要激活下面的选项:
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
当samba被建成为支持SSL的模式时,下面需要从大量的假的错误中保持smbclient。(原文如下:
# The following is needed to keep smbclient from spouting spuriouserrors
# when Samba is built with support for SSL.
; ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt
下面的选项需要允许从windows对linux系统的密码进行修改。
# 注意:上面带有'encrypt passwords' 和'smb passwd file'选项使用这些。
# 另: 如果仅是允许工作站改变加密的SMB密码那么你不需要这些。它们允许Unix密码与SMB密码保持同步。
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n*passwd:*all*authentication*tokens*updated*successfully*

你可以使用PAM的密码改变控制标记。如果激活的活,当一个SMB客户端请求代替了在密码程序列表时,PAM将用于密码改变。对于大多数的设置,不改变密码字符参数而激活这个也是可能的。
pam password change = yes
Unix用户可能映射不同的SMB用户名。
username map = /etc/samba/smbusers
在每一台机器的基础上,使用下面的行可以使你定制你的配置。%m以连接机器的netbios名代替。
; include = /etc/samba/smb.conf.%m
这个参数控制samba是否服从于PAM账号和对话管理指示。默认情况下是使用PAM仅清除文本证明且忽略任何的账号或对话管理。注意:当加密密码=yes时,samba总是忽略PAM的证明。
obey pam restrictions = yes
很多人都会发现这个选项优化了性能。详见speed.txt和帮助手册页。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
配置samba使用多重接口。
如果你有多个网络接口的话,必须把他们在下面列出来。详见man。
; interfaces = 192.168.12.2/24 192.168.13.2/24
配置请求播出同步到远程浏览器,或从一个主机同步浏览器列表或从/到整个子网(如下)。
; remote browse sync = 192.168.3.25 192.168.5.255
使主机将自己广播到本地的子网。
; remote announce = 192.168.1.255 192.168.2.44
浏览器控件选项:
如果你不想让你的samba在你的网络中变成一个主浏览器,那么设置local master为no,否则将采用正常的规则。
; local master = no
os level决定在主浏览器的中被提取的优先级。默认值是很合理的。
; os level = 33
域master指定samba是域主浏览器。这允许samba在子网之间比较浏览列表。如果你已经有了一个WinNT的主域控制器的话,就不要设置这个选项。
; domain master = yes
首选master使samba在启动时拒绝一个本地浏览器的选出,且给他一些小的较高的机会让其来选出。
; preferred master = yes
如果你要samba成为Win95工作站的域登录服务器的话则激活它。
; domain logons = yes
如果你激活了domain logons,那么你可以让每一台机器或每一个用户登录角本运行一个指定的登录批处理文件。原文如下:if youenable domain logons then you may want a per-machine or per userlogon script run a specific logon batch file per workstation(machine)
; logon script = %m.bat
每一个用户名都运行一个指定的登录批处理文件
; logon script = %U.bat

# 存储动态的profile(仅针对95与NT)
# %L 代表netbios name, %U 是一个用户名
# 不能注释掉下面的[Profiles]共享。
; logon path = \%L\Profiles\%U
支持WINS部分:告诉samba组件的NMBD去激活WINS服务。
; wins support = yes
WINS服务器-告诉samba组件的NMBD成为一个WINS客户端。
注意:samba即可以是一个WINS服务器,也可以是一个客户端,或都不是。
; wins server = w.x.y.z
WINS代理-原文如下,没法翻译(Tells Samba to answer name resolution queries onbehalf of a non WINS capableclient,),执行这件事必须要求在网络中至少有一个Wins服务器。默认情况下是NO。
; wins proxy = yes
# DNS Proxy –告诉samba是否经过DNS的nslookup试着去解析NETBIOS名。1.9.17的内置默认值是yes,目前已经改为1.9.18的no。
dns proxy = no
实例保存可以很简洁-系统默认值是_no_
注意:可以在每一个共享基础上设置
; preserve case = no
; short preserve case = no
默认实例是对于所有的DOS文件都大写
; default case = lower
对于此选项要很小心-它可能带来一些想不到的事情。
; case sensitive = no
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
如果不想要samba不承认已经映射为guest的用户,可用如下设置
; map to guest = bad user
如果想创建netlogon目录给域登录,不要注释下面的内容。
; [netlogon]
; comment = Network Logon Service
; path = /usr/local/samba/lib/netlogon
; guest ok = yes
; writable = no
; share modes = no
想提供一个指定的不固定的共享profile那么就不要注释下面的内容,默认使用用户主目录。
;[Profiles]
; path = /usr/local/samba/profiles
; browseable = no
; guest ok = yes
注意:如果你有一个BSD风格的打印系统,则没有必须单独的特别指定每一个打印机。
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
设置public=yes表示允许’guest account’打印
guest ok = no
writable = no
printable = yes
下面的内容对人们共享文件是有用的。
;[tmp]
; comment = Temporary file space
; path = /tmp
; read only = no
; public = yes
公用的可访问的目录,除了在staff组中的成员外,对其它人为只读
;[public]
; comment = Public Stuff
; path = /home/nw
; public = yes
; writable = yes
; printable = no
; write list = @staff

私有打印机,仅仅fred本人可用。打印池中的数据将被放到fred的主目录中。注意:fred用户无论在什么地方都必须对打印池有写访问的权限。
;[fredsprn]
; comment = Fred's Printer
; valid users = fred
; path = /home/fred
; printer = freds_printer
; public = no
; writable = no
; printable = yes
私有目录,仅能对fred开放。注意fred对这个目录需要写访问的权限。
;[fredsdir]
; comment = Fred's Service
; path = /usr/somewhere/private
; valid users = fred
; public = no
; writable = yes
; printable = no
允许你制作配置文件去引入的连接到这里的每一台机器都有不同的目录的服务。
使用%U选去配置用户名,%m代替连接到的机器名。
;[pchome]
; comment = PC Directories
; path = /usr/local/pc/%m
; public = no
; writable = yes
公共可访问的目录,对所有的用户都可读/写。注意:在这个目录中的所有由用户创建的文件都会被标识成默认用户所有。所以有访问仅限的用户可以删除别的用户的文件。很明显这个目录必须是可以被默认用户写的。另一个用户当然可以指定,这样所有的文件都将被那个用户所替代。
[public]
path = /tmp/aaaa
public = yes
guest ok = yes
writable = yes
printable = no
下面的两个例子是怎样共享一个目录给两个用户,在这个共享目录中他们可以放置文件且分别属于各自所有。在这个设置中,目录将可以被两个用户同时使用且在其上有粘滞位保护。很明显,可以扩展为多个用户的情况。
;[myshare]
; comment = Mary's and Fred's stuff
; path = /usr/somewhere/shared
; valid users = mary fred
; public = no
; writable = yes
; printable = no
; create mask = 0765
以下是个人实际的设置
[sharedir]
path = /home/nw
public = yes
guest ok = yes
writable = yes