Samba 源码编译安装与配置完整指南(适用于 Linux 系统)
本文详细介绍了如何从源码编译安装 Samba 服务,涵盖依赖安装、配置选项、编译构建、systemd 服务配置、启动管理及基本使用方法。适用于 Fedora、CentOS、Rocky Linux、Ubuntu、Debian、openSUSE 等主流 Linux 发行版。
1. 解压源码包
首先下载并解压 Samba 源码包(以版本 x.y.z 为例):
tar -zxf samba-x.y.z.tar.gz
cd samba-x.y.z
2. 安装依赖
2.1 使用官方脚本(适用于 Fedora / CentOS / Ubuntu / Debian / openSUSE)
Samba 提供了针对常见发行版的依赖安装脚本:
cd <samba-source-dir>/bootstrap/generated-dists/<distro-with-version>
./bootstrap.sh
将
<distro-with-version>替换为实际目录名,例如fedora38。
2.2 手动安装依赖(以 Rocky Linux 为例)
若您的系统未被官方脚本覆盖,请手动安装以下依赖:
dnf install -y gcc libtirpc-devel glibc-devel zlib-devel gnutls-devel \
libattr-devel python3-devel lmdb-devel gpgme-devel perl-Parse-Yapp \
jansson-devel libarchive-devel libacl-devel openldap-devel pam-devel \
rpcgen libtalloc-devel libtdb-devel libtevent-devel
2.3 Samba 4.19.3+ 额外依赖
从 Samba 4.19.3 起,可能需要额外安装 Python 和 D-Bus 相关组件:
pip install markdown dnspython3
dnf install -y dbus-c++-devel dbus-python-devel python3-markdown python3-dns
3. 配置编译选项
3.1 查看所有配置选项
./configure --help
3.2 默认配置
./configure
3.3 自定义配置示例
以下为生产环境中常用的 FHS 兼容配置:
./configure \
--sbindir=/usr/sbin \
--with-piddir=/run \
--with-configdir=/etc/samba \
--bindir=/usr/bin \
--localstatedir=/var \
--enable-fhs \
--libdir=/usr/lib64 \
--with-modulesdir=/usr/lib64/samba \
--sysconfdir=/etc \
--with-lockdir=/var/lib/samba/lock \
--with-cachedir=/var/lib/samba \
--enable-debug \
--enable-pthreadpool \
--valgrind \
--valgrind-log="/var/log/samba/" \
--with-systemd
⚠️ 注意:如果对 Samba 进行了二次开发,需在
./configure前设置环境变量以避免编译3链接问题,例如:export LDFLAGS="-lrt"
3.4 常见 configure 参数说明
| 参数 | 说明 |
|---|---|
--prefix=/usr/local/myinstall | 指定统一安装前缀(默认分散安装) |
--with-tk=/usr/local | 指定 Tk 库路径 |
--with-php-config=/path/to/php-config | 指定 PHP 配置工具路径(用于模块冲突时) |
--without-gnu-ld | 不使用系统 GNU ld 链接器 |
3.5 设置编译环境变量(交叉编译等场景)
CC=/usr/bin/mipsel-linux-gcc
CFLAGS="-g -O2 -I/home/a/buildspace/termcap-1.3.1/install/include"
LDFLAGS="-L/home/a/buildspace/termcap-1.3.1/install/lib"
LIBS="-lpthread"
4. 编译与安装
Samba 使用 WAF 构建系统,但兼容 make 接口:
make && make install
⚠️ 重要提示:若系统默认 Python 为 v2,WAF 可能失败。请显式指定 Python 3:
PYTHON=python3.9 make -j6 PYTHON=python3.9 make install
5. 配置 systemd 服务(以 Fedora 为例)
默认安装后可能缺少 systemd 单元文件。请根据系统创建以下三个服务文件(路径可能因发行版而异):
5.1 /usr/lib/systemd/system/smb.service
[Unit]
Description=Samba SMB Daemon
Documentation=man:smbd(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target nmb.service winbind.service
[Service]
Type=simple
PIDFile=/run/smbd.pid
LimitNOFILE=16384
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
[Install]
WantedBy=multi-user.target
5.2 /usr/lib/systemd/system/nmb.service
[Unit]
Description=Samba NMB Daemon
Documentation=man:nmbd(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=simple
PIDFile=/run/nmbd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
[Install]
WantedBy=multi-user.target
5.3 /usr/lib/systemd/system/winbind.service
[Unit]
Description=Samba Winbind Daemon
After=syslog.target network.target nmb.service
[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=simple
NotifyAccess=all
PIDFile=/run/winbindd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/winbindd --foreground --no-process-group "$WINBINDOPTIONS"
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
✅ 建议:默认配置文件为
Type=notify,建议改为改为Type=simple,避免因启动超时导致服务失败。
5.4 重载 systemd 并启动服务
systemctl daemon-reload
systemctl start smb nmb winbind
# 或使用旧版别名(部分系统支持)
systemctl start samba
5.5 停止 Samba 服务
-
方法 1(推荐):
systemctl stop smb nmb winbind -
方法 2(手动 kill):
ps -aux | grep smbd kill <pid1> <pid2>注意:使用
smbstatus显示的 PID 可终止特定客户端连接,不影响整体服务。
5.6 查看服务状态
# 方法 1
systemctl status smb nmb winbind
# 方法 2
smbstatus
按
q或Ctrl+C退出smbstatus。
6. 基本使用与配置
6.1 创建 Samba 配置文件
编辑 /etc/samba/smb.conf(若不存在则新建):
[global]
client max protocol = SMB3
load printers = No
map to guest = Bad User
printcap name = cups
security = USER
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
guest ok = Yes
[homes]
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
[myshare]
comment = public document
create mask = 0777
directory mask = 0777
path = /home/a/share
read only = No
valid users = a root smb_user
⚠️ 权限要求:确保共享目录存在且权限匹配,例如:
mkdir -p /home/a/share chmod 777 /home/a/share
6.2 添加 Samba 用户
# 创建系统用户(可选)
sudo useradd username -g usergroup
# 设置 Samba 密码(必须)
sudo smbpasswd -a username
6.3 客户端访问共享
Linux 客户端
# 确保挂载点存在
mkdir -p /cifs
# 挂载 CIFS 共享(SMB3)
mount -t cifs \
-o username=a,password=12345678,dir_mode=0777,file_mode=0777,nounix,vers=3.0 \
//10.0.0.10/myshare /cifs
Windows 客户端
在任务栏搜索框中输入:
\\10.0.0.10\myshare
然后输入用户名和密码即可访问。
总结
通过本文,您已掌握从源码编译安装 Samba 的完整流程,包括依赖处理、自定义配置、systemd 集成及基础共享配置。此方案适用于对安全性、性能或定制化有较高要求的生产环境。