凌峰创科服务平台

Samba服务器Linux配置步骤有哪些?

Samba 服务器配置完整指南

Samba 是一个开源的软件套件,它实现了 SMB/CIFS 协议,让 Linux 系统能够与 Windows 系统进行文件和打印共享,你可以把它想象成一个“在 Linux 上运行,让 Windows 能访问的共享文件夹服务”。

Samba服务器Linux配置步骤有哪些?-图1
(图片来源网络,侵删)

本教程将带你完成以下步骤:

  1. 安装 Samba
  2. 创建共享目录和用户
  3. 编辑主配置文件
  4. 配置共享
  5. 设置 Samba 用户密码
  6. 启动并启用 Samba 服务
  7. 配置防火墙
  8. 从 Windows 访问共享
  9. 常见问题与高级配置

第一步:安装 Samba

更新你的软件包列表,然后安装 Samba。

# 更新软件包列表
sudo apt update
# 安装 samba 软件包
sudo apt install samba

安装完成后,Samba 的主要配置文件 /etc/samba/smb.conf 已经存在,我们可以开始进行配置。


第二步:创建共享目录和用户

为了安全起见,我们不应该使用系统用户(如 root)来共享文件,最佳实践是创建一个专门用于共享的用户和目录。

Samba服务器Linux配置步骤有哪些?-图2
(图片来源网络,侵删)
  1. 创建一个系统用户 (名为 sambauser),这个用户不需要有登录 shell,只是一个用来管理文件所有权的身份。

    # 创建用户,并设置其主目录为 /home/sambauser
    sudo useradd -m sambauser
    # (可选) 为这个系统用户设置一个登录密码,方便以后通过 SSH 登录管理
    sudo passwd sambauser
  2. 创建共享目录,我们将在 /srv/samba/share 这个路径下创建共享文件夹,这是一个常见的存放共享文件的位置。

    sudo mkdir -p /srv/samba/share
  3. 设置目录所有者,将这个目录的所有权赋予我们刚刚创建的 sambauser

    sudo chown -R sambauser:sambauser /srv/samba/share
  4. 设置目录权限,确保用户可以在其中读写。

    Samba服务器Linux配置步骤有哪些?-图3
    (图片来源网络,侵删)
    sudo chmod -R 0770 /srv/samba/share
    • 0770 的含义:
      • 0: 特殊权限位。
      • 7 (所有者): 读、写、执行。
      • 7 (组): 读、写、执行。
      • 0 (其他人): 无权限。

第三步:编辑主配置文件

Samba 的核心配置是 /etc/samba/smb.conf 文件,在修改之前,强烈建议先备份一份

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

用你喜欢的文本编辑器打开它(nano):

sudo nano /etc/samba/smb.conf

文件分为两部分:[global] 部分和 [共享名] 部分。

配置 [global] 部分

这是全局设置,影响所有共享,找到 [global] 部分,并确保以下配置存在或被修改:

[global]
   # 设置工作组,必须与你的 Windows 工作组或域相同,默认是 WORKGROUP。
   workgroup = WORKGROUP
   # 设置服务器描述,在 Windows 网络邻居中可见。
   server string = %h Samba Server
   # 设置日志文件路径和级别,级别 0 为无,1 为最基本,2 为详细。
   log file = /var/log/samba/log.%m
   max log size = 1000
   # 安全级别,这是最重要的设置之一。
   #   - `security = share`: 已过时,不推荐使用。
   #   - `security = user`: **推荐**,要求用户名和密码,每个共享都需要验证。
   #   - `security = domain`: 加入 Windows 域。
   #   - `security = ads`: 使用 Kerberos 加入 Windows Active Directory 域。
   security = user
   # 是否允许 guest 访客,我们这里设为 no,要求所有用户认证。
   map to guest = bad user
   # 设置密码加密方式,现代系统必须使用 yes。
   encrypt passwords = yes
   # 设置共享文件的字符集,防止中文文件名乱码。
   # en_US.UTF-8 是通用设置,如果仍有问题,可以尝试 GB2312。
   unix charset = UTF-8
   dos charset = UTF-8

配置共享部分

在文件的末尾,添加你自己的共享配置,我们将创建一个名为 PublicShare 的共享。

# =======================================================
# 自定义共享部分
# =======================================================
[PublicShare]
   # 共享的注释,描述信息
   comment = Public Share Folder
   # 共享的路径,指向我们之前创建的目录
   path = /srv/samba/share
   # 是否允许 guest 访问,我们这里设为 no,因为上面设置了 security = user
   guest ok = no
   # 是否允许用户写入
   writable = yes
   # 新创建的文件和目录的权限掩码
   create mask = 0770
   directory mask = 0770
   # 设置共享的有效用户,可以指定用户名或 @组名。
   # 只允许 sambauser 和 anotheruser 访问
   valid users = sambauser @samba_group

