(一)什么是Samba服务
Samba(SMB)是一个软件,主要功能是能让Linux与Windows之间实现文件共享和打印共享。
Samba有两个核心的守护进程,分别是smbd和nmbd,从Samba服务器启动到停止期间持续运行。
smbd:提供文件共享的
smbd监听139TCP端口,smbd是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有smbd服务启动,才能实现文件的共享。
nmbd:提供NETBIOS 名称解析的
nmbd负责监听137TCP端口和137UDP端口,nmbd服务是负责解析用的,类似与DNS实现的功能,nmbd可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件。
(二)配置Samba服务器
1.安装Samba服务
sudo apt-get install samba
2.创建共享目录(这一步可以不需要,后面我就没有共享这个目录)
sudo mkdir /home/xiaoming/share
sudo chmod 777 /home/xiaoming/share
ps:xiaoming为用户名,share为创建的共享目录
3.配置smb.conf文件
Samba服务的配置较为复杂,配置项也比较多。
-
smb.conf配置文件中含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。
-
每段的参数的格式是:名称=值。配置文件中一行一个段名和参数,段名和参数名不分大小写。
-
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
-
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm–v命令可以详细的列出smb.conf支持的配置参数。
(1)备份原有的配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.cp
(2)修改配置文件
sudo gedit /etc/samba/smb.conf
简单配置:
在配置文件smb.conf末尾添加如下代码
[share]#share这个共享段名可以自己定义
path = /home #设置Samba服务器的共享目录路径,这里我共享了/home目录
available = yes
browseable = yes
public = yes
writable = yes
valid users = xiaoming #这个xiaoming是自己起的,后面在添加Samba账户时就是添加的这个
create mask = 0700
directory mask =0700
force user =nobody
force group = nogroup
然后在[global]段中加入下面代码:
workgroup = WORKGROUP
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
后面的三行是为了防止出现中文目录乱码的情况。
(3)创建Samba账户
- 创建前面提到的xiaoming账户:
sudo useradd xiaoming
- 为账户xiaoming增加samba账户密码(也就是增加网络使用者xiaoming):
sudo smbpasswd -a xiaoming
输入命令后回车,会提示你输入密码。如果没有密码,在Windows上访问时将无法登录。
删除网络使用者的命令是sudo smbpasswd -x xiaoming
- 重启Samba服务:
sudo service smbd restart
sudo service nmbd restart
(4)Windows客户端访问Linux服务器的共享文件
- 查看Linux的IP地址:
ifconfig
- 打开Windows的文件夹进行测试:
在快速访问那一栏输入\\192.168.6.129\share
192.168.6.129是我Samba服务器的地址,share是我在smb.conf配置文件中配置的共享资源段的段名。
点击回车,回车过后会提示你输入用户名和密码。用户名为xiaoming,密码为刚刚你自己设置的密码。点击确定后就可以连接到共享目录了。
- 更换用户凭证:
当需要更换网络凭证来登录,也就是想换一个账户来登录时,可以在Windows中使用组合键Win+R,然后输入cmd来打开命令解释器,接着输入:net use * /del /y
来清除账户登录信息,下次连接时就可以输入别的账户来登录了。当然你也可以将net use * /del /y
中的*
换成你想要断开的连接,如可以将*
换成\\192.168.6.129\share
。
(5)Linux客户端访问Windows服务器的共享文件
- 配置Windows共享目录,鼠标右键——属性——共享,点击“网络文件和文件夹共享”下的“共享”,然后添加你要共享的用户(选了之后一定要记得点“添加”)以及配置权限。在“安全”中可以配置对方对于你共享文件夹的操作权限,有时候你想改文件提示你说权限不够就是没有在“安全”这一项中给写的权限(在“安全”中配置权限这一点对于Windows访问Windows的共享文件夹也适用)。
- 在Linux中查看Windows的共享资源
输入命令:
sudo smbclient -L //192.168.31.78/share
192.168.31.78是我Windows的ip,share是我共享的目录。当连接Windows共享目录不成功并且出现以下错误提示时:Protocol negotiation failed: NT_STATUS_CONNECTION_RESET,多半是因为我们目前的samba客户端使用的协议是SMB1,但是Windows10已经使用SMB2这个协议了,所以我们可以使用-m SMB2这个命令行参数来强制sambaclient使用SMB2协议,即输入命令时输入:sudo smbclient -m SMB2 -L //192.168.31.78/share
。但是每次都使用命令行显然不方便,那么我们可以修改配置文件,在/etc/samba/smb.conf文件里的[global]段中添加client max protocol = SMB2 ,然后重启samba服务,就可以正常访问Windows共享文件了。
3. 在Linux中访问Windows的共享资源
输入命令:
sudo smbclient //192.168.31.78/share -U user
如果你在Windows中明确设置了访问的用户是谁,而不是everyone都可以访问,那么user就是你设置的那个用户名。然后输入ls
后就可以看到共享目录里的文件了,接着可以输入命令get 文件名
就可以将共享目录里的文件下载到Linux中了。
配置参考链接1
配置参考链接2
关于Ubuntu16.04连接Windows10共享失败的问题解决