Samba  (参照笔记及网络博文总结)
软件包:
samba.i386   <---服务端
samba-client.i386 <---客户端
samba-common.i386 <---公共的软件包
samba-swat.i386 <---基于www界面配置的接口

samba可以配置独立配置文件,如在全局区(global)单独为个别账户配置文件。格式为如 config file = /etc/samba/smb.conf.%U,表示samba服务器读取该文件,%U待变当前登录帐户另外格式 include = /路径/%U.smb.conf        include = /路径/%G.smb.conf

配置文件:
/etc/samba/smb.conf
[global]
        workgroup = MYGROUP                                   ----工作组
        server string = Samba Server Version %v           ----服务器描述
        # logs split per machine
;       log file = /var/log/samba/%m.log   ------日志,默认
        # max 50KB per log file, then rotate
;       max log size = 50
        security = user                                 <--定义工作模式: share,user,server,domain,ads
        passdb backend = tdbsam               -----------启用此模式,则不会生成/etc/samba/smbpasswd文件
        load printers = yes
        cups options = raw
[homes]     ----------共享名
        comment = Home Directories            ----------资源描述
        browseable = no  
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba   -------------共享路径
        browseable = no   -----------是否可见,yes|no
        guest ok = no
        writable = no
        printable = yes
-----------------------------------------------------------------------
[XXX]     -----------共享名     
comment = XXX    -----------资源描述
path = 绝对路径    -----------共享路径
browseable = no    -----------是否可见,yes|no
public = yes    -----------是否允许匿名访问 yes|no
valid users = 用户名 | @组名   -----------设置访问用户
invalid users = 用户 | @组名
readonly = yes |no    -----------设置目录是否只读
writable = yes | no    -----------设置目录是否可写
create mask = 权限    -----------mask权限,用户帐户安全
write list = 用户名 | @组名
hosts deny = ip|域名|主机名(空格隔开)   -----------设置客户端访问限制,当deny和allow同时存在时,allow优先。
hosts allow = ip|域名 |主机名|通配符   如 hosts deny = 10.1.1.0         hosts allow = 10.1.1.24允许24主机访问

例:hosts deny = ALL
      hosts allow = 10.1.1.0 EXCEPT 10.1.1.100 10.1.1.78    表示允许10.1.1.0网段可以访问,除了78和100的ip

smbclinet命令格式:smbclient -L //目标ip地址或主机名 -U 登录用户名%密码    
smbclient命令行共享访问模式命令格式:smbclient //目标ip或者主机名/共享目录 -U 用户名%密码

例子1:工作在user,直接重启访问
# smbclient -L //10.1.1.21 -U tom
Password:
session setup failed: NT_STATUS_LOGON_FAILURE

登录失败:由于samba的帐号是独立出来,但是samba的帐号有一个前提条件,就是必须系统存在的帐号才可以成为samba帐号启用tdbsam,则在/etc/samba/目录里面没有sabpasswd文件,如果想看到smbpasswd文件,需注释掉 passwd backend = tdbsam一行,加上smb passwd file = /etc/samba/smbpasswd保存退出即可。

smb的用户映射。安全选项
可以在smb.conf里面添加一行 username map = /路径 开启用户帐号映射,编辑该文件格式为 samba帐号 = 虚拟帐号(映射帐号)
如 root = administration admin
   nobody = guest anonymous smbguest等
然后reload,或者重启服务就可以使用映射帐号登录了

# smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.

# smbclient -L //10.1.1.21 -U tom <---------tom身份查看资源
# smbclient   //10.1.1.21/tom -U tom
# smbclient   //10.1.1.21/homes -U tom

# mount -t cifs //10.1.1.21/tom /mnt -o username=tom,password=123

例子2:
[global]
...
security = share
[soft]
        comment = This is Soft Resource
        path = /www
        browseable = no   <---列表资源的时候隐藏资源
        guest ok = yes

# smbclient -L //10.1.1.21
# smbclient //10.1.1.21/soft  

smb: \> put /etc/hosts /
NT_STATUS_ACCESS_DENIED opening remote file \/
smb: \>    <---匿名登录,默认是只读

smb: \> get index.html
getting file \index.html of size 13 as index.html (130000.0 kb/s) (average inf kb/s)

控制读写权限的参数:
read only = yes
writeable = yes | no

把匿名资源改为可写:
read only = no 或者 writeable = yes

smb: \> put /etc/hosts /hosts
putting file /etc/hosts as \/hosts (1880000.0 kb/s) (average inf kb/s)
smb: \>


