SAMBA服务搭建
一、简介
1、认识
Samba 是一套使用SMB(Server Message Block)协议的应用程序, 通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为可能。Samba采用C/S模式, 其工作机制是让NetBIOS( Windows 网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上,并且用NetBEUI协议让Windows在“网上邻居”中能浏览Linux服务器。
2、作用
用来沟通Windows与Unix这两种不同的作业平台;共享档案与打印机服务;提供身份认证;提供Windows网络上的主机名称解析(NetBIOS name)
3、两个进程
smbd:控制发布共享目录与权限;建立在NetBIOS 协议之上的应用协议,是基于TCP139/445 两个端口的服务
nmbd:主要用于名称解析;基于 UDP137/138 两个端口的服务
4、五种安全级别
share: 不需要samba账户就可登陆samba服务器
user: 需要添加samba账户才可以登陆samba服务器
server: 由另外一台samba服务器来对用户进行身份验证
domain:把samba服务器加入到NT域,由NT的域控制器来进行身份验证
ADS: Active Directory Service,活动目录服务,它是samba3.0中新增的身份验证方式。采用ADS验证方式,samba服务器集成到活动目录中
二、部署samba服务
1、环境准备
# service iptables stop
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
2、安装服务
# yum install samba samba-common -y
# useradd -s /sbin/nologin george --创建samba服务登录用户
# smbpasswd -a george --将用户 george 设置为smb用户,并增加密码;修改密码时不用加 -a 参数,george必须是系统已经拥有的用户
# smbpasswd -x u1 --删除用户
# smbpasswd -d u1 --禁用用户
# smbpasswd -e u1 --启用用户
# pdbedit -L --列出所有用户
# pdbedit -Lv --列出所有用户的详细信息
# pdbedit -Lv george --列出用户 george 的详细信息
3、配置服务
# vim /etc/samba/smb.conf
[global] --这段是全局配置,是必段写的
workgroup = MYGROUP --工作组,取个名
server string = Samba Server Version %v --Samba服务器说明,可自定义
log file = /var/log/samba/log.%m
max log size = 50
security = user --运行的安全级别,还有 share 验证方式
passdb backend = tdbsam --帐号密码以数据文件的形式存放
load printers = yes
cups options = raw
[homes] --用户家目录通用的共享,每个用户都可以完全访问自己的家目录
comment = Home Directories --共享资源说明
browseable = no --是否可以被浏览
writable = yes --可写
[printers] --跟打印机相关的选项
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no --匿名用户是否可以登录
writable = no
printable = yes
[linuxdir] --自定义共享的目录;
path = --设置共享目录;dir
writeable = yes --是否可写,这里我设置为可写;yes/no
browseable = --是否可以浏览;yes/no
guest ok = --匿名用户以是否可登录;yes/no
# service smb restart --重启服务
4、客户端验证
4.1、使用 samba 客户端访问
# smbclient -L //192.168.133.3 --匿名用户查看 samba 服务器的共享
# smbclient -L //192.168.133.3 -U george --服务器上的 samba 用户查看共享
# smbclient //192.168.133.3/sambadir --匿名用户登录
# smbclient -U george //192.168.133.3/george -- samba 用户登录
smb: \> --这个标志就是代表登录 samba 服务器成功
smb: \> help --查看可使用的命令
smb: /> lcd /client_dir --更改客户端当前目录
4.2、使用 命令挂载 访问
# yum install cifs-utils -y
# mount [-t cifs] -o username=george,password=123456 //192.168.133.3/george /mnt --用户 george 登录
# mount [-t cifs] -o guest //192.168.133.3/george /mnt --匿名用户登录,但其实这个不能连接到george,因为 //192.168.133.3/george 后的这个george 不是配置文件里的标签名。
4.3、自动挂载
4.3.1、autofs自动挂载
# vim /etc/auto.master
/smbmount /etc/auto.smbmount
# vim /etc/auto.smbmount
upload -fstype=cifs,username=george,password=123456 //192.168.133.3/upload --将标签为 upload 的类容挂载到 /smbmount/upload 上
# vim /etc/sysconfig/autofs
TIMEOUT=10 --如果过了设定的时间(这里是10秒),就自动卸载
BROWSE_MODE="yes" --就算没有挂载,也显示挂载点;必须加上这一条。
# service autofs restart
4.3.2、fstab开机自动挂载
# vim /etc/fstab
//192.168.133.3/upload /smbmount/upload nfs defaults,credentials=/root/smb.passwd 0 0
# vim /root/smb.passwd
username=george
password=123456
二、配置实例
2.1、常规配置:
# vim /etc/samba/smb.conf
[guodaye] --共享名字
comment = For all Anonymous users
path = /samba/share --把哪个目录共享出去
browseable = yes --共享任何人可见
writable = yes --指定该共享路径是否可写,默认不可写
[upload]
comment = Upload
path = /samba/upload
guest ok = no
browseable = yes
writeable = yes
valid users = u1,u2,+g1 --允许访问的用户和组
write list = u1 --允许写的用户
read list = u2,+g1 --只读的用户
create mode = 0344 --控制新建的文件的权限
force create mode = 0344 --控制新建的文件的权限
directory mode = 077 --控制新建的目录的权限
force directory mode = 0777 --控制新建的目录的权限
hosts deny = all --禁止访问的客户端
hosts allow = 10.1.1.0/24 except 10.1.1.15/32 --允许访问的客户端
#mkdir -p /samba/share
#chmod 1777 -R /samba/share --禁止匿名用户删除不属于自己的文件
注意:
create mode:与参与计算的权限进行 AND (位与)操作,也就是说,只有列在这个参数中的位才会保留;force create mode:与参与计算的权限进行 OR (位或)操作,也就是说,只要列在这个参数中的位都会保留;先应用(create mode),再应用(force create mode),这样的话,如果需要准确指定新建的文件的权限,则可以把这两个参数设置成相同的值。新建的目录的权限与此类似,也受两组参数的影响,分别是directory mode, force directory mode, 其特点与新建文件相同。
write list & read list:这两个参数用来指定用户可以写,用户只能读。值得注意的是,如果一个用户同时出现在这两个列表中,那么该用户也具有写的权限(和man文档中描述的不一致)
writeable (!read only):这个参数用来控制共享的目录是否可写。值得注意的是,就算writeable=no,但是write list参数包含了某个用户,那么该用户仍然可以写
hosts deny& hosts allow 参数,如果两者之间有冲突,则hosts allow 中的规则生效