Samba服务器配置与管理指南

本文档总结了在Ubuntu服务器上搭建一个多用户、多层级权限的Samba文件共享服务的完整流程和日常管理方法。


一、 初始搭建流程

初始搭建主要通过一个自动化脚本、手动设置密码和修改Samba配置文件来完成。

1.1. 自动化脚本 (setup_samba.sh)

此脚本负责创建用户组、所有Linux系统用户、完整的目录结构,并为这些目录设置正确的初始文件系统权限。

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
#!/bin/bash

# 如果任何命令失败,脚本将立即退出
set -e

# --- 定义变量 ---
USERS="hr fin sys admi sto pur mark res"
GROUP="sambashare_users"
SHARE_BASE_DIR="/samba/user_shares"

echo "### Applying new, corrected permissions for all users... ###"

for user in $USERS; do
echo "Processing permissions for user: $user"

# 1. 用户的主目录: /samba/user_shares/hr/
# 所有者是用户自己,用户组是 sambashare_users。权限为755。
sudo chown -R "${user}:${GROUP}" "${SHARE_BASE_DIR}/${user}"
sudo chmod 755 "${SHARE_BASE_DIR}/${user}"

# 2. private 文件夹: /samba/user_shares/hr/private/
# 权限设置为 700,意味着只有所有者 (rwx) 能访问,其他人 (---) 完全不能
sudo chmod 700 "${SHARE_BASE_DIR}/${user}/private"

# 3. public 文件夹: /samba/user_shares/hr/public/
# 所有者是用户自己,但用户组是 sambashare_users
# 权限设置为 2775,意味着所有者和组内成员都能读写
sudo chown "${user}:${GROUP}" "${SHARE_BASE_DIR}/${user}/public"
sudo chmod 2775 "${SHARE_BASE_DIR}/${user}/public"
done

echo "### Corrected permissions applied successfully! ###"
echo "Next step: Edit your smb.conf file."

1.2. 设置用户密码

这是一个手动的交互式步骤,需要为每个用户设置Samba专用的访问密码。

1
2
sudo smbpasswd -a <username>
# 示例: sudo smbpasswd -a hr

1.3. 配置 smb.conf

核心配置,为每个用户创建一个独立的网络共享入口。

  1. 打开配置文件: sudo nano /etc/samba/smb.conf
  2. 在文件末尾粘贴以下所有用户的共享定义:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ================== Main User Shares ==================

[hr]
comment = Share for HR
path = /samba/user_shares/hr
browseable = yes
read only = no
valid users = @sambashare_users

[fin]
comment = Share for FIN
path = /samba/user_shares/fin
browseable = yes
read only = no
valid users = @sambashare_users

# ... (其他所有用户的配置块) ...

[res]
comment = Share for RES
path = /samba/user_shares/res
browseable = yes
read only = no
valid users = @sambashare_users

1.4. 重启服务

所有配置完成后,重启Samba使之生效。

1
sudo systemctl restart smbd nmbd

二、 从Windows访问

  1. 获取服务器IP: 在Ubuntu上运行 ip addr show
  2. 快速访问: 在Windows文件资源管理器地址栏输入 \\<服务器IP地址>
  3. 映射网络驱动器: 在“此电脑”右键选择“映射网络驱动器”,文件夹地址填写 \\<服务器IP地址>\<共享名> (例如 \\192.168.80.129\hr),并勾选“使用其他凭据连接”。

常见连接问题

  • 找不到网络路径: 检查IP地址、两台电脑是否在同一网络、检查服务器和客户端的防火墙。
  • 多重连接错误: Windows缓存了旧的登录凭据。在CMD中运行 net use * /delete 清除缓存。
  • Windows无法访问 \\...\文件夹: 您可能错误地使用了服务器的文件夹路径而不是共享名。请直接访问 \\<服务器IP地址>,然后从列出的共享列表中选择。

三、 日常权限管理

权限管理分为两个层面:Samba共享权限 (smb.conf) 和 Linux文件系统权限 (chmod, chown)。最终生效的是两者中更严格的那个。

  • 场景A:控制谁能连接到 [hr] 共享

    • 修改 /etc/samba/smb.conf[hr] 配置块的 valid users 参数。例如 valid users = hr, sys
  • 场景B:让 hrpublic 文件夹对组内只读

    • 使用Linux命令,无需重启Samba:sudo chmod 755 /samba/user_shares/hr/public
  • 场景C:将 hr 的一个文件所有权交给 fin

    • 使用Linux命令:sudo chown fin:fin /path/to/file.txt

四、 添加新用户流程

假设要添加一个名为 newuser 的新用户:

  1. 创建用户并设密码:

    1
    2
    sudo useradd -m -s /bin/false -g sambashare_users newuser
    sudo smbpasswd -a newuser
  2. 创建目录并设权限:

    1
    2
    3
    4
    5
    sudo mkdir -p /samba/user_shares/newuser/{private,public}
    sudo chown -R newuser:sambashare_users /samba/user_shares/newuser
    sudo chmod 755 /samba/user_shares/newuser
    sudo chmod 700 /samba/user_shares/newuser/private
    sudo chmod 2775 /samba/user_shares/newuser/public
  3. smb.conf 中添加共享:

    1
    2
    3
    4
    5
    6
    [newuser]
    comment = Share for newuser
    path = /samba/user_shares/newuser
    browseable = yes
    read only = no
    valid users = @sambashare_users
  4. 重启Samba:

    1
    sudo systemctl restart smbd nmbd