一、掌握Samba服务的配置原理
二、在linux下配置samba共享服务(匿名共享、身份验证、账户映射、访问控制)
Samba介绍

Samba是运行在Linux与Unix之上的免费共享服务的软件,是典型服务器/客户端模式,它有两个进程,一个是smbd,主要是用来管理共享文件的进程,另一个是nmbd,用来实现主机名到IP地址的转换(相当于Windows下的NetBIOS的功能),smbd运行在TCP的139、445端口,nmbd则运行在UDP的137、138端口(运行samba服务后可以用如:netstat -anp | grep smbd、netstat -anp |grep nmbd来查看它开放的端口号),如果不运行nmbd进程则客户端只能通过IP地址来访问samba服务器了!
配置文件:
samba的配置文件存放在/etc/samba/下面,叫smb.conf。它的注释较多,不过没有中文的:),它指定需要共享的文件目录、目录共享权限(记住:它也受本地权限限制的啊)、访问日志名称与路径等.它分成两大部分,一是Global Settings, 用来指全局设置的变量,如安全级别等,对整个服务器生效,另一个是对Shared Definitinos,说明共享相关的定义,它以"#"开头为注释行,也有以";"开头的配置范例行,默认是不生效的,如果想设置该行生效,可以把";"去掉即可!
常用的配置选项说明:
[Global] 配置文件必须以[Global]开头(别忘了"["   "]"啊),它说明全局配置的开始;
workgroup = WORKGROUP 指明共享所在的工作组,可以是NT域名、工作组名
server string =Samba Server 客户端看到的服务器的描述信息
netbios name = share file of samba Windows下看到的netbios信息,默认是没有给出的,要使具用此描述,必须手动添加。
hosts allow = 192.168.2. 192.168.1. EXCEPT 192.168.1.10   允许192.168.2.0段和192.168.1.0段访问,但192.168.1.10主机除外(注意:多网段时要用空格隔开)
hosts deny = 192.168.2.10 拒绝192.168.2.10访问(注意:与上一个同时使用时,deny优先生效)
interfaces = 192.168.2.10 当服务器有多个网络接口时,可以指定samba监听端口,默认监听全部端口的访问
smb passwd file = /etc/samba/smbpasswd 指定samba的密码文件所在位置
username map = /etc/samba/smbusers 指定账号映射文件的位置,它是提高安全性的方法,可以防止系统用户直接暴露出来
log file = /var/log/samba/%m.log 默认的日志文件,%m是以主机名称来分别记录日志
max log size = 50 默认日志大小为50K
include = /etc/samba/smb.conf.%U 加入以用户为控制单位的配置文件
include = /etc/samba/smb.conf.%G 加入以组为控制单位的配置文件
security = share | user | server | domain | ads samba系统的安全级别
share安全级别模式,不需要输入用户和密码就可以访问共享资源
user安全级别模式,客户端登录samba服务器,需要提×××法帐号和密码,经过服务器验证才可以访问共享资源
server安全级别模式,客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问
domain安全级别模式,如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域
ads安全级别模式,当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能
guest account=aaaa 让用户aaaa以匿名身份登录,请确保/etc/passwd有此用户
Socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192  设置服务器和客户之间会话的Socket选项,此项设置将优化传输速度。 
admin user = wuzh  指时wuzh就是samba服务的管理员(好象有时候会说是无效参数啊)
---------Share Definitions--------
[public]  中括号里是共享文件名
commont = share director of admin 共享的描述信息
path = /pub  共享文件路径
public = yes|no  是否可以匿名访问
browseable = yes|no 是否出现共享文件名
read only = yes|no 是否只读
writable = yes|no  是否可写
write list = 用户名,用户,@组名 设置可读权限的用户
valid users = 用户名或@组名 设置有效用户
invalid users = 用户名或@组名 设置无效用户
create mask = 0744                设置创建文件时的权限
directory mask = 0755             设置创建目录时的权限
添加samba用户,因为samba用户是基于系统用户的,所以必须先建立系统用户才能添加成samba用户
useradd -s /sbin/nologin smbtest
smbpasswd -a smbtest 
输入两次samba密码即可
smbpass常用选项:
smbpasswd -h 列出帮助信息
smbpasswd -a 添加用户
smbpasswd -x 删除现有的samba用户
smbpasswd -n 删除现有的samba用户密码
smbpasswd -d 禁用现有的samba用户
smbpasswd -e 启用已禁用的samba用户
批量把系统用户转换成smbpasswd密码文件:
cat /etc/passwd |mksmbpasswd.sh > /etc/samba/smbpasswd
smbpasswd 密码文件存放在/etc/samba/smbpasswd里,格式如下:
wuzh:500:561B1EBD1E1C9095AAD3B435B51404EE:5573EACDA2E72CD8CE6E8C433286B800:[U]:LCT-4325DFBD:
为提高安全性一般可以设置如下参数:
socket address = 192.168.2.126 指定监听地址
username map = /etc/samba/smbusers 设置映射账号文件
hosts allow 指明允许访问的地址(网段以"."结束)
hosts deny 明确指出拒绝的地址
smb passwd file 指出密码文件位置
security 设置安全级别
encrypt passwords 以加密的方式访问samba服务器
smbusers文件格式如下:
系统用户名=映射的虚拟账号1,映射的虚拟账号2,...

