如何在Ubuntu 18.04安装和配置Samba

<p>Samba是SMB/CIFS网络文件共享协议的开源实现,该协议允许终端用户访问文件,打印机和其他共享资源。</p>

本教程介绍如何在Ubuntu 18.04安装和配置Samba,使你的计算机可以通过网络在不同操作系统之间提供文件共享。

我们将创建用户,sadmin具有对所有共享的读写访问权限的管理用户。josh具有自己的私有文件共享的普通用户。

我们将创建共享,users所有用户都可以读取/写入此共享。josh此共享可以仅由josh和sadmin用户读取/写入。

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

在继续之前,请确保您以个具有sudo权限的用户登录到Ubuntu 18.04。

安装 Samba服务器

Samba可从Ubuntu官方软件源获得。要在Ubuntu 18.04安装Samba,请运行命令sudo apt update && sudo apt install samba更新apt软件包索引并安装Samba。

安装完成后,Samba服务将自动启动。要检查Samba服务器是否正运行,请运行命令sudo systemctl status nmbd。至此,你已经在Ubuntu 18.04安装Samba。

sudo apt update
sudo apt install samba
sudo systemctl status nmbd
● nmbd.service - Samba NMB Daemon
Loaded: loaded (/lib/systemd/system/nmbd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-01-27 02:36:20 PST; 4s ago
    Docs: man:nmbd(8)
        man:samba(7)
        man:smb.conf(5)
Main PID: 4262 (nmbd)
Status: "nmbd: ready to serve connections..."
    Tasks: 1 (limit: 2319)
CGroup: /system.slice/nmbd.service
        `-4262 /usr/sbin/nmbd --foreground --no-process-group

配置 samba防火墙

如果您的Ubuntu 18.04正在运行着防火墙,则需要打开端口137138端口,允许传入的UDP连接。打开端口139445允许TCP的连接。

在本教程,我们假设您正在使用UFW管理防火墙,则可以通过启用Samba配置文件来打开端口。允许传入与传出的连接。

sudo ufw allow 'Samba'

配置 Samba服务器

在更改Samba配置文件之前,请先运行sudo cp /etc/samba/smb.conf{,.backup}命令创建备份以供将来参考。

Samba软件包随附的默认配置文件是独立Samba服务器配置。使用你喜欢的文本编辑器打开文件/etc/samba/smb.conf。

在本教程中,我们使用vim编辑文件/etc/samba/smb.conf。并将server role设置为standalone server

完成编辑后,保存文件并退出vim。然后运行testparm命令检查Samba配置文件是否存在错误。如果没有语法错误,您将看到Loaded services file OK.

确认配置没有错误后,请运行命令systemctl restart重新启动Samba服务。

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

sudo systemctl restart smbd
sudo systemctl restart nmbd
...
1. Most people will want "standalone sever" or "member server".
1. Running as "active directory domain controller" will require first
1. running "samba-tool domain provision" to wipe databases and create a
1. new domain.
   server role = standalone server
...
/etc/samba/smb.conf

默认情况下,Samba监听所有接口。如果您只是从内部网络访问,并限制外网的对Samba服务器的访问。

请取消注释行interfaces = 127.0.0.0/8 eth0并指定要绑定到的接口,还有行bind interfaces only = yes也取消注释。

...
1. The specific set of interfaces / networks to bind to
1. This can be either the interface name or an IP address/netmask;
1. interface names are normally preferred
interfaces = 127.0.0.0/8 eth0

1. Only bind to the named interfaces and/or networks; you must use the
1. 'interfaces' option above to use this.
1. It is recommended that you enable this feature if your Samba machine is
1. not protected by a firewall or is a firewall itself.  However, this
1. option cannot handle dynamic or non-broadcast interfaces correctly.
bind interfaces only = yes
...
/etc/samba/smb.conf

创建 Samba共享目录

为了更易于维护和灵活性,而不是使用标准的家目录/home/user,我们将所有Samba共享数据都存储同一个目录/samba。运行sudo mkdir /samba创建目录。

运行chgrp命令sudo chgrp sambashare /samba将/samba目录的用户组所有权设置为sambashare所有。

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

sudo mkdir /samba
sudo chgrp sambashare /samba

Samba权限控制使用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禁止用户的登录到系统。-G sambashare将用户添加到sambashare用户组。

接下来运行mkdir命令创建用户josh家目录,并将目录的权限设置为用户joshsambashare用户组所有,运行命令sudo chown josh:sambashare /samba/josh

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

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

sudo chmod 2770 /samba/josh命令设置/samba/josh目录setgid位,在/samba/josh目录创建的文件将继承父目录的组,也就是文件所有权是sambashare用户组。

如果您未将目录的权限设置为2770,并且用户sadmin/samba/josh目录创建文件,用户sadmin将无法读取/写入文件。

最后运行命令smbpasswd设置用户密码将用户帐户添加到Samba数据库,系统将提示您输入并确认用户密码。

当使用命令smbpasswd完成设置密码后,即可启用Samba帐户,运行命令sudo smbpasswd -e josh

sudo chmod 2770 /samba/josh
sudo smbpasswd -a josh
sudo smbpasswd -e josh
New SMB password:
Retype new SMB password:
Added user josh.
Enabled user josh.

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

接下来,让我们创建用户sadmin和用户组sadminsadmin组的所有成员将会拥有管理samba共享目录的权限。

稍后,如果您想将其他用户授予管理权限,只需将用户添加用户组sadmin

运行命令sudo useradd -M -d /samba/users -s /usr/sbin/nologin -G sambashare sadmin创建管理用户sadmin并将用户添加到用户组sambashare

同样你需要为用户sadmin设置用户密码并启用用户,运行命令sudo smbpasswd -a sadmin

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

sudo smbpasswd -a sadmin
sudo smbpasswd -e sadmin

最后创建共享目录Users。将Users目录所有权设置为用户sadminsambashare用户组。所有通过身份验证的用户都可以访问Users目录。

运行chmod命令设置/samba/users目录的权限,为sambashare组提供读写访问权限。

sudo mkdir /samba/users
sudo chown sadmin:sambashare /samba/users
sudo chmod 2770 /samba/users

配置 Samba共享目录

继续使用vim编辑文件/etc/samba/smb.conf并添家两个共享目录的配置。运行命令sudo vim /etc/samba/smb.conf

sudo vim /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
/etc/samba/smb.conf

这些选项的配置是,[users][josh]是登录时使用的共享名称。path共享的目录,绝对路径。

browseable翻译过来就是可浏览,是否可在共享列表中列出此共享。如果设置为no,其他用户将看不到共享目录。

read only选项表示valid users列表中指定的用户是否设置仅允许读,如果值yes,则仅允许读。

force create mode此共享创建文件时设置的文件权限模式。force directory mode此共享创建目录时设置目录权限的模式。

valid users允许访问共享的用户和组的列表。群组以@符号为前缀。更多可用选项的信息,请参见Samba配置文件文档页面。

完成后,运行systemctl命令重新启动Samba服务,在以下章节中,我们将向您展示如何在Linux,macOS和Windows客户端连接到Samba共享目录。

sudo systemctl restart nmbd

安装 Samba客户端

Linux用户可以使用桌面环境的文件管理器或者命令行访问samba共享目录或挂载Samba共享目录。smbclient是允许您从命令行访问Samba共享目录。

smbclient软件包尚未预先安装在大多数Linux发行版中,因此您需要使用发行版的软件包管理器进行安装samba客户端smbclient。

如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint。请运行命令sudo apt update && sudo apt install smbclient安装samba客户端smbclient。

如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora。请运行命令sudo yum install samba-client安装samba客户端smbclient。

sudo apt install smbclient
sudo yum install samba-client

Linux 连接Samba共享目录

在命令行终端访问Samba共享的语法形式是smbclient //samba_hostname_or_server_ip/share_name -U username

例如命令smbclient //192.168.121.118/josh -U josh将以用户josh连接到Samba服务器,IP地址是192.168.121.118,访问的共享目录是josh

输入密码后,您将登录Samba命令行界面。注意密码是不可见的,输入密码完成后直接按回车键即可。

smbclient //192.168.121.118/josh -U josh
Enter WORKGROUP\josh's password: 
Try "help" to get a list of possible commands.
smb: \>

Linux 挂载Samba共享目录

要在Linux挂载 Samba共享目录,您需要安装cifs-utils软件包。

如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint。请运行命令sudo apt install cifs-utils安装cifs-utils。

如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora。请运行命令sudo yum install cifs-utils安装cifs-utils。

然后创建samba共享目录的挂载点,运行mkdir命令sudo mkdir /mnt/smbmount。最后mount命令挂载samba共享目录。系统将提示您输入用户密码。

sudo apt install cifs-utils
sudo yum install cifs-utils

sudo mkdir /mnt/smbmount

sudo mount -t cifs -o username=josh //192.168.121.118/josh /mnt/smbmount
Password for josh@//192.168.121.118/josh:  ********

Linux 桌面环境访问Samba共享目录

Gnome默认文件管理器,内置访问Samba共享目录的能力。打开文件,然后单击侧栏中的其他位置

连接到服务器中,以格式smb://samba_hostname_or_server_ip/sharename输入Samba服务地址和共享名称。

其中samba_hostname_or_server_ip是Samba服务地址,sharename共享名称。

单击连接,选择注册用户,输入Samba用户名和密码,然后单击连接。文件管理器将显示Samba服务器文件。

macOS 连接Samba共享目录

在macOS,您可以从命令行终端或者使用默认的macOS文件管理器Finder访问Samba共享。

打开Finder,选择执行,然后单击连接到。以格式smb://samba_hostname_or_server_ip/sharename输入Samba共享的地址。

其中samba_hostname_or_server_ip是Samba服务地址,sharename共享名称。

点击连接,选择注册用户,输入Samba用户名和密码,然后单击连接。文件管理器将显示Samba服务器的文件。

Windows 连接Samba共享目录

Windows用户也可以选择从命令行和GUI连接到Samba共享。以下步骤介绍如何使用Windows的文件管理器访问samba共享目录。

打开文件资源管理器,然后在左窗格中右键单击此计算机。选择选择自定义网络位置,然后单击下一步

互联网或网络地址中,以格式smb://samba_hostname_or_server_ip/sharename输入Samba共享的地址。

其中samba_hostname_or_server_ip是Samba服务地址,sharename共享名称。

单击下一步,将提示您输入登录凭证,在下一个窗口中,您可以为网络位置键入自定义名称。默认值将由Samba服务器设置。

单击下一步移至连接设置向导的最后一个屏幕。单击完成,将显示Samba服务器的文件。

结论

在本教程中,您学习如何在Ubuntu 18.04安装Samba服务器以及如何创建不同类型的共享和用户。

我们还向您展示如何Linux,macOS和Windows设备连接到Samba服务器。