练习:
1、工作模式是 user定一个需要帐号认证的资源,资源名字叫 file ,资源路径随便,权限可写,资源可见,匿名不能够访问该资源要求至少有两个帐号是可以访问该资源,使用这两个帐号分别上传文件,分别登录看看是否能够删除对方的文件,删除之前,请确定一下文件的权限,思考一下为什么会有这样的现象?
ps -ef | grep smbd 为了防止对方删除自己的文件,应该怎么设定?
1、
[global]
security = user
[file]
        comment = File Resource
        path = /share/file
        browseable = yes
        public = no
        writeable = yes
2、
# chmod 777 /share/file
两个用户上传的文件,默认的权限都是744的权限,并且文件是属于上传者的,但是只要文件的拥有者对文件有写的权限,就可以互相删除对方的文件。

为了防止对方删除自己的文件,应该怎么设定?
方法1: 让默认权限是444
create mask = 0444 <---测试表明,对方不能删除,但是自己也不能删除
方法2:粘贴位
chmod o+t /share/file
--------------------------------------------------------------
windows下更换登录用户
1.关闭打开的登录窗口 (ntsd -c q -pn explorer.exe
2.结束所有打开的网络连接 net use * /delete /y
--------------------------------------------------------------
例子3:
user模式下,实现 tom 可以上传下载,bean只能下载 ,其他用户不能该资源,拒绝匿名访问
tom --- rw
bean --- r
匿名 --- 不能访问
moto --- 不能访问

valid users
invalid users
write list

[file]
        comment = File Resource
        path = /share/file
        browseable = yes
        public = no
        valid users = tom,bean
        write list = tom
例子4
user模式下,实现 tom 上传下载,bean只能下载 ,moto 只能上传不能下载而且不能删除别人的文件,其他用户不能访问,拒绝匿名登录

tom --> tomfile   rwx,r--,--- 740 <---bean 加入到 tom组
moto --> motofile ---,---,r-- 004

1、修改用户的属性
# usermod -G tom bean
# chmod o+t /share/file

[global]
config file = /etc/samba/smb.conf.%U
.....
....

[file]
        comment = File Resource
        path = /share/file
        browseable = yes
        public = no
        valid users = tom,bean,moto
        write list = tom
        create mask = 0740

# vim /etc/samba/smb.conf.moto

[file]
        comment = This is moto configfile
        path = /share/file
        writable = yes
        create mask = 0004
[file]
        comment = File Resource
        path = /share/ftom --> tomfile   rwx,r--,--- 740 <---bean 加入到 tom组ile
        browseable = yes
        public = no
        valid users = tom,bean,moto
        write list = tom,moto
方法二:利用ACL
[file]
        comment = File Resource
        path = /share/file
        browseable = yes
        public = no
        valid users = tom,bean,moto
        write list = tom,moto
# setfacl -d -m user::rwx,user:bean:r--,user:moto:--- /share/file
<---实现 moto不能下载功能
# chmod o+t /share/file <---起到了防止乱删除的现象
例子5:访问控制
hosts deny =
hosts allow =
1、实现禁止10.1.1.0/24这个网段访问,但是10.1.1.20可以访问
        hosts deny=10.1.1.
        hosts allow=10.1.1.20 <---allow与deny冲去,allow生效
2、拒绝所有,但允许10.1.1.网段访问,但是10.1.1.20不允许访问
        hosts deny = ALL
        hosts allow = 10.1.1. EXCEPT 10.1.1.20
常见的故障:
1、tree connect failed
原因: 被拒绝访问,一般都是hosts deny实现的拒绝
  
2、文件操作的错误: NT_STATUS_ACCESS_DENIED
原因: 文件系统的权限拒绝
使用testparm命令检查配置文件
testparm /etc/samba/smb.conf
==============================================
企业实战:
企业数据目录:/companydata
公共目录:/companydata/share
销售部:/companydata/sales
技术部:/companydata/tech
企业员工情况:
总经理:gm
销售部:销售部经理 surf 、 员工 sky 、员工 jane
技术部:技术部经理michael、 员工 bill、 员工joy

配置:
[global]
workgroup = companydomain
server string = Company Samba File Server
include = /etc/samba/%U.smb.conf
include = /etc/samba/%G.smb.conf
[public]
comment = public data
path = /companydata/share
publik = yes
#vim /etc/samba/gm.smb.conf
[sales]
comment = sales data
path = /companydata/sales
writable = yes
valid users = gm
[tech]
comment = tech data
path = /companydata/tech
writable = yes
valid users = gm

#vim /etc/samba/sales.smb.conf
[sales]
comment = sales data
path = /companydata/sales
writable = yes
valid users = @sales,gm
#vim /etc/samba/tech.smb.conf
[sales]
comment = sales data
path = /companydata/tech
writable = yes
valid users = @tech,gm
重启服务或者重新载入配置文件。