如何在Ubuntu 18.04上安装和配置Samba

时间:2020-03-05 15:32:04  来源:igfitidea点击:

Samba是SMB/CIFS网络文件共享协议的免费开源重新实现,允许最终用户访问文件,打印机和其他共享资源。

本教程介绍了如何在Ubuntu 18.04上安装Samba并将其配置为独立服务器,以通过网络在不同操作系统之间提供文件共享。

我们将创建以下Samba共享和用户。

使用者:

  • sadmin-具有对所有共享的读取和写入访问权限的管理用户。
  • josh-具有自己的私有文件共享的普通用户。

分享:

  • 用户-所有用户都可以通过读取/写入权限访问此共享。
  • josh-该共享只有用户josh和sadmin才能以读取/写入权限访问。

我们可以从网络上的所有设备访问文件共享。
在本教程的后面,我们还将提供有关如何从Linux,Windows和macOS客户端连接到Samba服务器的详细说明。

准备工作

在继续之前,请确保我们以具有sudo特权的用户身份登录到Ubuntu 18.04系统。

在Ubuntu上安装Samba

Samba可从Ubuntu官方存储库中获得。
要将其安装在Ubuntu系统上,请执行以下步骤:

  • 首先更新apt软件包索引:
sudo apt update
  • 使用以下命令安装Samba软件包:
sudo apt install samba
  • 安装完成后,Samba服务将自动启动。要检查Samba服务器是否正在运行,请键入:
sudo systemctl status smbd

输出应如下所示,表明Samba服务处于活动状态并正在运行:

● smbd.service - Samba SMB Daemon
   Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-11-27 09:25:38 UTC; 2min 12s ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
 Main PID: 15142 (smbd)
   Status: "smbd: ready to serve connections..."
    Tasks: 4 (limit: 1152)
   CGroup: /system.slice/smbd.service
...

至此,已经安装了Samba并准备对其进行配置。

配置防火墙

如果Ubuntu系统上运行的是防火墙,则需要允许端口“ 137”和“ 138”上的传入UDP连接以及端口“ 139”和“ 445”上的TCP连接。

假设我们正在使用“ UFW”来管理防火墙,则可以通过启用“ Samba”配置文件来打开端口:

sudo ufw allow 'Samba'

配置全局Samba选项

在更改Samba配置文件之前,请创建备份以供将来参考:

sudo cp /etc/samba/smb.conf{,.backup}

Samba软件包随附的默认配置文件是为独立的Samba服务器配置的。
打开文件,并确保将“服务器角色”设置为“独立服务器”

sudo nano /etc/samba/smb.conf

/etc/samba/smb.conf

...
# Most people will want "standalone sever" or "member server".
# Running as "active directory domain controller" will require first
# running "samba-tool domain provision" to wipe databases and create a
# new domain.
   server role = standalone server
...

默认情况下,Samba在所有接口上侦听。
如果要限制仅从内部网络访问Samba服务器,请取消注释以下两行,并指定要绑定到的接口:

/etc/samba/smb.conf

...
# The specific set of interfaces/networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
interfaces = 127.0.0.0/8 eth0
# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
bind interfaces only = yes
...

完成后,运行“ testparm”实用程序以检查Samba配置文件中是否有错误。
如果没有语法错误,我们将看到“已加载服务文件正常”。

最后,使用以下命令重新启动Samba服务:

sudo systemctl restart smbdsudo systemctl restart nmbd

创建Samba用户和目录结构

为了更易于维护和灵活性,而不是使用标准主目录('/home/user'),所有Samba目录和数据都位于'/samba'目录中。

要创建“/samba”目录,请输入:

sudo mkdir /samba

将组所有权设置为'sambashare'。

该组是在Samba安装过程中创建的,稍后我们将所有Samba用户添加到该组中。

sudo chgrp sambashare /samba

Samba使用Linux用户和组权限系统,但具有自己的身份验证机制,与标准Linux身份验证分开。
我们将使用标准Linux“ useradd”工具创建用户,然后使用“ smbpasswd”实用程序设置用户密码。

如简介中所述,我们将创建一个普通用户,该用户将有权访问其私有文件共享和一个具有对Samba服务器上所有共享的读写访问权限的管理帐户。

创建Samba用户

要创建一个名为“ josh”的新用户,请使用以下命令:

sudo useradd -M -d /samba/josh -s /usr/sbin/nologin -G sambashare josh

'useradd'选项具有以下含义:

  • '-M'-不创建用户的主目录。我们将手动创建此目录。
  • '-d/samba/josh'-将用户的主目录设置为'/samba/josh'。
  • '-s/usr/sbin/nologin'-禁用此用户的shell访问。
  • '-G sambashare'-将用户添加到'sambashare'组。

创建用户的主目录,并将目录所有权设置为用户“ josh”,并将组“ sambashare”设置为:

sudo mkdir /samba/joshsudo chown josh:sambashare /samba/josh

以下命令会将setgid位添加到“/samba/josh”目录中,以便该目录中新创建的文件将继承父目录的组。
这样,无论哪个用户创建一个新文件,该文件都将具有'sambashare'的组所有者。
例如,如果我们未将目录的权限设置为“ 2770”,并且“ sadmin”用户创建了一个新文件,则“ josh”用户将无法对该文件进行读/写。

sudo chmod 2770 /samba/josh

通过设置用户密码,将“ josh”用户帐户添加到Samba数据库中:

sudo smbpasswd -a josh

系统将提示我们输入并确认用户密码。

New SMB password:
Retype new SMB password:
Added user josh.

设置密码以启用Samba帐户后,请执行以下操作:

sudo smbpasswd -e josh
Enabled user josh.

要创建另一个用户,请重复与创建用户'josh'时相同的过程。