testparm 是测试smb.conf是否有错误的好用工具,直接testparm就可以显示相关信息了,相当简单
客户端测试:

smbclient //服务器/共享名 -U 用户名%密码
挂载:mount -t cifs //目标/共享名 /本地挂载目录 -o username=用户名%密码

接下来进行试验操作:1.Samba服务匿名共享
2.Samba服务身份验证共享
3.Samba服务账户映射
4.Samba服务访问控制

试验环境:在VMware虚拟机开启一台Linux系统(我这里是Redhat6.5),再开一台Windows7。
试验目的:1.让Windows7作为客户端匿名共享Linux中的文件
2.在Windows7中共享Linux中的文件,但需要身份验证。(身份、密码)
3.给账户配置别名,建立映射关系,然后用别名登录共享。
4.禁止指定的一个或多个网段进行访问。
试验过程:
1.首先我们对镜像文件进行挂载,并安装Samba服务软件包。
分别执行命令:mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/samba-3.6.9-164.el6.x86_64.rpm 安装软件包。如下图所示:

一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
2.通过命令mv /etc/samba/smb.conf /etc/samba/smb.conf.bak 对
配置文件进行重命名。再通过grep -v "#" smb.conf.bak > smb.conf过滤掉配置文件中以#开头的内容,这样也可以做一个配置文件的备份,又方便查找。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
3.接下来进行Samba服务匿名访问共享任务。
首先执行命令vi /etc/samba/smb.conf对配置文件进行修改,如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
4.接下来继续在主配置文件中手动创建一个匿名共享的组,给创建的组设置相应的权限。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
5.以上已经把匿名共享的文件创建好了,接下来我们选择在/opt下面创建一个空目录abc.。然后将abc的权限放到最大(777),这样才能有写入的权限。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
6.配置文件改完之后我们须关闭防火墙、关闭增强×××、重启服务。
执行命令:service iptables stop 关闭防火墙
setenforce 0关闭增强×××
service smb restart重启服务 如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
7..接下来就可以在window7上验证匿名共享文件。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
8.接下来我们进行身份验证共享,所以还是要对主配置文件进行修改(vim /etc/samba/smb.conf)。修改如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
9.继续修改配置文件,再重新写一个组,实现共享需要身份验证,如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
10.接下来先先重启一下服务,然后创建李连杰、吴京两个用户,并设置smb访问的密码,在/opt下创建目录test。并且给test目录最大权限。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
11.重启服务
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
12.接下来在Windows7中清空缓存,进行用户身份验证。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
如果只允许用户吴京有写入权限的话,在配置文件里将writable=yes注释掉就可以了。

13.接下里我们通过账户映射配置,通过创建两个映射别名来进行共享访问。
首先我们先修改配置文件,添加账户映射。如下图所示:
vim /etc/samba/smbuser
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
14.可以让一个网段或多个网段禁止访问,修改配置文件
vim /etc/samba/smb.conf 在test这个组里添加禁止访问的网段。如下图所示:
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
15.拒绝192.168.10网段客户端访问
一、掌握Samba服务的配置原理;二、在linux下配置samba共享服务
到此试验成功!