【Kali Linux】搭建 samba 实现 Windows 与 Linux 共享文件夹互相访问

发布于 2017年10月30日 00:00:00 - 技术分享 - Linux

经常要在Windows与Linux之间共享文件,Samba是一个很常见的选择:Linux运行Samba服务,Windows访问Linux上共享的文件。在不需要用户访问控制的场景下,Samba服务的安全级别设置为共享(share)就可以了。我的需求是想对Samba服务的访问者进行身份验证,所以选择用户安全级别(user)。

user级别要求用户访问samba服务时提供用户名和密码,而且身份验证由 samba server 负责。

一、准备Samba软件

 

1.安装Samba相关软件包,首先打开终端,输入命令:

apt-get install samba

 

2.备份samba配置文件,我们后面要自己从头新建一个配置文件:

cd /etc/samba
cp smb.conf smb.conf.bak
echo "" > smb.conf
vim smb.conf

 

这是一个samba配置的例子,下文中我们会详细的说明

[Share]
path = /root/Public
public = yes
writable = yes
available = yes
browseable = yes

 

二、工作场所

 

我们在/etc/samba目录下工作,涉及的文件都在这个目录下。

 

三、相关文件

 

用smbpasswd完成user安全级别需要修改或者生成的文件只有下面3个:

/etc/samba/smb.conf   # samba配置文件,大家都懂的
/etc/samba/smbusers # 用来定义用户名映射,比如可以将root换成administrator、admin等
/etc/samba/smbpasswd # samba密码存放文件

 

下面简单描述一下这3个文件。

 

四、smb.conf 文件

 

samba自带的smb.conf文件注释很多,例子给的也不少,容易让人觉得这个文件很复杂,其实它的框架很简单,主要包括下面几个小节:

 

[global]
......
[homes]
......
[printers]
......
[自定义小节]
......

 

其中[自定义小节]可以有多个,分别共享不同的目录。

我不关心打印机共享,所以注释掉了[printers]小节。

我也不想让用户登陆samba之后看到自己的“家”目录,所以也注释掉了[homes]小节。因为登陆samba server的用户也同时必须是linux系统的用户,即存在于/etc/passwd文件中的用户,所以每个samba用户会有自己的“家”目录,在/home下,目录名称是使用者自己的帐号。

 

我们主要关注[global]小节和[自定义小节],[global]小节中我们此次关注的重要参数有以下几个:

 

workgroup = WORKGROUP

说明:指明共享所在的工作组,可以是NT域名、工作组名

 

server string = samba server on ubuntu

说明:客户端看到的服务器的描述信息

 

netbios name = ubuntu_smb

说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了

 

interfaces = 127.0.0.0/8 eth0

说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址

 

hosts allow = 192.168.1. 192.168.163. 192.168.153.

说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。我这里只允许3个网段里的所有客户端访问samba server

 

security = user

说明:设置用户访问Samba Server的验证方式,一共有四种验证方式:

1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。注意:在新版中,此项已经被废弃了,已改为 security = user + map to guest = Bad User 来实现

2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。

3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。

4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

我只需要user级别的安全验证就可以了。

 

username map = /etc/samba/smbusers

说明:用来定义用户名映射,比如可以将root换成administrator、admin等。要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,以保护Linux的系统账号root。后面会介绍这个文件。

 

encrypt passwords = true

说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。

 

passdb backend = smbpasswd

说明:passdb backend密码验证后端。目前支持的有三种:smbpasswd、tdbsam和ldapsam。其中smbpasswd方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。这里我选用smbpasswd。

 

smb passwd file =/etc/samba/smbpasswd

说明:用来定义samba用户的密码文件。smbpasswd文件如果默认不存在,要手工新建。后面有介绍这个文件。

 

log file = /var/log/samba/log.%m

说明:设定 samba server 日志文件的储存位置和文件名(%m代表客户端主机名)。

 

max open files = 1000

说明:同一客户最多能打开的文件数目

 

socket options = TCP_NODELAY

说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。

 

[自定义小节]小节主要的参数如下:

 

comment = code

说明:comment是对该共享的描述,可以是任意字符串。

 

path = /home/songyd/code

说明:path用来指定共享目录的路径。

 

writable = yes

说明:writable用来指定该共享路径是否可写。这里我们允许写入,以满足文件双向共享。

 

browseable = yes

说明:browseable用来指定该共享是否可以浏览。

 

available = yes

说明:available用来指定该共享资源是否可用。

 

五、smbusers 文件

 

该文件格式如下:

系统用户名 = 映射的虚拟账号1,映射的虚拟账号2,...

 

例如:songyd = admin

songyd用户是samba用户,也是一个Linux系统的账号,为了不让samba用户知道存在songyd这个系统账号,可用这个文件实现songyd账号到虚拟账号admin的一个映射。只需告诉使用者用admin账号登陆即可,这样就保护了songyd这个账号。当然此时用songyd账号登陆samba也是可以的。

 

六、smbpasswd 文件

 

该文件格式如下: 

name:uid:Lanman Password Hash:NT Password Hash:Account Flags:Last Change Time:

 

该文件可能默认并不存在,需要手动建立。建立后使用以下命令添加samba账号songyd的密码:

sudo smbpasswd -a songyd #此处为添加songyd的密码
sudo smbpasswd -e songyd #此处为启用songyd的密码

 

这个命令会在/etc/samba/smbpasswd中写入类似如下内容:

