零、问题需求
常常要在Windows与Linux之间共享文件,Samba是一个很常见的选择:Linux运行Samba服务,Windows访问Linux上共享的文件。在不须要用户访问控制的场景下,Samba服务的安全级别设置为共享(share)就能够了。个人需求是想对Samba服务的访问者进行身份验证,因此选择用户安全级别(user)。user级别要求用户访问samba服务时提供用户名和密码,并且身份验证由 samba server 负责。下面是用smbpasswd方式作的,因个人需求很单一,因此Samba的配置文件也很是简单。这里作个笔记记录一下以备忘。
1、准备Samba软件
1. 安装Samba相关软件包,安装过程略
2. 备份samba配置文件,咱们后面要本身从头新建一个配置文件
- sudo mv /etc/samba/smb.conf /etc/samba/smb-original.conf
- sudo touch /etc/samba/smb.conf
2、工做场所
咱们在/etc/samba目录下工做,涉及的文件都在这个目录下。
3、相关文件
用smbpasswd完成user安全级别须要修改或者生成的文件只有下面3个:
/etc/samba/smb.conf # samba配置文件,你们都懂的
/etc/samba/smbusers # 用来定义用户名映射,好比能够将root换成administrator、admin等
/etc/samba/smbpasswd # samba密码存放文件
下面简单描述一下这3个文件。
4、smb.conf 文件
samba自带的smb.conf文件注释不少,例子给的也很多,容易让人以为这个文件很复杂,其实它的框架很简单,主要包括下面几个小节:
- [global]
-
- [homes]
-
- [printers]
-
- [自定义小节]
-
其中[自定义小节]能够有多个,分别共享不一样的目录。
我不关心打印机共享,因此注释掉了[printers]小节。
我也不想让用户登录samba以后看到本身的“家”目录,因此也注释掉了[homes]小节。由于登录samba server的用户也同时必须是linux系统的用户,即存在于/etc/passwd文件中的用户,因此每一个samba用户会有本身的“家”目录,在/home下,目录名称是使用者本身的账号。
咱们主要关注[global]小节和[自定义小节],[global]小节中咱们这次关注的重要参数有如下几个:
说明:指明共享所在的工做组,能够是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。
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share:用户访问Samba Server不须要提供用户名和口令, 安全性能较低。
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。后面会介绍这个文件。
说明:是否将认证密码加密。由于如今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表明客户端主机名)。
说明:同一客户最多能打开的文件数目
- socket options = TCP_NODELAY
说明:用来设置服务器和客户端之间会话的Socket选项,能够优化传输速度。
[自定义小节]小节主要的参数以下:
说明:comment是对该共享的描述,能够是任意字符串。
说明:path用来指定共享目录的路径。
说明:writable用来指定该共享路径是否可写。这里咱们容许写入,以知足文件双向共享。
说明:browseable用来指定该共享是否能够浏览。
说明:available用来指定该共享资源是否可用。
5、smbusers 文件
该文件格式以下:
系统用户名 = 映射的虚拟帐号1,映射的虚拟帐号2,...
例如:
songyd用户是samba用户,也是一个Linux系统的帐号,为了避免让samba用户知道存在songyd这个系统帐号,可用这个文件实现songyd帐号到虚拟帐号admin的一个映射。只需告诉使用者用admin帐号登录便可,这样就保护了songyd这个帐号。固然此时用songyd帐号登录samba也是能够的。
6、smbpasswd 文件
该文件格式以下:
- name:uid:Lanman Password Hash:NT Password Hash:Account Flags:Last Change Time:
该文件可能默认并不存在,须要手动创建。创建后使用如下命令添加samba帐号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文件中添加记录。
7、最后结果
- [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
8、重启服务
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)协议向客户机提供文件空间和打印服务。
- sudo service smbd restart
- sudo service nmbd restart
9、软件环境
Linux系统 :ubuntu 11.10
Samba版本:Samba 3.5.11
10、小结
这仅是快速实现user安全级别的samba共享的一个例子,介绍得很粗浅,省略了不少未涉及内容。网上介绍samba配置的文章不少,如有更复杂需求,请你们google之,baidu之:)