保存并退出 (nano 中是 Ctrl+X, 然后按 Y, 再按 Enter)。


第四步:测试配置文件

在重启服务之前,务必测试 smb.conf 文件的语法是否正确。

testparm

如果输出显示 Loaded services file OK.,则说明配置文件语法正确,如果有错误,它会提示你哪一行有问题,请返回上一步修改。


第五步:设置 Samba 用户密码

即使系统用户 sambauser 存在,Samba 也有自己独立的密码数据库,你需要为允许访问共享的系统用户设置一个 Samba 密码。

# 为 sambauser 这个用户设置 Samba 密码
sudo smbpasswd -a sambauser

系统会提示你输入并确认一个新密码,这个密码是当你在 Windows 访问共享时需要输入的。


第六步:启动并启用 Samba 服务

启动 Samba 的核心服务(smbd 用于文件共享,nmbd 用于 NetBIOS 名称解析)并设置它们开机自启。

# 启动服务
sudo systemctl start smbd nmbd
# 设置开机自启
sudo systemctl enable smbd nmbd

你可以检查服务状态:

sudo systemctl status smbd

第七步:配置防火墙

如果你的服务器启用了 ufw (Uncomplicated Firewall),需要开放 Samba 使用的端口。

Samba 使用以下端口:

  • TCP/UDP 137: NetBIOS 名称服务
  • TCP/UDP 138: NetBIOS 数据报服务
  • TCP/UDP 139: SMB 协议 over NetBIOS
  • TCP 445: SMB over IP (现代标准)

你可以使用 ufw 的应用配置来简化这个过程:

# 允许 Samba 服务的所有端口
sudo ufw allow Samba

第八步:从 Windows 访问共享

配置已经完成,你可以从同一局域网内的 Windows 电脑访问了。

  1. 打开 Windows 的“文件资源管理器”。
  2. 在地址栏中,输入 Samba 服务器的 IP 地址或主机名,格式为 \\服务器IP\\服务器主机名
    • \\192.168.1.100\\ubuntu-server
  3. 按下回车,系统会弹出一个身份验证窗口。
  4. 输入凭证
    • 用户名sambauser (你的 Samba 用户名)
    • 密码:你在第五步设置的 Samba 密码
    • 如果用户名提示是 SERVERNAME\sambauser 的格式,请确保选择“其他用户”并输入 sambauser 和密码。
  5. 登录成功后,你就可以看到 PublicShare 共享文件夹了,就像访问本地磁盘一样。

第九步:常见问题与高级配置

问题 1:Windows 提示“找不到网络路径”或无法访问

  • 原因:通常是网络问题或防火墙阻止。
  • 解决
    1. 确认 Windows 和 Linux 服务器在同一个局域网(同一个网段)。
    2. 在 Windows 的“控制面板” -> “网络和 Internet” -> “网络和共享中心” -> “更改高级共享设置”中,确保启用网络发现文件和打印机共享
    3. 检查 Windows 防火墙是否阻止了“文件和打印机共享”。

问题 2:中文文件名或文件夹显示为乱码

  • 原因:字符集不匹配。
  • 解决:回到 /etc/samba/smb.conf[global] 部分,确保 unix charsetdos charset 设置正确,对于中文环境,可以尝试:
    unix charset = GB2312
    dos charset = GB18030

    如果问题依旧,可以尝试 UTF-8,这取决于你的 Windows 系统语言设置。

问题 3:用户无法写入,提示“权限被拒绝”

  • 原因:Linux 文件系统权限或 Samba 权限问题。
  • 解决
    1. 检查共享目录的 Linux 权限:ls -ld /srv/samba/share,确保 sambauser 用户有 rwx 权限。
    2. 检查 smb.conf 中的 writable = yesvalid users 设置是否正确。
    3. 在 Windows 上,确保你登录的用户对文件有写入权限。

高级配置:创建只读共享

如果你想创建一个只读的共享,可以这样做:

[ReadOnlyShare]
   comment = Read-Only Share Folder
   path = /srv/samba/readonly
   guest ok = no
   writable = no  # 禁止写入
   valid users = sambauser

高级配置:创建用户级共享

让每个用户访问自己的家目录,这在家庭或小团队环境中非常实用。

[Homes]
   comment = Home Directories
   browseable = no  # 不在列表中显示,但可以直接访问 \\server\username
   writable = yes
   valid users = %S  # %S 代表访问共享的用户名
   inherit permissions = yes

这样,用户 sambauser 就可以通过 \\server\sambauser 访问自己的 /home/sambauser 目录了。

分享:
扫描分享到社交APP
上一篇
下一篇