赞
踩
如果你有一个由Windows和Linux机器组成的网络,你想在它们之间实现共享。你可以通过使用一个有用的工具Samba来实现这一目标。它是一个开源工具,允许你访问共享资源,包括文件、打印机等。
这是将Ubuntu和Windows计算机联网的最常见方式之一,将Samba配置为文件服务器。可以在Windows或Linux客户端访问Samba服务器的共享文件。
在这篇文章中,使用Ubuntu来安装和配置Samba服务器,讲解如何安装和配置Samba作为Windows和Linux操作系统的文件存储系统。还包括如何使用其他Linux和Windows客户端操作系统访问Samba共享文件。在访问共享文件之前,请确保你的服务器和客户端操作系统在同一个IP子网中。如果是Ubuntu虚拟机,请使用的NAT网络连接。
什么是samba
Samba是一个用于Unix和Linux的免费和开源的SMB/CIFS协议实现,允许在局域网内的Unix/Linux、Windows和macOS机器之间进行文件和打印共享。
[ Server Message Block (SMB)/Common Internet File System (CIFS) protocol ]
Samba通常在Linux上安装和运行。它由几个程序组成,服务于不同但相关的目的,其中最重要的两个是。
- smbd: 提供SMB/CIFS服务(文件共享和打印),也可以作为一个Windows域控制器。
- nmbd: 这个守护程序提供NetBIOS名称服务,监听名称服务器请求。它还允许网络上的其他计算机找到Samba服务器。
在Ubuntu上安装Samba
按Ctrl+Alt+T组合键启动终端, 先更新APT库缓存 update the APT package repository cache。
$ sudo apt update
然后输入以下命令来安装Samba:
$ sudo apt install samba
验证SAMBA的安装
你可以通过输入以下命令验证Samba是否已经成功安装和运行。它将显示Samba服务的状态。
$ sudo systemctl status smbd nmbd
或者查看samba状态:
$ sudo smbstatus
查看版本:
$ smbd --version
查看安装文件:
$ whereis samba
使用GUI设置Samba共享
一旦安装了Samba,你就可以通过Ubuntu默认的文件管理器Nautilus以图形方式共享目录。
如果下面对话框出现,点击Add the permissions automatically。
一旦你分享了一个目录,该目录的图标应该被改变,你可以在下面的截图中看到。
配置Samba用户和权限
安装完samba,除了上面的图形界面直接设置共享,还有使用配置文件的方式,可以更好的控制samba的各种功能。
Samba的主要配置文件位于/etc/samba/smb.conf中。默认的配置文件有大量的注释,以记录各种配置指令。
并非所有可用的选项都包含在默认配置文件中。更多细节请参见man page:The Official Samba 3.5.x HOWTO and Reference Guide
在一个电脑网络中,一个work group是指连接在一个LAN局域网中的电脑集合,他们分享公共的资源和职责。在微软的术语中,Workgroup一般是指点对点的局域网(peer-to-peer local area network)。
与Work group相对的概念是域,domain。一个域指的是,组成域的电脑依靠集中的认证。
所以在smb.conf配置文件中,在[global] section中有两个key/value pairs:
workgroup = EXAMPLE
...
security = user
这里的workgoup要配置成一样的,samba服务器和客户端电脑要一致。如果客户端用的不是workgroup而是domain,就保持默认就好。
Workgroup: 这控制了你的服务器在被客户查询时将显示在哪个工作组中。
Default: workgroup = WORKGROUP
Example: workgroup = MYGROUP
Security:
默认是security = user,因为这是最常见的设置,用于独立的文件服务器或DC(Domain controller)。
其他选项是security =ads 或 security=domain,它们支持将Samba加入到Windows域中。
如果你想主要设置没有密码的共享(访客共享),你应该使用security = user和map to guest = Bad User。这通常用于共享打印机服务器。
关于map to guest:
这个参数可以取四个不同的值,它们告诉smbd如何处理那些在某种程度上不符合有效UNIX用户的用户登录请求。
这四个设置是 :
Never - 意味着拒绝有无效密码的用户登录请求。这是默认的。
Bad User - 意味着拒绝带有无效密码的用户登录,除非该用户名不存在,在这种情况下,它被视为访客登录并被映射到访客账户。
Bad Password - 意味着有无效密码的用户登录被视为访客登录,并被映射到访客账户中。请注意,这可能会引起问题,因为这意味着任何用户如果错误地输入了他们的密码,就会默默地以 "访客 "身份登录--并且不知道他们不能访问他们认为应该访问的文件的原因--不会有消息告诉他们他们的密码是错误的。如果你这样设置参数,Helpdesk services服务台的人会恨你的。
Default: map to guest = Never
Example: map to guest = Bad User // 使用这个参数,就可以访客访问
关于DC域控制器:
域控制器是一种计算机服务器,它响应安全认证请求并验证计算机网络域中的用户。控制器是一个允许主机访问域资源的守门员。它还执行安全策略,存储用户的账户信息,并为一个域来验证用户。
配置Samba共享
1. 首先,我们将需要创建一个Samba目录,所有的共享数据都将存储在这里。打开终端,以sudo身份运行以下命令:
$sudo mkdir -p /srv/samba/share
$sudo chown nobody:nogroup /srv/samba/share/
文件所有者的组和密码文件:/etc/group, /etc/passwd
将文件夹配置成nobody用户,因为guest用户就是默认是这个账户。
它将在根目录下创建新的子目录samba。
或者,我们可以选择一个已经存在的目录作为Samba共享目录。
2. 通过在同一目录或另一目录中复制配置文件,对其进行备份。要复制该文件,以sudo身份运行以下命令:
$ sudo cp /etc/samba/smb.conf /etc/samba/smb_backup.conf
它将在同一目录下制作备份文件。
3. 现在编辑配置文件。Samba的配置文件位于/etc/samba/中一个名为smb.conf的文件中。你可以使用Gedit、Nano或Vim来编辑配置文件。要使用nano编辑器编辑该文件,打开终端,以sudo身份运行以下命令:
$ sudo nano /etc/samba/smb.conf
编辑完,按Ctrl+O进行保存,按Ctrl+X进行退出。
使用配置文件配置Samba共享
现在我们将把我们的新目录samba配置为一个共享。为此,我们将在Samba配置文件smb.conf文件的底部添加:
[share]
comment = Ubuntu File Server Share
path = /srv/samba/share
browsable = yes
guest ok = yes
read only = no
create mask = 0755
其中
[share] = 该共享的名称
comment= 添加该共享的简短描述
Path= 共享的目录。
Read only= 它指定了用户是否被允许写入
Browsable= 该共享是否应该被列在共享列表中, 使得Windows客户可以使用Windows Explorer浏览共享目录。设置成no的话,只有知道共享目录才能访问。
Create mask: 决定了新文件在创建时将拥有的权限。
Guest ok: 允许客户在不提供密码的情况下连接到该共享。
同read only有一个相反的设置,writeable = yes。
如果要控制访问samba服务器的用户,可以使用:valid users = @samba Tom , 这里@后面跟的是Linux的Group name,Tom是单个的用户名。
这个例子使用的路径是/srv/samba/sharename,因为根据文件系统层次标准(FHS),/srv是应该提供特定数据的地方。从技术上讲,只要权限正确,Samba共享可以放在文件系统的任何地方,但我们建议遵守标准。
修改完配置文件,可以运行下面命令检查是否有语法错误:
$ testparm
设置Samba用户账户
现在,为Samba设置一个用户账户。Samba使用系统账户访问共享(Samba user accounts are linked with the local Linux system accounts),但它不接受系统账户的密码。因此,我们将需要为该账户设置一个密码,以sudo身份输入以下命令。当要求输入密码时,输入新密码。
$ sudo smbpasswd -a username
这里的username是系统用户名,如果你不知道你使用的系统用户名,可以使用: $(whoami)来替换。
也可以添加一个新的用户名, 再将这个用户加入到samba中。
$ sudo adduser username
$ sudo smbpasswd -a username
如果想要控制指定用户才能访问共享,可以创建一个新组samba,将这个用户加入这个组中, 然后在smb.conf中的valid users = @samba就表示只有samba这个组的用户才能访问共享。
$ sudo groupadd samba
$ sudo gpasswd -a username samba
同时要保证共享的文件夹对于samba这个组是可读可写的:
$ sudo setfacl -R -m "g:samba:rwx" /srv/samba/share
前面介绍了客人访问的ACL设置:
$sudo chown nobody:nogroup /srv/samba/share/
如果是guest可访问,也可以设置:
$ sudo setfacl -R -m "u:nobody:rwx" /srv/samba/share
重启Samba服务
一旦你完成了所有的配置,通过运行以下命令重新启动Samba服务:
$ sudo systemctl restart smbd.service nmbd.service
正常的服务启动方法:
$ sudo systemctl start smbd nmbd
一旦启动,smbd将监听TCP 139和445端口,nmbd将监听UDP 137和138端口。
TCP 139:用于文件和打印机共享以及其他操作。
TCP 445:NetBIOS-less CIFS端口。
UDP 137:用于NetBIOS网络浏览。
UDP 138: 用于NetBIOS名称服务。
如果你在Ubuntu上启用了UFW防火墙,那么你需要用以下命令打开防火墙中的上述端口。
$ sudo ufw allow samba
连接Samba共享
如前所述,你应该在一个局域网内从Samba服务器访问文件。这意味着你的Samba服务器的IP和连接到它的客户端应该在同一个网络中。
例如,在我的方案中,我有一台Samba服务器和两个客户端:一台是Linux,另一台是Windows。这三台机器都在同一个网络中。
* IP of Samba (Server): 192.168.36.129/24
* IP of Linux (Client): 192.168.36.130/24
* IP of Windows (Client): 192.168.36.1/24
Samba服务器的IP配置
你可以通过在终端运行ifconfig来检查任何机器的IP地址。
$ ifconfig
以下是我的Samba服务器的IP配置:
方法1:从Linux连接
有两种方法可以让你从Linux客户端连接Samba共享。
1. 使用命令行
2. 使用GUI
以下是我的Linux客户端的IP配置。
1. 使用命令行
要通过Linux命令行连接Samba共享,你将需要一个smbclient工具。要安装smbclient,打开终端,以sudo身份运行以下命令:
$ sudo apt install smbclient
一旦安装完成,通过使用以下语法运行命令来访问Samba共享。
$ sudo smbclient //[IP_address or Host_name]/share_name –U username
[IP_address or Host_name]是Samba服务器的IP地址或主机名。
[share_name]是Samba共享的名称
[username]是访问该共享的用户的名字
它将提示输入密码。在你输入密码后,你将登录到Samba CLI。你可以输入help来查看各种命令的列表。
2. 使用GUI
要通过GUI访问Samba共享,打开Linux文件管理器。在文件管理器窗口的左侧窗格中点击连接到服务器。
在 "连接到服务器 "窗口中,以下列语法输入Samba服务器地址,然后点击 "连接"。
smb:// [IP_address or Host_name]/[share_name] 。
将出现以下屏幕。Connect As,选择注册用户。
输入Samba用户名和密码。把域保留为默认值,然后点击连接。
你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。
或者直接点击Network,就能看到有samba共享的机器,点击进入,就能访问samba共享了。
方法2:从Windows连接
你可以通过两种方式使用Windows操作系统连接到Samba共享。
1. 使用运行工具
2. 使用文件浏览器
以下是我的Windows客户机的IP配置。
1. 使用运行工具-Run utility
按Windows键+R来启动运行工具。在下面的语法中输入访问Samba共享的地址,然后按回车键。
\\[IP-address]\[share_name]
它将提示提供凭证。输入Samba共享的凭证,然后点击确定。
你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。
2. 使用文件资源管理器
在窗口中启动文件资源管理器。在左边的窗格中,右键点击这台电脑。然后从下拉选项中选择添加一个网络位置。
它将启动 "添加网络位置 "向导。继续点击 "下一步",直到出现以下屏幕。按照语法添加Samba共享地址,然后点击下一步。
\\[Ip-address]\share_name
在下一个屏幕,你可以改变共享位置的名称。点击下一步,然后点击完成来完成这个过程。
当上述过程完成后,它将提示需要凭证,输入Samba共享的凭证并点击确定。
你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。
和Linux类似,也可以直接点击Network,就能看到有samba共享的机器,点击进入,就能访问samba共享了。
也可以Map network drive.
因此,总结一下,我们已经学会了如何在Ubuntu上安装和配置Samba来创建共享。我们已经学会了如何使用Linux和Windows操作系统连接这些共享。
可能遇到的问题 Troubleshooting Tip
如果你的Samba服务器没有按照预期工作,你可以检查/var/log/samba/目录下的日志文件。如果你想记录更多的信息,你可以在/etc/samba/smb.conf文件的[global]部分添加以下一行来提高日志级别。
log level = 2
如果显示没有权限连接,可以尝试下面命令:
net use \\samba-server-ip\share-name /delete
net use \\samba-server-ip\share-name /user:samba-username password
Win10有时能ping通服务器,或者可以添加用户登录凭证:
win key+R,输入“control userpasswords2”,选择advanced标签,点击密码管理或manage passwords。
选择windows凭据,然后添加,把你虚拟机的IP以及用户名和密码加上。
还有一种方法:
运行gpedit.msc, 计算机配置-> 管理模板->网络->Lanman工作站->启用不安全的来宾登录
还有可能的问题:
Windows功能:启动或关闭里面,打开win10对smb1.0/cifs文件共享支持
win10 能Ping通却无法访问虚拟机Ubuntu 14.04 samba的问题(已解决)_无语僧-CSDN博客_windows10无法访问虚拟机
确保选中“SMB1.0/CIFS文件共享支持”,然后重新启动电脑即可生效。
参考:
How to Install and Configure Samba on Ubuntu – VITUX
How to Install Samba on Ubuntu
Install and Configure Samba Server on Ubuntu for File Sharing
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。