接下来,让我们创建一个用户和组“ sadmin”。
该组的所有成员都将具有管理权限。
以后,如果我们想授予其他用户管理权限,只需将该用户添加到'sadmin'组中即可。

通过键入以下内容来创建管理用户:

sudo useradd -M -d /samba/users -s /usr/sbin/nologin -G sambashare sadmin

上面的命令还将创建一个组“ sadmin”,并将用户添加到“ sadmin”和“ sambashare”组。

设置密码并启用用户:

sudo smbpasswd -a sadminsudo smbpasswd -e sadmin

接下来,创建“用户”共享目录:

sudo mkdir /samba/users

将目录所有权设置为用户“ sadmin”,并将组“ sambashare”设置为:

sudo chown sadmin:sambashare /samba/users

所有经过身份验证的用户都可以访问此目录。
以下“ chmod”命令为“/samba/users”目录中“ sambashare”组的成员提供写/读访问权限:

sudo chmod 2770 /samba/users

配置Samba共享

打开Samba配置文件,并添加以下部分:

sudo nano /etc/samba/smb.conf

/etc/samba/smb.conf

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

这些选项具有以下含义:

  • '[users]'和'[josh]'-登录时将使用的共享名称。
  • 'path'-共享的路径。
  • “可浏览”-该共享是否应在可用共享列表中列出。设置为“否”,其他用户将看不到共享。
  • “只读”-“有效用户”列表中指定的用户是否能够写入此共享。
  • “强制创建模式”-设置此共享中新创建文件的权限。
  • “强制目录模式”-设置此共享中新创建目录的权限。
  • “有效用户”-允许访问共享的用户和组的列表。组以“ @”符号为前缀。

有关可用选项的更多信息,请参见Samba配置文件文档页面。

完成后,使用以下命令重新启动Samba服务:

sudo systemctl restart smbdsudo systemctl restart nmbd

在以下各节中,我们将向我们展示如何从Linux,macOS和Windows客户端连接到Samba共享。

从Linux连接到Samba共享

Linux用户可以使用文件管理器从命令行访问samba共享或者挂载Samba共享。

使用smbclient客户端

“ smbclient”是一个允许我们从命令行访问Samba的工具。
大多数Linux发行版中未预先安装“ smbclient”软件包,因此我们需要使用分发软件包管理器进行安装。

要在Ubuntu和Debian上安装“ smbclient”,请运行:

sudo apt install smbclient

要在CentOS和Fedora上安装“ smbclient”,请运行:

sudo yum install samba-client

访问Samba共享的语法如下:

mbclient //samba_hostname_or_server_ip/share_name -U username

例如,要以用户“ josh”身份连接到IP地址为“ 192.168.121.118”的Samba服务器上名为“ josh”的共享,我们将运行:

smbclient //192.168.121.118/josh -U josh

系统将提示我们输入用户密码。

Enter WORKGROUP\josh's password:

输入密码后,我们将登录Samba命令行界面。

Try "help" to get a list of possible commands.
smb: \>

挂载Samba共享

要首先在Linux上挂载Samba共享,我们需要安装“ cifs-utils”软件包。

在Ubuntu和Debian上运行:

sudo apt install cifs-utils

在CentOS和Fedora上运行:

sudo yum install cifs-utils

接下来,创建一个挂载点:

sudo mkdir /mnt/smbmount

使用以下命令挂载共享:

sudo mount -t cifs -o username=username //samba_hostname_or_server_ip/sharename /mnt/smbmount

例如,要将名为“ josh”的共享作为用户“ josh”安装在IP地址为“ 192.168.121.118”的Samba服务器上到“/mnt/smbmount”安装点,我们将运行:

sudo mount -t cifs -o username=josh //192.168.121.118/josh /mnt/smbmount

系统将提示我们输入用户密码。

Password for josh@//192.168.121.118/josh:  

使用GUI

文件,Gnome中的默认文件管理器具有内置选项,可以访问Samba共享。

  • 打开文件,然后单击侧列中的“其他位置”。
  • 在“连接到服务器”中,以以下格式'smb://samba_hostname_or_server_ip/sharename'输入Samba共享的地址。
  • 单击“连接”,将出现以下屏幕:
  • 选择“注册用户”,输入Samba用户名和密码,然后单击“连接”。
  • 将显示Samba服务器上的文件。

从macOS连接到Samba共享

在macOS中,我们可以从命令行或者使用默认的macOS文件管理器Finder访问Samba共享。
以下步骤显示了如何使用Finder访问共享。

  • 打开“查找器”,选择“执行”,然后单击“连接到”。
  • 在“连接到”中,以以下格式'smb://samba_hostname_or_server_ip/sharename'输入Samba共享的地址。
  • 单击“连接”,将出现以下屏幕:
  • 选择“注册用户”,输入Samba用户名和密码,然后单击“连接”。
  • 将显示Samba服务器上的文件。

从Windows连接到Samba共享

Windows用户还可以选择从命令行和GUI连接到Samba共享。
以下步骤显示了如何使用Windows File Explorer访问共享。

  • 打开文件资源管理器,然后在左窗格中右键单击“ This PC”。
  • 选择“选择自定义网络位置”,然后单击“下一步”。
  • 在“ Internet或者网络地址”中,以以下格式'\ samba_hostname_or_server_ip \ sharename'输入Samba共享的地址。
  • 单击“下一步”,将提示我们输入登录凭据,如下所示:
  • 在下一个窗口中,我们可以为网络位置键入一个自定义名称。默认的将由Samba服务器获取。
  • 单击“下一步”移至连接设置向导的最后一个屏幕。
  • 单击“完成”,将显示Samba服务器上的文件。