如何在Ubuntu 18.04上安装和配置Samba
Samba是SMB / CIFS网络文件共享协议的免费开放源代码重新实现,允许最终用户访问文件,打印机和其他共享资源。
本教程介绍了如何在Ubuntu 18.04上安装Samba并将其配置为独立服务器,以通过网络在不同操作系统之间提供文件共享。
我们将创建以下Samba共享和用户。
使用者:
- 管理员 -具有对所有共享的读写访问权限的管理用户。
- 乔希 -具有自己的私人文件共享的普通用户。
分享:
- 使用者 -所有用户都可以通过读取/写入权限访问此共享。
- 乔希 -只有用户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系统上运行防火墙,则需要允许端口上的传入UDP连接 137
和 138
和端口上的TCP连接 139
和 445
。
假设您正在使用 UFW
要管理防火墙,您可以通过启用“ Samba”配置文件来打开端口:
sudo ufw allow 'Samba'
配置全局Samba选项
在更改Samba配置文件之前,请创建备份以供将来参考:
sudo cp /etc/samba/smb.conf{,.backup}
Samba软件包随附的默认配置文件是为独立的Samba服务器配置的。 打开文件并确保 server role
被设定为 standalone server
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配置文件中是否有错误。 如果没有语法错误,您将看到 Loaded services file OK.
最后,使用以下命令重新启动Samba服务:
sudo systemctl restart smbd
sudo 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
-禁用此用户的外壳程序访问。-G sambashare
-将用户添加到sambashare
组。
创建用户的主目录并将目录所有权设置为user josh
和组 sambashare
:
sudo mkdir /samba/josh
sudo 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 sadmin
sudo smbpasswd -e sadmin
接下来,创建 Users
共享目录:
sudo mkdir /samba/users
将目录所有权设置为用户 sadmin
和组 sambashare
:
sudo chown sadmin:sambashare /samba/users
所有经过身份验证的用户都可以访问此目录。 以下 chmod
命令为成员提供写/读访问权限 sambashare
分组 /samba/users
目录:
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
-共享的路径。browseable
-是否应在可用共享列表中列出该共享。 通过设置为no
其他用户将无法看到该共享。read only
-是否在valid users
列表能够写入此共享。force create mode
-设置此共享中新创建文件的权限。force directory mode
-设置此共享中新创建目录的权限。valid users
-允许访问共享的用户和组的列表。 组前缀为@
符号。
有关可用选项的更多信息,请参见Samba配置文件文档页面。
完成后,使用以下命令重新启动Samba服务:
sudo systemctl restart smbd
sudo systemctl restart nmbd
在以下各节中,我们将向您展示如何从Linux,macOS和Windows客户端连接到Samba共享。
从Linux连接到Samba共享#
Linux用户可以使用文件管理器从命令行访问samba共享或挂载Samba共享。
使用smbclient客户端#
smbclient
是一个允许您从命令行访问Samba的工具。 的 smbclient
大多数Linux发行版中尚未预安装该软件包,因此您需要使用分发软件包管理器进行安装。
安装 smbclient
在Ubuntu和Debian上运行:
sudo apt install smbclient
安装 smbclient
在CentOS和Fedora上运行:
sudo yum install samba-client
访问Samba共享的语法如下:
mbclient //samba_hostname_or_server_ip/share_name -U username
例如,连接到名为 josh
在具有IP地址的Samba服务器上 192.168.121.118
作为用户 josh
您将运行:
smbclient //192.168.121.118/josh -U josh
系统将提示您输入用户密码。
Enter WORKGROUPjosh'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
在具有IP地址的Samba服务器上 192.168.121.118
作为用户 josh
到 /mnt/smbmount
您将运行的安装点:
sudo mount -t cifs -o username=josh //192.168.121.118/josh /mnt/smbmount
系统将提示您输入用户密码。
Password for [email protected]//192.168.121.118/josh: ********
使用GUI#
文件,Gnome中的默认文件管理器具有内置选项,可以访问Samba共享。
- 打开文件,然后单击侧栏中的“其他位置”。
- 在“连接到服务器”中,以以下格式输入Samba共享的地址。
smb://samba_hostname_or_server_ip/sharename
。 - 单击“连接”,将出现以下屏幕:
- 选择“注册用户”,输入Samba用户名和密码,然后单击“连接”。
- 将显示Samba服务器上的文件。
从macOS连接到Samba共享
在macOS中,您可以从命令行或使用默认的macOS文件管理器Finder访问Samba共享。 以下步骤显示了如何使用Finder访问共享。
- 打开“ Finder”,选择“ Go”,然后单击“ Connect To”。
- 在“连接到”中,以以下格式输入Samba共享的地址
smb://samba_hostname_or_server_ip/sharename
。 - 单击“连接”,将出现以下屏幕:
- 选择“注册用户”,输入Samba用户名和密码,然后单击“连接”。
- 将显示Samba服务器上的文件。
从Windows连接到Samba共享
Windows用户还可以选择从命令行和GUI连接到Samba共享。 以下步骤显示了如何使用Windows File Explorer访问共享。
- 打开文件资源管理器,然后在左窗格中右键单击“ This PC”。
- 选择“选择自定义网络位置”,然后单击“下一步”。
- 在“ Internet或网络地址”中,以以下格式输入Samba共享的地址
\samba_hostname_or_server_ipsharename
。 - 单击“下一步”,将提示您输入登录凭据,如下所示:
- 在下一个窗口中,您可以为网络位置键入自定义名称。 默认的将由Samba服务器获取。
- 单击“下一步”移至连接设置向导的最后一个屏幕。
- 单击“完成”,将显示Samba服务器上的文件。
结论#
在本教程中,您学习了如何在Ubuntu 18.04上安装Samba服务器以及如何创建不同类型的共享和用户。 我们还向您展示了如何从Linux,macOS和Windows设备连接到Samba服务器。
桑巴乌汶图