Proxmox VE 部署 Samba 服务指南 🖥️

PVE Samba


📋 目录


🌟 简介

本指南将帮助您在 Proxmox VE (PVE) 上部署 Samba 服务,实现文件共享功能。直接在 PVE 主机上安装 Samba 比通过虚拟机运行黑群晖性能更高。

🔗 教程链接: https://foxi.buduanwang.vip/virtualization/1754.html/


🔧 一、安装 Samba 服务并创建用户

1. 安装 Samba 服务

1
apt update && apt install samba -y

2. 创建 admin 用户并设置密码

1
useradd admin && smbpasswd -a admin

系统会提示您输入并确认 admin 用户的 Samba 密码


⚙️ 二、配置 Samba 服务

1. 备份原始配置文件

1
cp -i /etc/samba/smb.conf /etc/samba/smb.conf.bak && cd /etc/samba && ls

2. 创建共享目录

1
mkdir -pm 755 /mnt/ntfs

3. 创建完整的 Samba 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
chmod +x /etc/samba/smb.conf && cat > /etc/samba/smb.conf <<'EOF'
[global]

## 浏览/识别 ###
# 将此更改为您的 Samba 服务器将要加入的工作组/NT 域名称
workgroup = WORKGROUP

#### 网络 ####
# 要绑定到的特定接口/网络集合
# 这可以是接口名称或 IP 地址/子网掩码;
# 通常推荐使用接口名称
; interfaces = 127.0.0.0/8 eth0
# 仅绑定到指定的接口和/或网络;您必须使用
# 上面的 'interfaces' 选项才能使用此功能。
# 如果您的 Samba 机器没有受到防火墙的保护或本身就是防火墙,则建议启用此功能。
# 但是,此选项不能正确处理动态或非广播接口。
; bind interfaces only = yes

#### 调试/计费 ####
# 这告诉 Samba 为每台连接的机器使用一个单独的日志文件
log file = /var/log/samba/log.%m
# 限制单个日志文件的大小(以 KiB 为单位)。
max log size = 1000
# 我们希望 Samba 只记录到 /var/log/samba/log.{smbd,nmbd}。
# 如果您想将重要消息发送到 syslog,也可以添加 syslog@1。
logging = file
# 当 Samba 崩溃时做点有意义的事情:给管理员发送一个回溯邮件
panic action = /usr/share/samba/panic-action %d

####### 认证 #######
# 服务器角色。定义 Samba 将运行的模式。可能的值有 "独立服务器"、"成员服务器"、"经典主域控制器"、"经典备份域控制器"、"活动目录域控制器"。
#
# 大多数人会想要 "独立服务器" 或 "成员服务器"。
# 作为 "活动目录域控制器" 运行将需要首先运行 "samba-tool domain provision" 来清除数据库并创建一个新域。
server role = standalone server
obey pam restrictions = yes
# 此布尔参数控制当 passdb 中的加密 SMB 密码被更改时,Samba 是否尝试同步 Unix 密码与 SMB 密码。
unix password sync = yes
# 在 Debian GNU/Linux 系统上,要使 Unix 密码同步工作,必须设置以下参数(感谢 Ian Kahan <<kahan@informatik.tu-muenchen.de> 发送了在 Debian Sarge 中 passwd 程序的正确聊天脚本)。
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
# 此布尔值控制当 SMB 客户端请求更改密码时,PAM 是否将用于密码更改,而不是 'passwd program' 中列出的程序。默认为 'no'。
pam password change = yes
# 此选项控制如何将不成功的认证尝试映射到匿名连接
map to guest = bad user

