一、Samba服务介绍
Samba是一套使用SMB(Server Message Block)协议的应用程序, 由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为可能。
Samba采用C/S模式, 其工作机制是让NetBIOS( Windows 网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上,通过设置“NetBIOS over TCP/IP”让Windows在“网上邻居”中能浏览Linux服务器,还能与全世界的电脑分享资源。
Samba服务器包括两个后台应用程序: Smbd 和 Nmbd。Smbd 是Samba的核心, 主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问; Nmbd主要负责对外发布Linux Samba服务器可以提供的NetBIOS名称和浏览服务,使Windows用户可以在“网上邻居”中浏览Linux Samba服务器中共享的资源。另外Samba还包括一些管理工具, 如 smb-client, smbmount, testparm, Smbpasswd 等程序。
Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。
二、Samba服务功能
1、共享文件和打印,实现在线编辑
2、实现登录Samba用户的身份认证
3、可以进行NetBIOS名称解析
4、外围设备共享
三、Samba相关包
samba:服务器端软件,主要包含了 SAMBA 的主要 daemon档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的logrotate 设定文件及开机预设选项档案等;
samba-common:主要提供了 SAMBA 的主要设定档(smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等;
samba-client:客户端软件,提供了当 Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount等等。
samba-swat-3.5.10-125.el6.x86_64:基于https协议的samba服务器web配置界面
四、Samba服务器配置
1、配置文件
/etc/samba/smb.conf:samba的核心配置文件,该文件继承了.ini文件的格式,用【】分成不同的部分,主要由两部分构成:
Global Settings
全局设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
Share Definitions
共享设置针对的是共享目录个别的设置,只对当前的共享资源起作用。
/etc/init.d/smb:samba的启动/关闭文件。
lmhosts:对应NetBIOS Name与该主机的IP,一般Samba在启动时就能捕捉到LAN中相关计算机NetBIOS Name对应的IP,因此,这个配置文件一般不用设置。
smbpasswd:这个文件默认不存在,它是Samba预设的使用者密码对应表。
2、全局设置
【global】服务器通用或全局设置的部分
workgroup = WORKGROUP 指定 Samba Server 所要加入的工作组或者域名称。
security = user 设置用户访问Samba Server的验证方式,一共有三种验证方式。
passdb backend = tdbsam 用户后台
printing = cups 设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
printcap name = cups 设置共享打印机的配置文件。
load printers = yes/no 设置是否在启动Samba时就共享打印机。
server string = Samba Server Version %v 指定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
config file = /etc/samba/conf.d/%U 用户独立的配置文件,config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件不存在,则该项无效。
netbios name 设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup不要设置一样。
interfaces 指定服务侦听接口和IP,设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址
hosts allow 表示允许连接到Samba Server的客户端,多个参数可用“,”,空格,或tab分隔隔开。可以用一个IP表示,也可以用一个网段表示。默认允许所有主机访问,也可在每个共享独立配置,hosts deny 与hosts allow 刚好相反。
hosts deny 拒绝指定主机访问
log file=/var/log/samba/log.%m 不同客户机采用不同日志
log level=2 日志级别,默认为0,不记录日志,设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。
max log size=50 日志文件达到50K,将轮循rotate,单位KB,设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
passdb backend=tdbsam 密码数据库格式
3、特定共享设置
【homes】用户的家目录共享
comment = 任意字符串 comment是对该共享的描述,可以是任意字符串。
valid users = 允许访问该共享的用户 用来指定允许访问该共享资源的用户。
(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)
browseable = yes/no browseable用来指定该共享是否可以浏览。
read only = no 和writeable=yes等价,如与以上设置冲突,防在后面的设置生效,默认只读
【printers】定义打印机资源和服务
path = 共享目录路径 path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes] 共享域。
【sharename】自定义的共享目录配置
write list = 允许写入该共享的用户 用来指定可以在该共享下写入文件的用户。
valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
public = yes/no public用来指定该共享是否允许guest账户访问。
writable = yes/no writable用来指定该共享路径是否可写。
4、smb.conf的几个常用变量
①客户端变量
%a | 客户端的体系结构(例如Samba,NT,Win98,或者Unknown)
%I | 客户端的IP地址(例如:192.168.220.100)
%m | 客户端主机的NetBios名
%M | 客户端主机的DNS名
②用户变量
%g | 当前用户所属组
%G | %U的基本组
%H | 当前用户家目录路径
%u | 当前的unix用户名
%U | 被请求的客户端当前用户用户名(不总是被samba使用)
③共享变量
%p | 如果和%p不同,automounter的路径对应共享的根目录
%P | 当前共享的根目录
%S | 可登录的用户名
④服务器变量
%d | 当前服务器进程的ID
%h | Samba服务器的DNS主机名
%L | Samba服务器的netbios名
%N | Home目录服务器,来自automount的映射
%v | samba版本
⑤其他变量
%R | 经过协商的SMB协议
%T | 当前的日期和时间
五、管理Samba用户
包:samba-common-tools
工具:smbpasswd pdbedit
1、添加samba用户
smbpasswd -a
pdbedit -a -u
注:添加samba用户前,系统用户必须先存在,建议使用/sbin/nologin。
2、修改用户密码
smbpasswd
3、删除用户和密码
smbpasswd -x
pdbedit -x -u
4、查看samba用户列表
/var/lib/samba/private/passdb.tdb
pdbedit -L
5、查看samba服务器状态
smbstatus
六、实验
实验1、客户端挂载实现smb共享
1、创建系统用户和samba用户
2、创建samba共享目录,并设置selinux
3、samba服务器设置
4、samba客户端挂载smb
安装包
挂载smb共享
5、使用wukong用户客户端访问
实验2、多用户挂载
samba共享默认只支持同时用一个用户挂载smb共享
centos 7可启用多用户挂载功能
客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限
1、创建用户
2、samba服务器设置
mkdir /app/xiyouji
chmod 755 /app/xiyouji
vim /etc/samba/smb.conf
3、samba客户端开机自动挂载smb
4、测试
注:有一些重复的命令,就不一一赘述。
实验3、创建baisuzhen,xuxian,fahai,xiaoqing,xushilin,guanyin 六个用户
1.要求以上六个用户都可以浏览并访问目标主机的共享目录leifengta,匿名用户可访问但不可浏览。大小2GB。未来可自动扩展
2.baisuzhen,xuxian,xushilin 可以在该共享目录下创建及删除文件,且彼此之间创建的文件,可以相互修改,其他用户不可创建文件。
3.xuxian,xushilin最多能各自创建200M的数据,且不能删除其他人创建的文件,baisuzhen不受限制.
4.六个用户各自都 有一个以自己名字为名的共享目录,仅自己可见可访问可创建,他人不可见,guanyin对所有目录均有完整权限。
创建六个用户baisuzhen,xuxian,fahai,xiaoqing,xushilin,guanyin,并设置各个用户密码
for username in baisuzhen xuxian fahai xiaoqing xushilin guanyin ;do useradd -s /sbin/nologin $username ; (echo redhat;echo redhat) |smbpasswd -a $username ;done
2、创建共享目录,设置逻辑卷
mkdir /app/baishezhuan
fdisk /dev/sda
同步以上设置的新分区
partprobe /dev/sda
pvcreate /dev/sda4
vgcreate vgbaishe /dev/sda4
lvcreate -l +100%FREE -n lvbaishe vgbaishe
mkfs.ext4 /dev/vgbaishe/lvbaishe
3、设置开机后自动挂载
vim /etc/fstab
/dev/vgbaishe/lvbaishe /app/baishezhuan ext4 defaults,usrquota 0 0
mount -a
4、配置samba文件
vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = userpassdb
backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
config file = /etc/samba/conf.d/%U.conf
[leifengta]
comment = xi hu leifengta
path = /app/baishezhuan
public = yesbrowse
able = no
writeable = no
5、添加用户的权限和添加共享目录的权限
(1)为bausuzhen,xuxian,xushilin三用户添加完整的读写权限
setfacl -m u:baisuzhen:rwx /app/baishezhuan/
setfacl -m u:xuxian:rwx /app/baishezhuan/
setfacl -m u:xushilin:rwx /app/baishezhuan/
(2)配置baisuzhen,xuxian,xushilin属于同一个组,让彼此可以相互创建和修改
groupadd baishezhuan
usermod -aG baishezhuan baisuzhen
usermod -aG baishezhuan xuxian
usermod -aG baishezhuan xushilin
(3)设置共享目录的所属组和所属人为baisuzhen,保证baisuzhen对该目录下所有文件均有完整权限
chgrp baishezhuan /app/baishezhuan
chown baisuzhen /app/baishezhuan/
(4)设置特殊权限,保证其余所有人对共享目录baishezhuan都不可以进行操作
chmod g+s /app/baishezhuan/
chmod o+t /app/baishezhuan/
6、设置samba子配置文件
(1)创建baisuzhen用户的子配置文件,xuxian,xushilin用户跟baisuzhen用户权限完全相同
mkdir conf.d
cd conf.d/
vim baisuzhen.conf
[leifengta]
comment = xi hu leifengta
path = /app/baishezhuan
browseable = yeswrite
able = yes
force create mode = 0664
[baisuzhen]
comment = baisuzhen
path = /app/common/baisuzhen
browseable = yeswrite
able = yes
(2)创建xiaoqing用户的子配置文件,fahai用户跟xiaoqing用户权限完全相同
vim xiaoqing.conf
[leifengta]
comment = xi hu leifengta
path = /app/baishezhuan
browseable = yeswrite
able = no
[xiaoqing]
comment = xiaoqing
path = /app/common/xiaoqing
browseable = yeswrite
able = yes
(3)创建guanyin用户的子配置文件,保证guanyin对所有用户共享目录均有完整权限
vim guanyin.conf
[leifengta]
comment = xi hu leifengta
path = /app/baishezhuan
browseable = yes
writeable = no
[baisuzhen]
comment = baisuzhen
path = /app/common/baisuzhen
browseable = yes
writeable = yes
[fahai]
comment = fahai
path = /app/common/fahai
browseable = yes
writeable = yes[xiaoqing]
comment = xiaoqing
path = /app/common/xiaoqing
browseable = yeswrite
able = yes
[xushilin]
path = /app/common/xushilin
browseable = yes
writeable = yes
[xuxian]
comment = xuxian
path = /app/common/xuxian
browseable = yeswrite
able = yes
[guanyin]
comment = guanyin
path = /app/common/guanyin
browseable = yes
writeable = yes
7、开启quota,对xuxian,xushilin用户限定最多创建文件大小
vim /etc/fstab在需要开启quota的文件系统的挂载选项的defaults后加usrquota,grpquota如下:
/dev/vgbaishe/lvbaishe /app/baishezhuan ext4 defaults,usrquota,grpquota 0 0
生成quota数据库
quotacheck -cum /app/baishezhuan/
开启quota限额
quotaon /app/baishezhuan/
配置quota限额
edquota -u xuxian Filesystem blocks soft hard inodes soft hard /dev/mapper/vgbaishe-lvbaishe 4 0 200M 1 0 0
将xuxian的quota设置复制给xushilin
edquota -p xuxian xushilin
注意:对group设置quota时,应该对附加组设置,同时,目录要设置sgid权限才有意义
8、创建各自用户的共享目录,并修改共享目录所属人和设置特殊权限
mkdir baisuzhen xiaoqing fahai xuxian xushilin guanyin
chown baisuzhen baisuzhen/
chown fahai fahai/
chown guanyin guanyin/
chown xiaoqing xiaoqing/
chown xushilin xushilin/
chown xuxian xuxian/
chmod 700 *
setfacl -m u:guanyin:rwx *
9、在Windows中测试实验效果
(1)测试xuxian用户权限
(2)测试xushilin用户权限
(3)测试baisuzhen用户权限
(4)测试fahai/xiaoqing用户权限
(5)测试guanyin用户权限
(5)测试匿名用户登录