songyd:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:BC53166B76BB840735D6AB4438B4CD5E:[U ]:LCT-4EA2F59B:

这些内容是命令自己添加的,我们不用去管。

【注意】有时发现smbpasswd命令即使执行没有错误,但/etc/samba/smbpasswd中却没有添加任何内容。这是由于smb.conf的passdb backend参数配置不正确,此参数必须设置为smbpasswd,这时smbpasswd -a songyd才会在/etc/samba/smbpasswd文件中添加记录。

 

七、最后结果

 

[global]
 workgroup = WORKGROUP
 server string = samba server on ubuntu
 netbios name = ubuntu_smb
 interfaces = 127.0.0.0/8 eth0
 hosts allow = 192.168.1. 192.168.163. 192.168.153.
 security = user
 username map = /etc/samba/smbusers
 encrypt passwords = true
 passdb backend = smbpasswd
 smb passwd file =/etc/samba/smbpasswd
 log file = /var/log/samba/log.%m
 max open files = 1000
 socket options = TCP_NODELAY

;[homes]
; comment = home directories
; browseable = no
; writable = yes
; valid users = %S
; create mode = 0664

;[printers]
; printable = Yes
; browseable = No
; path = /var/spool/samba

[code]
 comment = code
 path = /home/songyd/code
 writable = yes
 browseable = yes
 available = yes

 

八、重启服务

 

smb.conf修改完成,smbusers也已添加完毕,smbpasswd文件也已通过命令成功添加了记录,下面重启samba服务即可。Samba 有两个守护进程(nmbd 和 smbd),需要运行它们Samba 才能正常工作。

nmbd 是一个服务器,它可以理解和响应 NetBIOS over IP 命名服务请求,比如 Windows 95/98/ME、Windows NT、Windows 2000、Windows XP 和 LanManager 客户机等 SMB/CIFS客户机产生的请求。它还参与浏览协议,从而构建 Windows 网络邻居视图。

smbd 是服务器守护进程,它向 Windows 客户机提供文件共享和打印服务。这个服务器使用 SMB(或CIFS)协议向客户机提供文件空间和打印服务。

 

service smbd restart
service nmbd restart

 

九、Windows下访问

 

首先Kali Linux的IP地址,比如大叔的IP是:192.168.1.105

在windows运行中输入 \\192.168.1.105 会弹出对话框,输入 smbusers 的帐号和 smbpasswd 的密码

就可以在文件夹中可以看见 Share 文件夹

 

十、验证是否可读可写

在Share文件夹中新建一个 hello.txt,写入任意字符,如 hello, Kali

进入Kali,cd /root/Public

查看 hello.txt,显示 hello, kali

编辑 hello.txt,新加一行,如 hello, windows

同理,在windows下查看。

成功。

 

十一、软件环境

 

Linux系统  :ubuntu 11.10

Samba版本:Samba 3.5.11

 

十二、小结

 

这仅是快速实现user安全级别的samba共享的一个例子,介绍得很粗浅,省略了很多未涉及内容。网上介绍samba配置的文章很多,若有更复杂需求,请大家google之,baidu之:)

 


 

一些问题汇总:

 

一、在虚拟机情况下Linux与Windows互相无法Ping通

 

这是因为两个系统的IP地址段,不在同一个段。

解决方案是在VMware(Win版/Mac版)中,要将网络适配器设为:桥接模式并在复制物理网络前打勾

 

 

二、win7访问Linux Samba的共享目录提示“登录失败:用户名或密码错误”解决方法(方法来自网上,但大叔在Kali下尝试没有成功,但网上这个方案最多,先存个档,以后在Ubantu里可以试试)

 

默认情况下,Windows7无法正常访问NAS或者Samba服务器上的共享文件夹。

原因在于从Vista开始,微软默认只采用NTLMv2协议的认证回应消息了,而目前的NAS系统和Samba还只支持LM或者NTLM。

 

解决办法:修改本地安全策略

 

通过Samba服务可以实现UNIX/Linux主机与Windows主机之间的资源互访,由于实验需要,轻车熟路的在linux下配置了samba服务,操作系统是redhat linux 9.0,但是在Windows7下访问的时候问题就出现了,能够连接到服务器,但是输入密码的时候却给出如图一的提示:

 

 

在Linux下的smb.conf配置文件里面的配置完全没有错误,仔细查看配置还是正常,如果变动配置文件里面的工作组或者允许IP地址Windows7会出现连接不上的情况,不会出现提示输入用户名和密码。

这种情况看来是windows7的问题,解决的办法是:

1.单击”开始“-“运行”,输入secpol.msc,打开“本地安全策略”,在本地安全策略窗口中依次打开“本地策略”-->“安全选项”,

2.在右侧的列表中找到“网络安全:LAN管理器身份验证级别”,把这个选项的值改为“发送 LM 和 NTLM – 如果已协商,则使用 NTLMv2会话安全”,最后确定,如图二。

 

 

到这里我们再连接samba服务器,输入密码就可以正常访问samba服务器了。

 

 


转自:

http://blog.csdn.net/wh_19910525/article/details/47103957

http://blog.csdn.net/qq_20480611/article/details/50252281

http://blog.chinaunix.net/uid-20537084-id-2977850.html

 

转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:Dy大叔的日常

转载自 【Kali Linux】搭建 samba 实现 Windows 与 Linux 共享文件夹互相访问 | XDY.ME@Dy大叔的日常

XDY.ME@Dy大叔的日常