如何在 Ubuntu 16.04 上为小型组织设置 Samba 共享如何在 Ubuntu 16.04 上为小型组织设置 Samba 共享如何在 Ubuntu 16.04 上为小型组织设置 Samba 共享如何在 Ubuntu 16.04 上为小型组织设置 Samba 共享
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 16.04 上为小型组织设置 Samba 共享

作者选择了 Write for DOnations 计划。

介绍

Windows 环境中使用的 SMB/CIFS 网络协议,用于共享服务,例如文件和打印机访问以及 Active Directory。 Samba 还可用于在称为独立服务器 的配置中创建跨平台文件共享。

在本指南中,您将安装和配置一个独立的 Samba 服务器,以便为名为 Example.com 的假想小型组织提供网络文件存储或共享。该组织对其文件共享有几个要求: 1. 每个员工都需要一个个人的、私有的文件共享; 2. 所有员工都应该拥有对公共文件共享的读写权限; 3. 管理用户应具有对所有个人股份的读写权限和普通股份的所有权。

您的 Samba 服务器将满足所有这些要求。您还将了解如何从 Windows、Linux 和 macOS 访问共享。

先决条件

在开始本指南之前,您需要具备以下条件:

    <李> 具有非 root sudo 用户的 Ubuntu 16.04 服务器。请参阅 Ubuntu 16.04 初始服务器设置指南以获取更多信息。 Samba 对 RAM 和 CPU 的要求适中,可以在 1GB 服务器上正常运行。您更有可能用完存储空间,因此在选择服务器大小时,这应该是您的首要考虑因素。 <李> 允许在端口 445 上传入 TCP 连接。如果您正在使用如何在 Ubuntu 和 Debian 云服务器上使用 UFW 设置防火墙作为指导。如果您使用不同的或外部的防火墙,请参阅相关文档。

第 1 步 — 安装 Samba

让我们从使用 Ubuntu 的包管理系统安装 Samba 开始。

在安装新包之前,让我们更新本地包索引以包含 Ubuntu 存储库中的最新版本:

  1. sudo apt-get update

接下来,安装 Samba:

  1. sudo apt-get install samba

此命令将安装并启动 Samba 服务器 smbd 和 Samba NetBIOS 服务器 nmbd。本教程不需要 nmbd,因此为了安全起见,您可以使用 systemctl 停止和禁用它:

  1. sudo systemctl stop nmbd.service
  2. sudo systemctl disable nmbd.service

sudo systemctl disable nmbd.service 命令在运行时将产生以下输出:

Output
nmbd.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install disable nmbd insserv: warning: current start runlevel(s) (empty) of script `nmbd' overrides LSB defaults (2 3 4 5). insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `nmbd' overrides LSB defaults (0 1 6).

此输出表明,由于 nmbd 没有本机 systemd 管理配置,因此它被较旧的 SysV 初始化系统禁用。

为避免运行未配置的启用网络的服务可能引起的安全问题,让我们停止 Samba 服务器,直到配置详细信息到位:

  1. sudo systemctl stop smbd.service

Samba 现已安装并准备好进行配置。

第 2 步 — 设置 Samba 的全局选项

让我们通过修改位于 /etc/samba/smb.conf 的配置文件来定义 Samba 服务器的行为方式。该文件有两部分:[global] 部分和 [shares] 部分。 [global] 部分配置 Samba 服务器的行为,[shares] 部分配置文件共享。让我们从在 [global] 部分设置指令开始。

不要直接编辑 /etc/samba/smb.conf,而是将其重命名为 smb.conf.original 并创建一个名为 smb.conf< 的新文件/代码>:

  1. sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig

在编辑 /etc/samba/smb.conf 之前,让我们检查可用的接口,以便告诉 Samba 它应该识别哪些接口。输入以下内容:

  1. ip link
Output
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 02:21:2c:03:ef:e2 brd ff:ff:ff:ff:ff:ff

此输出表明 lo 是环回接口,eth0 是外部网络接口,尽管您的外部接口可能不同。请注意两者:您将在 smb.conf 文件的 [global] 部分中使用 interfaces 指令包含它们。

让我们开始使用 nano 或您最喜欢的编辑器编辑此文件:

  1. sudo nano /etc/samba/smb.conf

此文件的 [global] 部分将定义服务器的名称、角色和其他详细信息,包括网络接口:

