#=====================需求========================
建立cover组,成员有cover01, cover02
建立team组,成员有team 01, team02
建立user组,成员有user01, user02
共享目录cover,隐含共享,只有cover组成员可读写,其他人无法访问
共享目录team,team组用户可读写, cover组  成员可读,user01可读
共享目录user , user组可读写, cover可读
共享目录public, cover, team, user组均可读写,但不能删除别人的文件
 
#====================实现步骤=======================
#建立cover组,成员有cover01, cover02
groupadd cover
useradd -g cover cover01
echo abc/123 | passwd --stdin cover01
useradd -g cover cover02
echo abc/123 | passwd --stdin cover02
#建立team组,成员有team 01, team02
groupadd team
useradd -g team team01
echo abc/123 | passwd --stdin team01
useradd -g team team02
echo abc/123 | passwd --stdin team02
#建立user组,成员有user01, user02
groupadd user
useradd -g user user01
echo abc/123 | passwd --stdin user01
useradd -g user user02
echo abc/123 | passwd --stdin user02
#建立共享文件夹
mkdir -p /share/cover /share/public /share/team /share/user
chmod -R 777 /share   ####试用了666,会出现tree connect failed host deny错误,需要注意,该错误可能由权限问题导致
#编辑smb.conf的全局配置
vim /etc/samba/smb.conf
#########################
[global]
##工作组
workgroup = WORKGROUP
##samba信息
server string = Samba Server Version %v
##验证机制
sevurity = user
##用户密码保存方式
passdb backend = tdbsam
#配置共享目录cover的访问规则
[cover]
##共享目录描述
comment = cover
##共享目录路径
path = /share/cover
##隐藏共享目录
browseable = no
##不允许匿名访问
public = no
##配置允许访问共享目录的用户(组)
valid users = @cover
##配置可写用户(组)如果使用此配置,该组即具有访问共享目录的权限,则可以省略valid users
write list = @cover
#配置共享目录team的访问规则
[team]
comment = team
path = /share/team
public = no
valid users = @team @cover user01
write list = @team
#配置共享目录user的访问规则
[user]
comment = user
path = /share/user
public = no
read list = @user
write list = @cover
###通过write list列表配置的用户可以get共享目录的数据!
###只读需要使用权限配合
chown user01:user /share/user/
chmod 773 /share/user
#配置共享目录pubilc的访问规则
[public]
comment = public
path = /share/user
public = no
writable = yes
valid users = @cover @team @user
##配置用户新建文件(夹)的默认权限,保证用户的文件只有自己能够读写,而其他人只具有读取的权限
creat mask=0644
directory mask=0755        
#为用户配置smb密码
smbpasswd -a username
#重启smb服务
/etc/init.d/smb restart
#停用iptables
service iptables stop
#停用selinux
vim /etc/selinux/config
###############################
SELINUX=disabled
####暂时停用selinux(无需重启)
setenforce 0 
#测试smb服务
smbclient -L 192.168.18.139 -U username
smbclient //192.168.18.139/sharedir -U username
 
##问题:如何使隐藏文件夹cover能够只对其他用户组隐藏,而cover组成员登录时能够显示该文件夹
##===========实现流程===================
#在全局配置中添加下面代码使用户组在登录的时候能够读取不同的配置信息
##include参数表示用户组在登录时,同时读取smb.conf以及smb.conf.groupname中的信息。
##如果使用config file参数,则用户在登录时,如果其smb.conf.groupname文件存在,则只读取该配置文件中的信息。
##config file =  /etc/samba/smb.conf.%U
include = /etc/samba/smb.conf.%G
##如果是用户单独配置,则在全局配置中添加下列代码
##config file =  /etc/samba/smb.conf.%U
include = /etc/samba/smb.conf.%U
#注释/etc/samba/smb.conf配置文件中关于[cover]的配置
#配置用户的独立配置文件/etc/samba/smb.conf.gruopname(username)
vim /etc/samba/smb.conf.cover
#=================================
[cover]
comment = cover
path = /share/cover
public = no
write list = @cover
#重启samba服务
service samba restart
#测试配置