Samba 的核心配置文件/etc/samba/smb.conf是管理 Samba 服务器的关键,深入理解其结构和参数设置,是进行高级配置的基础。该文件主要分为全局设置和共享定义两大部分,下面对各部分的关键参数进行详细解析。
全局设置部分用于定义 Samba 服务器的整体行为和通用参数,这些参数对整个 Samba 服务生效。
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
security = user
map to guest = bad user
log file = /var/log/samba/log.%m
max log size = 50
syslog = 0
panic action = /usr/share/samba/panic-action %d
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
pam password change = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
注释说明:
- workgroup:指定 Samba 服务器所属的工作组名称,同一工作组内的计算机可方便地互相发现和访问。若网络环境存在 Windows 域,需将其设置为对应的域名。
- server string:Samba 服务器的描述信息,%v会自动替换为 Samba 的版本号,该信息在客户端浏览网络资源时显示。
- security:设置安全模式,常见模式有user(用户需提供用户名和密码验证)、share(共享级验证,同一共享密码所有用户通用,安全性较低)、domain(与 Windows 域集成进行验证)等。一般推荐使用user模式。
- map to guest:将非法用户映射为来宾用户,bad user表示所有无法通过正常验证的用户都将被视为来宾用户。可根据需求修改为never禁止来宾访问,增强安全性。
- log file:指定 Samba 日志文件的路径,%m代表客户端的 NetBIOS 名称,每个客户端对应独立的日志文件,便于故障排查。
- max log size:设置日志文件的最大大小,单位为 KB,超过此大小将自动进行日志切割。
- syslog:设置是否将 Samba 日志输出到系统日志,0 表示不输出。
- panic action:当 Samba 服务器发生严重错误(如崩溃)时,指定执行的脚本,用于记录错误信息或进行应急处理。
- encrypt passwords:启用密码加密功能,确保用户密码在网络传输过程中的安全性。
- passdb backend:指定用户数据库的后端类型,tdbsam是默认的轻型数据库,适用于小型网络;大型网络可考虑使用ldapsam(与 LDAP 集成)。
- obey pam restrictions:启用后,Samba 将遵循 PAM(Pluggable Authentication Modules,可插拔认证模块)的限制,如用户锁定、密码策略等。
- pam password change:允许用户通过 Samba 更改其系统密码。
- passwd program:指定用于更改密码的程序,默认使用系统的passwd命令。
- passwd chat:定义与密码更改程序交互的对话脚本,确保密码更改过程顺利进行。
- unix password sync:启用后,用户在 Samba 中更改密码时,系统密码也会同步更新。
- socket options:设置套接字选项,TCP_NODELAY禁用 Nagle 算法,减少网络延迟;IPTOS_LOWDELAY设置数据包的服务类型,提高数据传输的实时性 。
共享定义部分用于配置具体的共享资源,如共享目录、打印机等,每个共享资源都有独立的参数设置。
[share]
comment = Shared Directory
path = /home/share
browseable = yes
writable = yes
guest ok = no
read only = no
valid users = @users
invalid users = root
create mask = 0664
directory mask = 0775
注释说明:
- comment:共享资源的描述信息,显示在客户端的共享资源列表中,方便用户识别。
- path:指定共享资源在服务器上的实际路径。
- browseable:设置共享资源是否在网络中可见,yes表示其他用户可以在网络中浏览到该共享资源。
- writable:设置共享资源是否可写,yes表示用户拥有写入权限。
- guest ok:设置是否允许来宾用户访问,no表示仅允许通过身份验证的用户访问。
- read only:设置共享资源是否为只读,与writable参数互斥,若writable = yes,则read only自动失效。
- valid users:指定允许访问该共享资源的用户或用户组,@users表示users组中的所有用户都可访问。
- invalid users:指定禁止访问该共享资源的用户,如root用户。
- create mask:设置新创建文件的默认权限掩码,0664表示文件所有者和所属组具有读写权限,其他用户只有读权限。
- directory mask:设置新创建目录的默认权限掩码,0775表示目录所有者和所属组具有读写执行权限,其他用户只有读和执行权限。
在企业网络环境中,Samba 可以替代 Windows 域控制器,实现对用户、组和计算机的集中管理。以下是在 CentOS 7 上配置 Samba 作为域控制器的步骤。
1、安装必要软件包:
yum install samba samba-winbind krb5-workstation -y
2、初始化 Samba 数据库:
samba-tool domain provision --realm=MYDOMAIN.COM --domain=MYDOMAIN --use-rfc2307
将MYDOMAIN.COM替换为实际的域名,MYDOMAIN替换为域名的短名称(大写)。该命令会创建 Samba 的数据库,并生成相关配置文件。
3、配置smb.conf文件:修改smb.conf文件,添加以下全局设置:
[global]
realm = MYDOMAIN.COM
security = ads
winbind enum users = yes
winbind enum groups = yes
template shell = /bin/bash
template homedir = /home/%D/%U
注释说明:
- realm:指定 Samba 域的域名。
- security = ads:设置安全模式为 Active Directory 模式,与 Windows 域集成。
- winbind enum users和winbind enum groups:启用后,Samba 服务器可以枚举域中的用户和组。
- template shell:指定新创建用户的默认 Shell。
- template homedir:指定新创建用户的主目录模板,%D表示域名,%U表示用户名。
4、配置 Kerberos:编辑/etc/krb5.conf文件,添加以下内容:
[libdefaults]
default_realm = MYDOMAIN.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
udp_preference_limit = 0
[realms]
MYDOMAIN.COM = {
kdc = samba-dc.mydomain.com
admin_server = samba-dc.mydomain.com
}
[domain_realm]
.mydomain.com = MYDOMAIN.COM
mydomain.com = MYDOMAIN.COM
将MYDOMAIN.COM和samba-dc.mydomain.com替换为实际的域名和 Samba 域控制器的主机名。
5、重启服务:
systemctl restart smb nmb winbind
Samba 支持集成 WINS(Windows Internet Name Service)和 DNS 服务,方便网络中计算机通过名称而非 IP 地址访问共享资源。
1、配置 WINS 服务:在smb.conf文件的全局设置中,添加以下参数:
[global]
wins support = yes
wins server = 192.168.1.100 # 替换为实际的WINS服务器IP地址
若 Samba 服务器本身作为 WINS 服务器,可设置wins server = localhost。
2、配置 DNS 服务:在smb.conf文件中,添加以下参数:
[global]
dns proxy = no
name resolve order = bcast host wins
dns proxy = no表示不启用 DNS 代理;name resolve order指定名称解析的顺序,优先使用广播(bcast),然后是主机文件(host),最后是 WINS 服务器(wins)。
1、用户映射:通过用户映射,可以将不同系统的用户映射到同一 Samba 用户,方便统一管理。创建用户映射文件/etc/samba/smbusers,添加映射规则,例如:
root = administrator admin
testuser = windows_user
上述规则表示将 Linux 系统的root用户映射为 Windows 系统的administrator和admin用户,将testuser映射为windows_user。
然后在smb.conf文件的全局设置中,添加以下参数启用用户映射:
[global]
username map = /etc/samba/smbusers
2、加密口令设置:Samba 默认使用加密口令,若需要重新生成加密口令文件,可执行以下命令:
pdbedit -a -u testuser # 替换为实际用户名
执行命令后,按照提示输入密码,即可为指定用户设置加密口令。
1、优化smbd进程参数:smbd进程负责处理客户端请求,通过调整其参数可提高处理效率。在smb.conf文件的全局设置中,添加或修改以下参数:
[global]
max log size = 100 # 适当增大日志文件大小,减少日志切割频率
server max protocol = SMB3 # 强制使用最新的SMB3协议,提高传输性能
deadtime = 10 # 设置闲置连接的超时时间(分钟),释放资源
max open files = 10000 # 设置最大打开文件数,根据服务器性能调整
2、优化nmbd进程参数:nmbd进程负责名称解析,可通过以下参数优化:
[global]
name cache timeout = 600 # 设置名称缓存的超时时间(秒),减少重复解析
1、调整 MTU 值:MTU(Maximum Transmission Unit,最大传输单元)影响网络传输效率,可通过以下命令查看当前 MTU 值:
ifconfig eth0 # 将eth0替换为实际网卡名称
若网络环境支持,可尝试增大 MTU 值,例如设置为 9000(需网络设备支持):
ifconfig eth0 mtu 9000
并在/etc/sysconfig/network-scripts/ifcfg-eth0文件中添加MTU=9000,使其永久生效。
2、启用 TCP 优化:在smb.conf文件的全局设置中,添加以下参数:
[global]
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
SO_RCVBUF和SO_SNDBUF分别设置接收和发送缓冲区大小,提高数据传输效率。
3、缓存机制设置与管理
Samba 支持文件缓存功能,通过合理设置缓存参数,可减少磁盘 I/O,提高数据访问速度。在smb.conf文件的共享定义部分,添加以下参数:
[share]
read cache = yes
write cache = yes
cache directory = /var/cache/samba # 指定缓存目录
max readahead = 131072 # 设置最大预读数据量(字节)
max writebehind = 131072 # 设置最大后写数据量(字节)
注释说明:
- read cache和write cache:分别启用读缓存和写缓存。
- cache directory:指定缓存文件的存储目录,需确保该目录有足够的磁盘空间。
- max readahead:设置预读数据量,当用户读取文件时,Samba 会提前读取更多数据到缓存中。
- max writebehind:设置后写数据量,Samba 会先将数据写入缓存,再批量写入磁盘,减少磁盘 I/O 次数。