上季我们介绍了samba服务器的安装,常用配置文件,还有匿名登陆的samba服务器
今天我们主要学习基于用户名的访问控制
其实samba的访问控制参数都不是很多,只要是你灵活运用,把samba自带的访问控制,防火墙,文件权限等等结合使用,就能搭建功能强大的samba服务器
上季已经说了share级别的安全,今天我们就讲user级别了,把我们下面的任务规划一下
1.一个公司要求一个公共的交换文件服务器,都可以访问并写入,但是不可以删除和修改其他用户的文件
2、技术部需要一个文件服务器,用于存放常用的软件工具,所有人都可以访问,但是只有技术部的人可以写入 
主要就是上面两个功能来开展,我们来分析下
一个samba服务器,要实现上面两个功能
用我们以前学过的知识,你们觉得可以有哪些方案?
用samba服务器实现上面的功能,有两种规划方案
使用域和user级别都可以,但是测试域比较麻烦,还要活动目录,所以我们就使用user级别
有人可能会问为什么不可以使用share级别,如果全局使用share,局部需要用户登陆的话,登陆框是灰色的,不能输入用户名,这个是不是samba服务器设置的一个bug,我也说不清楚,反正我们就尽量不这样设计吧
如果使用user模式,应该需要两个目录,一个是交换目录,一个是技术部的目录,交换目录都可以写入,所以权限要777,但是都可以写入的话,就可以删除别人的文件,所以我们要加个冒险位,限制只有root和文件所有者才能删除,第一个题目完成了
第二个题目就更简单了,所有人可以访问,但是只有技术部的可以写,我们只需要在局部设置write list = @jishubu 就可以了,如果想要更安全的话,还可以设置目录权限是775,让目录属于技术部组
下面我们开始测试吧,建立两个目录,一个是exchange,一个是jishubu,都建立在/下吧,然后改变他们的权限
p_w_picpath
然后添加用户test1 和添加jishubu组,把test1加入到技术部组,最后把/jishubu的所属组改成技术部
p_w_picpath
我们还要建立一个公共的用户,提供所有用户登陆samba服务器使用
useradd smbtest
p_w_picpath
到这里,我们的工作就算完成了,下面我们就开始配置我们的服务器
请大家打开samba服务器的主配置文件 
vim /etc/samba/smb.conf
第一步打开selinux,如果你没有打开的话
复制29行的语句,然后在终端里面执行
p_w_picpath
我们架设服务器的环境是,selinux强制
system-config-selinux修改bool值的
RHEL4的selinux只保护了40多个进程,RHEL5的selinux保护达到了200个进程吧,具体数值记不得了,selinux都是安装了的
setenforce 1,然后getenforce 查看
p_w_picpath
如果是enforcing 处于强制状态就算打开了
selinux有三种状态
p_w_picpath
ENFORCING,就是处于保护状态,selinux会禁止危险的动作并记录日志
permissive  是只记录日志
disabled 关闭 
用setup设置吧
好了,我们继续,然后设置目录的上下文
复制39行的内容,修改要共享目录的上下文,只复制冒号后面的部分
p_w_picpath
chcon -t samba_share_t /exchange/
chcon -t samba_share_t /jishubu/
p_w_picpath
改变上下文都使用使用的chcon -t
设置selinux都是setsebool -P 
selinux的相关知识,大家看看吧
RHCE考试,要求一般selinux是处于强制状态的
workgroup 设置工作组 
server string 服务器描述 
username map 用户名映射,默认没有,等会我们会讲
interfaces 如果服务器有多块网卡,可以设置你想开放的网卡,一般不管,默认都开放
hosts allow 设置可以访问服务器的网段,注释表示不限制
p_w_picpath
使用user安全模式security = user 
p_w_picpath
其他的全局配置都不管了,直接跳到最后,开始定义共享目录
exchange的定义
[exchange] 共享目录名字
comment 目录描述
path 共享目录的路径
public 所有用户可以访问
writeable 所有用户可以写入
printable 不是打印机
write list 在这个位置是没有意义的 
p_w_picpath
public和valid users 不能同时使用,这样public没效果
如果writables 和write list同时使用,应该是以writable 起作用,但是最好,避免歧义,我们删除write list字段哈~
这样第一个目录就OK了
下面写第二个目录的定义
p_w_picpath
在samba服务器里表示一个组可以使用@组名 也可以使用 +组名
一个简单samba服务器配置就算完成了,保存退出配置文件
下面我们建立samba用户
建立samba用户的前提是,/etc/passwd文件里要有这个用户名,我们才可以建立成samba用户
我们刚才建立了smbtest和test1两个用户
现在我们把他们建立成samba用户
建立用户的时候要使用 -a 参数,如果改samba用户的密码,就不用加-a参数了
p_w_picpath
下面我们重新启动服务器,开始测试
p_w_picpath
开始测试
p_w_picpath
我们先使用smbtest用户
p_w_picpath
p_w_picpath
三个目录都可以看见,smbtest是用户的家目录,这个是自己私有的空间
大家测试下可以进入jishubu和exchange,然后分别往这两个目录写入文件
p_w_picpath
p_w_picpath
测试成功,下面换test1用户,看能不能在技术部写入文件
删除刚才的用户登陆缓存
p_w_picpath
然后使用test1登陆
p_w_picpath
p_w_picpath
jishubu目录可以写入
p_w_picpath
然后我们去删除smbtest用户的文件试试
p_w_picpath
测试成功
p_w_picpath
用户写入的文件权限是744
################Michael分割线###################
我们再讲两个小的应用
1、控制用户写入的文件权限为750,也就只有用户自己可以RWX,用户的所有组可以读
2、使用虚拟用户名,提高samba服务器的安全性 
分析第一个问题,大家觉得怎么实现?
第一个问题使用
directory mask = 750
create mask = 750 
set GID
组合就可以实现
第二个问题就是刚才你们看见的username map = /etc/samba/smbuser 参数
我们来实现
p_w_picpath
提示一下:
directory mask 和directory mode 功能都一样,当然 create 也是 
directory mask 是控制用户创建的目录权限
create mask 是控制用户创建的文件权限 
这个参数只在用户是图形界面有效
刚才是1777 现在是3777 添加一个set gid
p_w_picpath
重启下服务
p_w_picpath
好了,我们测试下
p_w_picpath
发现了吗,这个文件的权限和刚才的不一样了,完全是按照我们要求来的
p_w_picpath
这样就只有自己和所有组可以读取了,其他用户没有任何权限
建立目录也一样
p_w_picpath
p_w_picpath
我们测试完成第二个功能
加入这样一行参数username map =  ,然后保存退出
p_w_picpath
vim /etc/samba/smbusers 
p_w_picpath
左边是真正的用户名字,右边是虚拟的名字,你想怎么写,就怎么写,最好是系统里面没有的用户名字
p_w_picpath
好了,测试
密码是对应ID的密码
p_w_picpath
p_w_picpath
####################Michael分割线#######################