mkdir SMB
sudo chmod -R 775 /shared_folder
# shared_folder是你要共享的文件夹
sudo chown -R $USER:$USER shared_folder
sudo vim /etc/samba/smb.conf
整个配置文件经过翻译如下
# Debian GNU/Linux的Samba套件示例配置文件。
#
#
# 这是主Samba配置文件。你应该阅读
# smb.conf(5)手册页面以理解这里列出的选项。Samba拥有大量可配置的选项,
# 本示例中只展示了一小部分。
#
# 本文件包含了一些值得调整的选项示例,这些示例已被注释掉。
# - 当选项前使用";"注释时,表示该建议设置与默认行为不同
# - 当选项前使用"#"注释时,表示该建议设置与Samba默认行为一致,
# 但此选项被认为足够重要,因此在此提及
#
# 注意:每次修改此文件后,你都应该运行"testparm"命令,
# 以检查是否存在基本的语法错误。
#======================= 全局设置 =======================
[global]
## 浏览/标识设置 ###
# 修改为你的Samba服务器所属的工作组/NT域名
workgroup = WORKGROUP
# 服务器描述字符串,相当于NT系统中的描述字段
server string = %h server (Samba, Ubuntu)
#### 网络设置 ####
# 指定要绑定的接口/网络集合
# 可以是接口名称或IP地址/子网掩码;通常推荐使用接口名称
; interfaces = 127.0.0.0/8 eth0
# 仅绑定到上述指定的接口和/或网络;
# 若要使用此功能,必须先设置上面的'interfaces'选项。
# 如果你的Samba服务器没有受到防火墙保护或本身就是防火墙,建议启用此功能。
# 但需要注意,此选项不能正确处理动态或非广播接口。
; bind interfaces only = yes
#### 调试/记账设置 ####
# 为每台连接的机器使用单独的日志文件
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的运行模式。可选值包括:
# "standalone server"(独立服务器)、"member server"(成员服务器)、
# "classic primary domain controller"(经典主域控制器)、
# "classic backup domain controller"(经典备份域控制器)、
# "active directory domain controller"(AD域控制器)。
#
# 大多数情况下,选择"standalone server"或"member server"。
# 若要运行为AD域控制器,需先运行"samba-tool domain provision",
# 清除数据库并创建新域。
server role = standalone server
obey pam restrictions = yes
# 该布尔参数控制Samba在passdb中加密的SMB密码被更改时,
# 是否尝试同步Unix密码。
unix password sync = yes
# 在Debian GNU/Linux系统上要使Unix密码同步生效,
# 必须设置以下参数(感谢Ian Kahan提供的适配脚本)
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
########## 域设置 ###########
#
# 以下设置仅在'服务器角色'为经典主域控制器、
# 经典备份域控制器或启用了'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的一些默认配置(确保ID范围不冲突)
; 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"命令共享文件夹。
# 最大usershare数量,0表示禁用usershare功能。
# usershare max shares = 100
# 允许获得usershare权限的用户创建公共共享,而不仅限于认证用户
usershare allow guests = yes
#======================= 共享定义 =======================
# 取消以下注释(并根据需要调整其他设置)
# 可启用默认的用户主目录共享。
# 这样将共享每个用户的主目录为 \\server\username
;[homes]
; comment = Home Directories
; browseable = no
# 默认情况下,主目录以只读方式导出。
# 如果希望可以写入,请将以下参数设为'no'
; read only = yes
# 出于安全考虑,文件创建掩码设为0700。
# 如果希望组成员也有写权限,请将以下参数设为0775。
; create mask = 0700
# 出于安全考虑,目录创建掩码设为0700。
# 如果希望组成员也有写权限,请将以下参数设为0775。
; directory mask = 0700
# 默认情况下,任何有权访问Samba服务器的人都可以连接到\\server\username共享。
# 取消以下参数注释,以确保只有"username"本人才可以连接。
# 如果使用外部认证方案,可能需要调整此参数
; valid users = %S
# 取消以下注释并创建netlogon目录,用于域登录
# (还需要将Samba配置为域控制器)
;[netlogon]
; comment = Network Logon Service
; path = /home/samba/netlogon
; guest ok = yes
; read only = yes
# 取消以下注释并创建profiles目录,用于存储用户配置文件
# (参考上面的"logon path"选项)
# 目录应可供所有用户写入,以便首次登录时创建个人配置文件目录
;[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权限以允许这些用户写入驱动目录
; write list = root, @lpadmin
接下来在最后面添加上要共享的文件夹
[SMBShare]
comment = 共享文件夹SMB # 说明文字,显示在网络邻居中
path = /mnt/Disk/SMB # 共享的本地目录绝对路径
browseable = yes # 是否可以在网络中浏览到 (yes|no)
# yes = 可以在局域网浏览器里看到
# no = 只能通过直接路径访问
writable = yes # 是否允许写入 (yes|no)
# yes = 允许用户上传/修改文件
# no = 只读访问(写入被禁止)
guest ok = yes # 是否允许匿名用户访问 (yes|no)
# yes = 无需用户名密码即可访问
# no = 需要认证用户访问
# ⚠️ 安全环境建议关闭
read only = no # 是否只读 (yes|no)
# no = 可读写(writable = yes 时一般设 no)
# yes = 只读模式(即使 writable = yes)
create mask = 0777 # 创建文件时的权限掩码 (默认是0744)
# 0777 = 所有人读写执行
# 常用选项:
# 0644 = 所有者可读写,其他人只读
# 0666 = 所有人可读写
# 0777 = 所有人读写执行
directory mask = 0777 # 创建目录时的权限掩码 (默认是0755)
# 0777 = 所有人读写执行
# 常用选项:
# 0755 = 所有者读写执行,其他人只读执行
# 0777 = 所有人读写执行
; valid users = username # 允许访问的用户列表,多个用户用空格分隔
# 示例:valid users = user1 user2
# 需要搭配 guest ok = no 使用
# ⚠️ 如果启用,需要关闭 guest ok,否则冲突
; write list = username # 指定哪些用户拥有写权限(其他人只读)
# 示例:write list = user1 user2
# ⚠️ 只有这里列出的用户可以写,其余人即使 writable=yes也只能读
; read list = username # 指定哪些用户只能读(即使共享默认是写的)
# 示例:read list = user1 user2
; force user = username # 强制所有访问共享的人都使用指定系统用户身份访问
# 示例:force user = nobody
# ⚠️ 设置后,无论谁连接,都以这个用户操作文件
; force group = groupname # 强制共享访问的用户属于指定的组
# 示例:force group = sambashare
; public = yes # 等同于 guest ok=yes (老版Samba使用)
; available = yes # 是否启用此共享 (yes|no)
# no = 定义了但不对外提供
; printable = no # 如果设置为yes,此共享为打印机共享
# 对于普通文件夹共享应保持 no
如果希望使用用户 那就禁止匿名并且添加validusers
注意这里用户是linux的用户
然后给用户上密码
sudo smbpasswd -a Username
Username
是你的当前linux用户名
随后按照提示输入两遍密码即可
输入testparm
检查配置文件
输出应该为
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
....
然后重启服务
sudo systemctl restart smbd
sudo systemctl restart nmbd
如果你没有堡垒机或者其他防火墙而是机器防火墙的话
sudo ufw allow samba