Samba服务器和FTP服务器都是资源共享的两种文件服务器,但Samba服务器通常用于局域网共享,而FTP服务器则用与internet中,
Samba在linux/unix系统中实现了SMB/CIFS网络协议,使的跨平台文件共享变的更加方便,适用Samba可以很好的解决不同系统之间的文件互访问题。
samba的工作原理:
步骤1协议协商:
客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应。
--------negprot请求------->
客户端 服务器
--------negprot响应------->
步骤2.建立连接
当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用。
--------session setup &X请求------->
客户端 服务器
--------session setup &X响应------->
步骤3.访问共享资源
客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源哈。
--------tree connect &X请求------->
客户端 服务器
--------tree connect &X响应------->
步骤4.断开连接
共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接。
--------tree disconnect请求------->
客户端 服务器
--------tree disconnect响应------->
下面我就来搭建下Samba文件服务器:(在这里我忽略了防火墙,特简单就是把udp137-138端口,tcp139端口和445端口开放就可以)
(一)挂载光盘并安装Samba包:
[root@localhost Server]# mount /dev/cdrom /mnt/
安装下面四个包: rpm -ivh samba-*
samba-3.0.28-0.el5.8.i386.rpm(samba服务器端包)
samba-common-3.0.28-0.el5.8.i386.rpm(samba C/S都需要适用的公共文件)
samba-client-3.0.28-0.el5.8.i386.rpm(samba客户端包)
samba-swat-3.0.28-0.el5.8.i386.rpm(web方式管理工具包)
samba主配置文件分析:vim /etc/samba/smb.conf
# SELINUX NOTES:(selinux选项,特别要注意也是不可访问原因之一)
#
# If you want to use the useradd/groupadd family of binaries please run:
# setsebool -P samba_domain_controller on
#
# If you want to share home directories via samba please run:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory you want to share you should mark it as
# "samba-share_t" so that selinux will let you write into it.
# Make sure not to do that on system directories as they may already have
# been marked with othe SELinux labels.
#
# Use ls -ldZ /path to see which context a directory has
#
# Set labels only on directories you created!
# To set a label use the following: chcon -t samba_share_t /path
[global] //全局设置对整个samba服务器生效
workgroup = MYGROUP //samba所在的 工作组或者是域
server string = Samba Server Version %v //服务器描述
; hosts allow = 127. 192.168.12. 192.168.13.
我把这注释行也拿出来因为我觉得这行非常重要,“hosts allow”可以设置仅允许访问共享的客户机(ip地址、网络地址的形式,多个地址之间用空格或者是逗号隔开),“hosts deny”可以设置仅拒绝访问共享的的客户端。例如仅允许192.168.168.0/24、173.17.0.0/16网段客户段访问可以设置成:hosts allow =192.168.168. 173.17. 0.
security = user //设置服务器的安全模式其共有五种
这五种模式是:
1. share安全级别模式:可以匿名访问
2. user安全级别模式:需要提交合法的用户名和密码
3. server安全级别模式:提交到指定的一台samba服务器上进行验证,如出错客户端就会一user级别访问,
4.domain安全级别模式:验证工作服将由windows域控制器负责
5. ads安全级别模式:当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。
passdb backend = tdbsam
[homes]用户目录共享设置
comment = Home Directories(共享目录的注释和说明信息)
browseable = no(在网上邻居中是否可见,如是no则是隐藏共享)
writable = yes(是否可写,read only相反)
; valid users = %S(设置访问用户,@组名)
; valid users = MYDOMAIN\%S
[printers]
comment = All Printers //共享目录的注释和说明信息
path = /var/spool/samba //共享目录在服务器中的路径
browseable = no //在网上邻居中是否可见,如是no则是隐藏共享
guest ok = no //是否可以匿名访问
writable = no //是否可写
printable = yes //每一个打印服务必须定义为 printable = yes
案例一:将“/var/public/movies"目录发布为共享文件夹,共享名为movie(其实就是匿名访问)
1.建立配置文件如下:
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
# logs split per machine
# max 50KB per log file, then rotate
security = share //将安全级别设置为share
passdb backend = tdbsam
# the login script name depends on the machine name
# the login script name depends on the unix user used
# disables profiles support by specifing an empty path
load printers = yes
cups options = raw
#obtain list of printers automatically on SystemV
[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
[movie]
comment = this is a share file
path = /var/public/movies
browseable = yes
guest ok = yes
writable = yes
2.建立共享目录:[root@ns1 samba]# mkdir -p /var/public/movies
为了便于测试我们在目录中建立多个文件mkdir /var/public/movies/{aa,bb,cc}.file //我们在此建立了aa,bb,cc文件
3.检查配置文件格式是否正确:
[root@ns1 samba]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
说明配置没有错误!!!
启动samba服务:
[root@ns1 samba]# service smb restart
4因为selinux为强制,所以设置如下:
修改共享文件夹selinux上下文: chcon -t samba_share_t /var/public/movies/
5.在windowns下测试匿名效果:
我们刚才不是在配置文件中设置writable = yes了吗?我们测试下看我们能不能写入??
结果是不能写入!!!
原因在与网络共享权限是有写入权限了,但是本地权限中我查看了下只有执行和读取,我们加写入权限给本地目录:
[root@ns1 ~]# chmod o+w /var/public/movies/
在看看结果:
匿名验证成功了!!!
案例二:将“/var/public/movies"目录发布为共享文件夹,共享名为movie,授权只能vina、test1和root组访问,并将test1用户映射为aa、bb等用户,root用户有写入权限,通过访问建立的文件夹的默认权限是744,文件夹的默认权限为600
1.建立配置文件如下:
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
# logs split per machine
# max 50KB per log file, then rotate
security = user //设置安全级别为user
passdb backend = tdbsam
# the login script name depends on the machine name
# the login script name depends on the unix user used
# disables profiles support by specifing an empty path
load printers = yes
cups options = raw
#obtain list of printers automatically on SystemV
username map = /etc/samba/smbusers //用户名称映射时必须由此项
[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
[movie]
comment = this is a share
path = /var/public/movies
guest ok = no //相当于是public,是否可以匿名访问
read only = no
valid users = vina,test1,@root //授权用户和组
write list = root // 设置只有root用户可写
directory mask = 0744 //建立文件夹的默认权限是744
create mask = 0600 // 创建文件的默认权限是600
检查配置文件的格式是否正确:
[root@ns1 public]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
说明配置文件的格式上不存在任何问题!
2.建立samba用户数据库:
[root@ns1 public]# useradd vina
[root@ns1 public]# smbpasswd -a vina
New SMB password:
Retype new SMB password:
Added user vina.
------依次添加root等用户
smbpasswd 参数:
-h显示smbpasswd的帮助命令
-a添加指定的samba用户
-d禁用指定的samba用户
-e启用指定的用户帐号
-x删除指定的用户帐号
不加任何参数时是修改samba用户密码
3.做别名映射,将test1映射成aa,bb,cc等用户
[root@ns1 samba]# vim smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
test1 = aa bb cc
4重新启动服务:service smb restart
5验证效果:(我刚开始服务器是192.168.0.1后来我改了服务器IP地址为192.168.0.60~~)
vina登录samba服务器
我们接下来在windowns上做测试,如果先是在windowns上做的必须断开共享:
C:\Users\jia>net use file://192.168.0.60/movie /delete
\\192.168.0.60\movie 已经删除。
用root登录:
可以创建文件和文件夹,在来看看文件和文件夹的权限:
哈哈~文件夹默认权限的权限是744,文件默认权限是600,成功了!!
接下来验证名称映射:(注意别名aa和bb等不是系统中的用户)
aa登录
aa登录成功!
bb登录
bb登录成功
到此就做完了实现了案例中的描述~~