Samba是SMB/CIFS网络文件共享协议的开源实现,该协议允许终端用户访问文件,打印机和其他共享资源。
本教程介绍如何在Ubuntu 20.04安装和配置Samba,使你的计算机可以通过网络在不同操作系统之间提供文件共享。
我们将创建用户,sadmin具有对所有共享的读写访问权限的管理用户。josh具有自己的私有文件共享的普通用户。
我们将创建共享,users所有用户都可以读取/写入此共享。josh此共享可以仅由josh和sadmin用户读取/写入。
文件可以被在网络的所有设备访问。在本教程的最后,我们还将说明如何在Linux,Windows和macOS客户端连接到Samba服务器的详细说明。
在继续之前,请确保您以个具有sudo权限的用户登录到Ubuntu 20.04。
安装 Samba服务器
Samba可从Ubuntu官方软件源获得。要在Ubuntu 20.04安装Samba,请运行命令sudo apt update && sudo apt install samba
更新apt软件包索引并安装Samba。
安装完成后,Samba服务将自动启动。要检查Samba服务器是否正运行,请运行命令sudo systemctl status nmbd
。至此,你已经在Ubuntu 20.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 20.04正在运行着防火墙,则需要打开端口137
和138
端口,允许传入的UDP连接。打开端口139
和445
允许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
...
# 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服务器的访问。
请取消注释行interfaces = 127.0.0.0/8 eth0
并指定要绑定到的接口,还有行bind interfaces only = yes也取消注释。
...
# 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
...
创建 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
家目录,并将目录的权限设置为用户josh
和sambashare
用户组所有,运行命令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
和用户组sadmin
。sadmin
组的所有成员将会拥有管理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
目录所有权设置为用户sadmin
和sambashare
用户组。所有通过身份验证的用户都可以访问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
这些选项的配置是,[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 20.04安装Samba服务器以及如何创建不同类型的共享和用户。
我们还向您展示如何Linux,macOS和Windows设备连接到Samba服务器。