########## 域 ############
# 如果设置了 'server role = classic primary domain controller'、'server role = classic backup domain controller' 或 'domain logons',则以下设置才会生效
# 它指定了用户配置文件的位置(从客户端的角度来看)。以下需要在 Samba 服务器上设置 [profiles] 共享(见下文)
; logon path = \\%N\profiles\%U
# 另一个常见的选择是将配置文件存储在用户的主目录中(这是 Samba 的默认设置)
# logon path = \\%N\%U\profile
# 如果设置了 'domain logons',则以下设置才会生效
# 它指定了用户主目录的位置(从客户端的角度来看)
; logon drive = H:
# logon home = \\%N\%U
# 如果设置了 'domain logons',则以下设置才会生效
# 它指定了登录期间要运行的脚本。脚本必须存储在 [netlogon] 共享中
# 注意:必须以 'DOS' 文件格式约定存储
; logon script = logon.cmd
# 这允许通过 SAMR RPC 管道在域控制器上创建 Unix 用户。示例命令创建了一个 Unix 密码被禁用的用户帐户;请根据您的需要进行调整
; add user script = /usr/sbin/useradd --create-home %u
# 这允许通过 SAMR RPC 管道在域控制器上创建机器帐户。
# 以下假设系统上存在一个 "machines" 组
; add machine script = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u
# 这允许通过 SAMR RPC 管道在域控制器上创建 Unix 组。
; add group script = /usr/sbin/addgroup --force-badname %g

############ 杂项 ############
# 使用以下行可以基于每台机器自定义您的配置。
# %m 被替换为连接的机器的 netbios 名称
; include = /home/samba/etc/smb.conf.%m
# 一些 winbind 的默认设置(确保您没有为其他用途使用这些范围)。
; idmap config * : backend = tdb
; idmap config * : range = 3000-7999
; idmap config YOURDOMAINHERE : backend = tdb
; idmap config YOURDOMAINHERE : range = 100000-999999
; template shell = /bin/bash
# 设置 usershare 选项以允许非 root 用户使用 net usershare 命令共享文件夹。
# 最大用户共享数量。0 表示禁用 usershare。
# usershare max shares = 100
# 允许已被授予 usershare 权限的用户创建公共共享,而不仅仅是经过身份验证的共享
usershare allow guests = yes

#======================= 共享定义 =======================
[homes]
comment = Home Directories
browseable = no
# 默认情况下,主目录以只读方式导出。如果您想要能够写入它们,请将下一个参数更改为 'no'。
只读 = 是
# 出于安全原因,文件创建掩码设置为 0700。如果您想要创建具有 group=rw 权限的文件,请将下一个参数设置为 0775。
创建掩码 = 0700
# 出于安全原因,目录创建掩码设置为 0700。如果您想要创建具有 group=rw 权限的目录,请将下一个参数设置为 0775。
目录掩码 = 0700
# 默认情况下,\\服务器\用户名 共享可以由任何有访问 Samba 服务器权限的人连接。
# 下一个参数确保只有 "用户名" 才能连接到 \\服务器\用户名
# 当使用外部认证方案时,可能需要调整
有效用户 = %S

# 取消注释以下内容并为域登录创建 netlogon 目录
# (您需要配置 Samba 以充当域控制器。)
;[netlogon]
; comment = Network Logon Service
; path = /home/samba/netlogon
; guest ok = yes
; read only = yes

# 取消注释以下内容并创建 profiles 目录以存储用户配置文件(见上面的 "登录路径" 选项)
# (您需要配置 Samba 以充当域控制器。)
# 下面的路径应该是可写入的,以便在用户第一次登录时可以创建他们的配置文件目录
;[profiles]
; comment = Users profiles
; path = /home/samba/profiles
; guest ok = no
; browseable = no
; create mask = 0600
; directory mask = 0700

[printers]
comment = All Printers
browseable = no
path = /var/tmp
printable = yes
guest ok = no
read only = yes
create mask = 0700

# Windows 客户端将此共享名称视为可下载打印机驱动程序的来源
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
# 取消注释以允许远程管理 Windows 打印机驱动程序。
# 您可能需要将 'lpadmin' 替换为您的管理员用户所在的组的名称。
# 请注意,您还需要为这些用户设置适当的 Unix 权限,以便他们对驱动程序目录具有写入权限
; 写入列表 = root, @lpadmin

