如何在Ubuntu 20.04安装和配置Samba
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 /sambaSamba权限控制使用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/joshsudo 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 joshNew 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-clientLinux 连接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 joshEnter 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/smbmountPassword 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服务器。