CentOS 6下超实用的samba配置教程

介绍:
samba是在linux/unix上实现SMB协议的免费软件,通俗来说就是让linux/unix支持与windows间互相共享文件。
安装软件包:

yum install -y samba

samba配置文件介绍
samba配置文件的存放路径为

/etc/samba/

该目录下有以下三个文件:

lmhosts文件中记录着局域网中NetBIOS与IP地址的对应关系
smb.conf是samba的主配置文件,其内容由全局配置部分和共享配置部分组成。
smbusers文件记录着windowns中用户与linux中用户的对应关系,例如windows中的administrator管理员账户对应linux下的root用户。
samba的配置:
在开始配置前,首先明确下需求:
1、user11和user12用户可以通过samba共享来访问自己的家目录,且此共享仅本人可见。
2、创建三个共享,分别为share1、share2、share3,其共享的本地文件夹分别为/tmp/a1、/tmp/a2、/tmp/a3。
3、group1组的用户user1对share1共享有全部权限,group2组的用户user2对share2有全部权限,group3组的用户user3对share1和share2共享都有全部权限;对于share1和share2共享其他人有只读权限;share3为公共存储,所有人都有存取权。
4、所用用户新建的文件都是本人拥有全部权限,其他人只有只读权限。
知道了需求,那么现在就来根据需求来做具体配置吧:

vim /etc/samba/smb.conf                //使用vim文本编辑器打开配置文件

转到第248行,可以看到如下内容,看开头一行,[homes],home是家的意思,加s呢,变成复数了,可以理解成所有用户的家,哈哈,感觉我像是在讲英语。总之,通过配置此部分就可以满足需求1了。

comment选项是用来添加一个文本描述的。
browseable选项定义他人是否可以看到此共享,yes为可以,no为不可以(仅自己可见)。
writable选项用来定义共享是否可写。
valid users选项定义该共享规则对哪些用户启用。

看显而易见,我们只要设置valid users选项,让此共享配置仅对user11和user12用户生效即可满足需求1。

再来看需求2,新建三个共享,这个怎么破?其实很简单啦,配置文件里已经写好了现成的,我们只需要复制成三份就好。
转到配置文件的末尾,可以看到以[public]关键字开头的配置部分,这就是配置共享的模板。

复制前需要注意,这部分配置文件默认被注释掉了,如果你不想在复制完去一点点的删除三份注释符号的话那最好在复制之前把这一份注释符号删掉,如下图:

三个共享有了,但他们的配置文件是一摸一样的,那共享名和共享的文件夹一定也是一样的,要如何为每一个共享做定制呢?
先看这部分配置文件的简单介绍:

开头的[public]是共享名,可任意起,与实际的共享文件夹可以不同名。
comment是没用的文本介绍。
path是指定要共享的本地文件夹的路径。
public是用来指定是否共享的,有yes和no两个选项,至于这两个选项分别是啥意思我就不啰嗦了。
writable用于配置此共享是否支持写入。
printable指定是否支持打印,没有特殊需求的话这里都保持注释状态。
write list此选项用于决定哪些用户或组对此共享拥有写入权限,此处一般保持注释就好,因为linux的权限管理可比samba的好用多了。

以下是按照需求2修改过的配置文件,修改部分已经用红笔标出来了,对照上方配置选项的解释就可以轻松理解下图的配置内容了。

权限配置部分:
下面来看需求3,很明显这里是需要做权限控制了。但我不得不唠叨一下,samba自带的权限管理配置起来那是相当的蛋疼,而且功能弱爆了。所以这里我们使用linux系统权限管理加ACL来做权限控制。
关于ACL的介绍可以参考:

linux下acl权限详解


在配置权限前,我们先把所需要的用户与组都创建完,并把他们加入到samba用户数据库中,再把要共享的文件夹都创建出来。
新建用户:

useradd user11
useradd user12
useradd user1
useradd user2
useradd user3

新建组:

groupadd group1
groupadd group2
groupadd group3

将用户加入组:

usermod -G group1 user1
usermod -G group2 user2
usermod -G group3 user3

将系统用户加入到samba用户数据库中。

pdbedit -a user11
pdbedit -a user11
pdbedit -a user1
pdbedit -a user2
pdbedit -a user3