[global]
        server string = samba_server
        server role = standalone server
        interfaces = lo your_network_interface
        bind interfaces only = yes
        disable netbios = yes
        smb ports = 445
        log file = /var/log/samba/smb.log
        max log size = 10000

这些指令指定以下内容:

  • server string - 这是将在连接期间提供给用户的识别信息。您可以使用 samba_server 或可以识别您的服务器的其他名称。在本教程中,您将看到字符串 samba.example.com 表示组织 Example.com 的 Samba 共享。
  • server role - 这定义了将创建什么类型的 Samba 服务器。在这种情况下,它是一个独立服务器,即文件共享。其他服务器类型包括域成员服务器和域控制器。
  • interfaces - 这些是 Samba 将绑定到的网络接口。 lo 是环回接口 (127.0.0.1),并且是必需的。您还需要包含之前输出的外部网络接口。这通常是 eth0。
  • bind interfaces only - 这可确保 Samba 仅绑定到 interfaces 行中列出的接口。作为一项安全措施,这会导致 Samba 忽略与指定的 interfaces 不对应的数据包。
  • disable netbios - 这将禁用独立服务器中不需要的所有 NetBIOS 功能。这样做可以简化服务器名称解析过程和 SMB 流量的传输。
  • smb ports - 这设置了 Samba 将监听的端口。端口 445 是 Samba 的标准端口。
  • log file - 设置 Samba 日志文件的名称和位置。
  • max log size - 这设置了日志文件的大小限制。列出的数字以字节为单位,等于 10MB。设置此大小限制时要记住一些事情:达到此限制时,Samba 将生成一个新的日志文件并将旧内容移动到一个具有 .old 扩展名的副本中。如果再次超过限制,现有的 .old 文件将被销毁。这可以防止磁盘/分区空间被单个日志文件的内容淹没。因此,您应该定义一个对您的系统资源有意义的文件大小。

如果在设置服务器时需要更详细的日志记录,请将以下行附加到 [global] 部分:

        log level = 3 passdb:5 auth:5

这会将日志级别设置为 3(信息),从默认设置 1 增加日志信息的粒度。passdb 和 auth 调试类的较高设置为 5提供与用户身份验证相关的更多信息。

完成此部分的创建后保存并关闭文件。

每当您编辑 smb.conf 时,您都应该运行 Samba 实用程序 testparm 来检查没有语法错误:

  1. testparm

在 smb.conf 文件上运行 testparm 命令会产生以下输出:

Output
Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions

按 ENTER 会产生以下输出:

Output
# Global parameters [global] server string = samba_server interfaces = lo your_network_interface bind interfaces only = Yes server role = standalone server log file = /var/log/samba/smb.log max log size = 10000 smb ports = 445 disable netbios = Yes idmap config * : backend = tdb

如果 testparm 报告 Loaded services file OK.,则不存在会阻止 Samba 服务器启动的语法错误。

配置 [global] 部分是启动 Samba 服务器所需的全部。但是,如果没有共享配置,其功能将受到限制。共享由两部分组成,用户和目录,必须创建和配置这两部分以允许登录和测试。下一节将解释如何创建可以访问共享的用户。

第 3 步 — 创建用户

在此步骤中,我们将创建可以访问共享的用户。他们需要以 Samba 和系统用户的身份访问,以便在登录和读写文件系统时通过 Samba 服务器进行身份验证。

在假设的公司 Example.com 中,有四名员工需要添加到 Samba 服务器并在 Linux 系统上创建为用户:david、mike、jane 和 lucy。除了这四个之外,还有一个管理员用户可以访问和管理个人共享。该用户还将拥有每个人都可以访问的普通股。

添加系统用户的第一步是为每个用户创建主目录。 Samba 目录和数据将位于 /samba/,而不是使用位于 /home/user 的标准主目录。将 Samba 数据保存在一个位置并与其他用户数据分开将使将来的管理任务(例如备份)更加容易。

注意:本指南中创建的用户无意使用 SSH 登录。如果您的用户已经在服务器上拥有帐户,您应该为他们创建一个专用的 Samba 用户以便遵循本指南。

下一节将解释添加第一个用户 david 的过程,但您需要为 mike、jane 和 lucy 重复此过程。

第一步是在文件系统的根目录下创建存储 Samba 数据的目录。此目录将称为 /samba/,其组所有权将设置为 sambashare,这是您在安装 Samba 时创建的组。