######## 我的samba共享设置 ########

[Backup]
comment = mysamba
path = /var/lib/vz/dump
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no

[PVE-ntfs]
comment = mysamba
path = /mnt/ntfs
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
EOF

systemctl restart smbd

4. 追加额外共享配置(可选)

如果需要添加更多共享,可以使用以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mkdir -pm 755 /mnt/mydisk && chmod +x /etc/samba/smb.conf && cat >>/etc/samba/smb.conf <<'EOF'
[PVE-mydisk]
comment = mysamba
path = /mnt/mydisk
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
EOF

systemctl restart smbd

🚀 三、一键部署脚本

1. 创建并执行一键部署脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
touch ~/smb.sh && cat > ~/smb.sh <<'EOF'
#!/bin/bash
apt update && apt install samba -y
mkdir -pm 755 /mnt/ntfs && cat >>/etc/samba/smb.conf <<MYENDMARK
######## 我的samba共享设置 ########

[local]
## 这是我的共享名称
comment = mysamba
## 共享目录的路径
path = /var/lib/vz/
## 指定共享是否应该在网络邻居中被浏览到,yes显示共享名称,no隐藏共享名称。
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no

[PVE-ntfs]
## 这是我的共享名称
comment = mysamba
## 共享目录的路径
path = /mnt/ntfs
## 指定共享是否应该在网络邻居中被浏览到,yes显示共享名称,no隐藏共享名称。
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
MYENDMARK

## 新建admin用户 && 为admin用户创建两次密码
useradd admin 2>/dev/null || true
(echo yifan0719; echo yifan0719) | smbpasswd -a -s admin
systemctl restart smbd
EOF

chmod +x ~/smb.sh && bash ~/smb.sh

2. 查看脚本内容

1
cat ~/smb.sh

🔍 四、验证与测试

1. 检查 Samba 服务状态

1
systemctl status smbd

2. 测试配置文件语法

1
testparm

3. 查看共享列表

1
smbclient -L localhost -U admin

4. 从客户端访问共享

在 Windows 客户端上,打开文件资源管理器,输入:

1
\\PVE服务器IP地址

使用 admin 用户和设置的密码登录


🛠️ 五、管理命令

1. 添加新用户

1
2
3
4
5
# 添加系统用户
useradd newuser

# 设置Samba密码
smbpasswd -a newuser

2. 删除用户

1
2
3
4
5
# 从Samba中删除用户
smbpasswd -x username

# 删除系统用户
userdel username

3. 重新加载配置

1
2
3
4
5
# 重新加载Samba配置(不中断现有连接)
systemctl reload smbd

# 或完全重启服务
systemctl restart smbd

💡 六、故障排除

1. 权限问题

如果无法访问共享,检查目录权限:

1
2
chmod -R 755 /共享目录
chown -R admin:root /共享目录

2. 防火墙配置

确保防火墙允许 Samba 流量:

1
2
# 允许Samba相关端口
ufw allow samba

3. 查看日志

检查 Samba 日志以诊断问题:

1
2
tail -f /var/log/samba/log.smbd
tail -f /var/log/samba/log.nmbd

🔒 七、安全建议

  1. 🔐 定期更新密码:定期更改 Samba 用户密码
  2. 🛡️ 限制访问:使用防火墙限制对 Samba 端口的访问
  3. 👤 使用专用用户:为 Samba 共享创建专用用户,避免使用 root
  4. 💾 定期备份配置:备份 /etc/samba/smb.conf 文件
  5. 📊 监控日志:定期检查 Samba 日志文件

🚀 通过以上步骤,您已经在 PVE 上成功部署了 Samba 服务,可以方便地在网络中共享文件。这个解决方案比在虚拟机中运行黑群晖性能更高,更直接地利用硬件资源!