使用pebedit命令将系统用户加入samba用户数据库中时会提示输入两次密码,此密码可以与linux系统用户密码不相同,加入成功后会出现类似如下提示:

创建共享的文件夹:

mkdir /tmp/a1
mkdir /tmp/a2
mkdir /tmp/a3

接下来就进入到了最重要的文件夹权限配置阶段了。
先来看/tmp/a1目录的权限配置。
将目录所属组改为group1

chown :group1 /tmp/a1

此时目录/tmp/a1的权限为:

此时group1组的成员对目录是没有写权限的,下面就赋予其读写执行的权限:

chmod 775 /tmp/a1


此时group1组已经拥有了应有的权限,但需求3里面要求grou3组对该共享目录也拥有全部权限,这个就需要ACL来完成了。
执行如下命令:

setfacl -m g:group3:rwx /tmp/a1       //配置ACL权限使group3组的成员对/tmp/a1目录拥有全部权限

此时查看权限:

注意权限的最后多了一个+号,这证明ACL权限已经生效了,再执行。

getfacl /tmp/a1         //查看目录的ACL权限


只要有如上图画红线的部分即是配置成功。
至此/tmp/a1这个目录的全部权限已经配置完成,而/tmp/a2目录的权限与/tmp/a1的权限的配置方法雷同,这里不再赘述。
再来看下/tmp/a3目录的权限,很简单,给他777的权限即可。

chmod 777 /tmp/a3

最后的最后,来看看需求4吧,就差这一个了。
这里依然使用ACL权限来完成需求,而不通过修改samba的配置文件。
那要如何配置ACL呢?没错,只需要配置两条默认ACL权限即可。

setfacl -m d:u::rwx /tmp/a?    //这里使用通配符为所有以a开头而第二个字符为任意字符的文件夹配置权限
setfacl -m d:g::rx /tmp/a?

以/tmp/a1文件夹的acl权限为例:

getfacl /tmp/a1


可以看到如上图中红色标注的部分即为配置成功。
 
好啦,4个需求已经全部满足了,尽情测试吧。

linux下acl权限详解

安装软件包

yum install -y acl

配置acl权限
用于acl权限管理的命令主要有两个:

setfacl          //设置acl权限
getfacl          //查看acl权

首先来看setfacl
常用参数:

-b:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-d:设定默认的acl规则
-R:递归的对所有文件及目录进行操作。
-m:修改文件或目录的acl规则。
-x:删除指定acl规则。

以上只列出常用参数,详细命令帮助可参考:http://man.linuxde.net/setfacl
举个例子:想让user1这个用户对~/test目录拥有全部权限,除了修改所有者或所属组之外还能怎样呢?
且往下看。

setfacl -Rm u:user1:rwx ~/test             //使user1用户对test目录拥有全部权限。

执行以上命令后user1用户即可任意操作~/test目录。
来看一下这条命令,setfacl,设置acl权限、参数R代表递归应用,m修改权限、u代表用户,如果想赋予某个组acl权限就用g,:后边接的要赋予acl权限的用户名或组名(不填则修改所有者或所属组的acl权限),紧接着下一个冒号后面跟的就是要赋予这个用户的权限了、最后接要操作的目录或文件名,就这么简单。
再来看一个例子:

setfacl -m d:u::rwx ~/test                //为test目录下新建的文件或目录设置默认acl权限,对所有用户生效

如果写成这样:

setfacl -m d:u:user1:rwx ~/test

这条命令执行后可以达到什么目的呢?我猜,聪明的读者一定猜到了:是给user1创建的文件或目录设置默认acl权限。
如果你是这样想的,那么恭喜你,猜错了。
这条命令实际的意义其实是给所有用户创建的文件或目录都加上user1这个用户的rwx的acl权限~
最后再来看下如何删除acl权限

setfacl -x d:u:user1 ~/test              //删除~/test目录中关于user1的默认acl权限
setfacl -b ~/test                        //删除~/test目录上所有的acl权限

查看acl权限
查看acl权限使用getfacl命令

getfacl ~/test                           //查看~/test目录的acl权限

会输入类似如下内容

另外,当我们执行ls -l时会发现,拥有acl权限的文件或文件夹其linux默认权限后面多一个“+”号。

最后需要注意的是:linux默认权限是优于acl权限的,就是说当liux默认权限和acl权限同时存在时,系统会优先考虑linux默认权限。