执行以下命令创建 /samba/ 目录并将组所有权设置为 sambashare:

  1. sudo mkdir /samba/
  2. sudo chown :sambashare /samba/

接下来,在 /samba/ 目录下创建 david 的主目录:

  1. sudo mkdir /samba/david

现在,使用以下命令将 david 添加为系统用户:

  1. sudo adduser --home /samba/david --no-create-home --shell /usr/sbin/nologin --ingroup sambashare david

这些选项执行以下操作:

  • --home - 设置用户主目录的位置。
  • --no-create-home - 这会阻止 adduser 命令创建 david 的主目录。如果系统要创建此目录,它将填充当前设置不需要的配置文件,例如 .bash_history。
  • --shell- 设置 david 通过 SSH 登录时将分配给哪个 shell。访问 Samba 共享不需要 SSH 登录;将此设置为 /usr/sbin/nologin 将禁用 SSH 登录。
  • --in-group sambashare - 这会将用户添加到 sambashare 组,使他们能够读写自己的共享和公共共享。< /li>

运行此命令时,系统将提示您输入密码。选择 10 个或更多字符的唯一的、非基于字典的密码。

现在系统用户 david 已经存在,您可以在他的 Samba 主目录上设置所有权和权限:

  1. sudo chown david:sambashare /samba/david/
  2. sudo chmod 2770 /samba/david/

将目录的权限设置为2770,意味着在/samba/david/下创建的新文件或目录将继承父目录的组所有权,而不是主目录的组所有权创建文件或目录的用户。这意味着,例如,如果管理员用户要在 david 的共享中创建一个新目录,david 将能够读取和写入它。

接下来,将 david 添加到 Samba 服务器。 Samba 保留自己的用户和密码数据库,用于验证登录。为了登录,必须将所有用户添加到 Samba 服务器并启用。执行以下 smbpasswd 命令来完成这两项任务:

  1. sudo smbpasswd -a david
  2. sudo smbpasswd -e david

此处使用的选项执行以下操作:

  • -a - 这会将用户添加到 Samba 服务器而不启用它们。
  • -e - 这会启用之前添加的用户。

您在此处输入的密码将用于访问 Samba 共享,可以与系统密码不同。

用户 david 现在作为系统用户存在,无法通过 SSH 连接到服务器。他在 /samba/david 中有一个主目录,并且作为 Samba 用户注册并启用。

对每个 Samba 用户(mike、jane 和 lucy)重复此过程。

要创建管理员用户,请运行以下命令,将主目录更改为 /samba/everyone/:

  1. sudo mkdir /samba/everyone
  2. sudo adduser --home /samba/everyone --no-create-home --shell /usr/sbin/nologin --ingroup sambashare admin
  3. sudo chown admin:sambashare /samba/everyone/
  4. sudo chmod 2770 /samba/everyone/
  5. sudo smbpasswd -a admin
  6. sudo smbpasswd -e admin

除了创建 admin 用户之外,让我们创建一个名为 admins 的组,以便于管理服务器。通过对每个共享的读写权限,该组可以简化添加和删除用户的工作。例如,如果个人用户充当管理员用户,然后离开组织,则需要将他们从每个共享中单独删除。还需要将新管理员手动添加到每个共享中。创建一个管理员组并赋予该组对共享的读写访问权限意味着添加和删除用户只需要一个命令。

执行以下命令创建一个名为 admins 的新组,并将用户 admin 添加到该组:

  1. sudo groupadd admins
  2. sudo usermod -G admins admin

通过运行第二个命令 sudo usermod -G admins admin 并用另一个用户代替 admin,可以将其他用户添加到 admins 组。

系统配置现已完成,组织 Example.com 的用户设置为系统用户和 Samba 用户。让我们继续配置 Samba 服务器,以便这些用户可以访问他们的共享目录。

第 4 步 — 配置 Samba 共享

每个共享在主 Samba 配置文件 /etc/samba/smb.conf 中都有自己的部分,位于全局参数之后。这些部分将定义每个共享的工作方式。

再次使用 nano 文本编辑器打开并编辑此文件:

  1. sudo nano /etc/samba/smb.conf

以下配置块将定义每个用户的个人共享:

...
[share_name]
        path =
        browseable =
        read only =
        force create mode =
        force directory mode =
        valid users =

这些选项包括:

  • share_name - 这是您登录时将使用的共享名称。
  • path - 这是文件系统中共享的绝对路径。
  • browsable - 这设置其他用户是否能够看到共享。启用此选项仅允许 Samba 服务器的其他用户看到共享的存在。它不授予任何读取或写入权限。
  • 只读 - 设置有效用户是否能够写入共享。
  • force create mode - 这会强制授予写入共享的任何文件的权限。
  • force directory mode - 这会强制共享中创建的任何目录的权限。
  • valid users - 这是有权访问共享的用户列表。此设置可以采用用户名或系统组,例如管理员。组必须在前面列出 @,例如@admins。

为 david 添加以下共享配置块,定义他的主目录、该目录的组所有权权限以及应该有权访问他的共享的用户:

[david]
        path = /samba/david
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = david @admins

请注意,目录权限将组所有权设置为父目录的所有权。

为迈克、简和露西创建一个共享块。仅更改共享 [name]、path 和 valid users 以反映每个用户的名称。

[everyone] 共享在 [name]、path、valid users 和可浏览 选项,看起来像这样:

...
[everyone]
        path = /samba/everyone
        browseable = yes
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = @sambashare @admins

为 sambashare 组提供对共享的读写访问权限使所有用户都可以访问共享,因为他们是在创建时添加到该组的。

完整的 smb.conf 文件如下所示:

[global]
        server string = samba_server
        server role = standalone server
        interfaces = lo your_network_interface
        bind interfaces only = yes
        disable netbios = yes
        smb ports = 445
        log file = /var/log/samba/smb.log
        max log size = 10000

[david]
        path = /samba/david
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = david @admins

[mike]
        path = /samba/mike
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = mike @admins

[jane]
        path = /samba/jane
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = jane @admins

[lucy]
        path = /samba/lucy
        browseable = no
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = lucy @admins

[everyone]
        path = /samba/everyone
        browseable = yes
        read only = no
        force create mode = 0660
        force directory mode = 2770
        valid users = @sambashare @admins

完成编辑后保存并关闭文件。

再次测试配置:

  1. testparm

这将产生如下所示的输出:

Output
Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[david]" Processing section "[jane]" Processing section "[mike]" Processing section "[lucy]" Processing section "[everyone]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions

配置检查完成后,让我们使用 systemctl 启动 Samba 服务器:

  1. sudo systemctl start smbd.service

Samba 服务器现在正在运行并准备好接受登录。下一步是登录到 Samba 服务器以测试它是否按预期工作。以下部分将介绍从 Windows、Linux 和 macOS 登录到 Samba 服务器。

第 5 步 — 登录到 Samba 服务器

在本节中,我们将介绍如何从 Linux、Windows 和 macOS 访问我们创建的 Samba 共享。

Linux——命令行

您可以使用名为 smbclient 的工具从命令行访问 Samba。大多数 Linux 发行版默认不包含此包,因此您需要使用本地包管理器安装它。

在 Debian 和 Ubuntu 服务器上使用以下命令安装 smbclient:

  1. sudo apt-get update
  2. sudo apt-get install smbclient

在 Fedora 系统上,使用以下命令:

  1. sudo dnf update
  2. sudo samba-client

在 CentOS 上:

  1. sudo yum update
  2. sudo yum install samba-client

注意:在某些 Linux 发行版上,smbclient 将失败并显示以下错误消息:

Output
smbclient: Can't load /etc/samba/smb.conf - run testparm to debug it

如果您看到此错误消息,请检查以确保您已在 /etc/samba/smb.conf 中创建该文件。

smbclient 使用以下格式访问 Samba 共享:

  1. smbclient //your_samba_hostname_or_server_ip/share -U username

您可以使用服务器的 IP 或您在 /etc/samba/smb.conf 中定义的主机名来访问共享。此示例使用主机名 samba.example.com 访问您在前面步骤中创建的 Samba 服务器上的 david 共享:

  1. smbclient //samba.example.com/david -U david

如果 david 想要访问公共共享(everyone),请将命令更改为:

  1. smbclient //samba.example.com/everyone -U david

运行 smbclient 命令后,系统会提示您输入 Samba 密码并登录到命令行界面,让人联想到 FTP 文本界面:

smb: \>

此接口最适用于测试用户名和密码以及读写访问。例如,您可以创建一个目录并列出其内容,如下所示:

  1. mkdir test
  2. ls

您应该看到以下输出:

Output
. D 0 Fri Feb 2 14:49:01 2018 .. D 0 Wed Jan 24 12:11:33 2018 test D 0 Fri Feb 2 14:49:01 2018

通过键入以下内容删除目录:

  1. rmdir test

使用 GUI 工具通常更容易管理共享中的数据。下一节将介绍 KDE 的内置 GUI 工具。

Linux — KDE 与 Dolphin

Dolphin 是 KDE 中的默认文件管理器,具有访问 Samba 共享的内置功能。

打开 Dolphin 后,执行以下步骤:

Dolphin 现在将连接并打开如下所示的 Samba 共享:

您现在可以像使用本地目录一样使用 Samba 共享来复制、删除和重命名文件和目录。该共享还将作为永久书签出现在网上邻居中。

MacOS——命令行

MacOS 预装了可用于访问 Samba 共享的命令行工具。单击“终端”图标,使用 Launchpad 打开终端。

这将在您的主目录中打开一个命令行终端。要安装 Samba 共享,您可以创建一个新目录作为共享的安装点。挂载点是连接两个文件系统的位置:在本例中,是您的本地文件系统和远程 Samba 文件系统。

创建一个名为 samba 的新目录:

  1. mkdir samba

接下来,将 Samba 共享挂载到新的 samba 目录下。此命令具有以下形式:

  1. sudo mount_smbfs //username@your_samba_hostname_or_server_ip/share ./mount_point

用用户 david 替换 Example.com 中的详细信息如下所示:

  1. sudo mount_smbfs //david@samba.example.com/david ./samba

samba 目录现在将在 Example.com Samba 服务器上显示 david 共享的内容。可以使用ls、rm 和mkdir 等常规工具来操作文件和目录;但是,samba 目录在挂载共享后将归 root 所有。因此,您需要使用 sudo 来访问 samba 目录及其内容。

要卸载 Samba 共享,请从运行 mkdir 命令的同一目录运行 umount 命令:

  1. umount samba

下一节将介绍如何使用 macOS 中的桌面 GUI 应用程序访问 Samba 共享。

MacOS——桌面

MacOS 还可以使用 Finder 应用程序访问 Samba 共享。

采取以下步骤:

成功连接到 Samba 共享后,它将出现在 Finder 中,如下所示:

下一节将探讨如何从 Windows 10 访问 Samba 共享。

Windows 10——命令行

从 Windows 命令行挂载 Samba 共享只需要一个命令:

  1. net use drive_letter \\your_samba_hostname_or_server_ip\share

替换用户 david 的共享中的变量并将驱动器号设置为 X::

  1. net use X: \\samba.example.com\david

输入此命令后,系统将提示您输入 david 的用户名和密码。输入这些后,您将收到共享已成功安装的确认信息:

Output
Enter the user name for 'samba.example.com': david Enter the password for samba.example.com: The command completed successfully.

现在,您将能够在文件资源管理器中浏览 Samba 共享并像操作本地计算机一样操作文件和目录。

下一节将介绍如何使用 Windows GUI 工具访问 Samba 共享。

Windows 10 — 桌面

Windows 10 还具有连接到 Samba 共享的本机功能。以下步骤会将您连接到您的 Samba 共享,并使用 Windows 文件资源管理器将其保存为书签。通过打开文件资源管理器开始这些步骤:

文件资源管理器现在将连接到 Samba 共享。连接成功完成后,将在文件资源管理器中的“此电脑”下创建一个新位置:

您现在可以使用此文件夹来管理 Samba 共享中的文件和文件夹,就好像它是本地文件夹一样。

结论

在本文中,您使用 Samba 服务器创建了跨平台在线文件共享。您还从 Windows、Linux 和 macOS 访问了这些共享。

Samba 共享变得如此普遍,以至于许多应用程序都能够访问存储在其中的数据。这些应用程序可以扩展 Samba 共享的功能和用途。例如,媒体播放器BackupPC 的移动版本。

除了充当简单的文件共享之外,Samba 还可以作为域控制器或域成员与 Windows Active Directory 一起工作。 Samba Wiki 用户文档包含有关如何执行此操作的更多信息。

©2015-2025 艾丽卡 support@alaica.com