前面说到了FTP和NFS,由于FTP是客户端和服务器基于ftp应用协议进行交换数据的,它不支持挂载共享目录的方式,而NFS又不支持跨平台,所以就催生了第三种网络共享服务:samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
至于SMB为什么最后叫Samba,当时的大学生 Tridgwell去申请 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。
samba监听的端口:
137/udp,138/udp,139/tcp,445/tcp
samba在linux上实现三种服务: 默认启用前两个服务
nmbd: 实现netbios协议
smbd: 实现cifs协议
winbindd: 实现让samba工作后能够将linux加入到ad域(活动目录中)
Note: CIFS: Common Internet File System,Windows各主机之间共享文件系统的协议,类似于linux上的nfs NetBIOS: Windows基于主机名实现互相通信的机制;只截取15个字符的主机名
一、CentOS6为客户端,Windows为服务端
1.服务器端操作
创建共享目录 新建文件夹test 点选工具 --> 文件夹选项 --> 查看 --> 取消使用简单文件共享 --> 应用 --> 确定
右键test文件夹 --> 共享和安全 --> 选中共享此文件夹(可以修改共享文件名,比如这里设为tools,下面会用到) --> 权限 --> 添加 --> 选中test用户 --> 确定 --> text的权限可以勾上读取和更改 --> 确定
windows添加用户:右键我的电脑 --> 管理 --> 本地用户和组 --> 用户 --> 右键空白区域新增用户(比如test用户)
2. 客户端操作
安装samba客户端
yum list samba-client* //查看samba相关安装包,默认已安装客户端samba-client
3. 客户端访问服务器端数据
3.1. 交互式数据访问:
客户端以test用户连接服务器
samblient -L HOST -U USERNAME
# smbclient -L 192.168.1.301 -U test //192.168.1.301为windows服务器ip, test为登录用户名
获取到共享信息后,连接共享文件夹
smbclient //SERVER/shared_name -U USERNAME //UNC路径: \SERVERshared_name
# smbclient //192.168.1.301/tools -U test
连上后打开一个类似于ftp的客户端工具
smb:>
测试上传数据到服务器
smb:> lcd /etc smb:> put fstab
3.2. 基于挂载的方式访问
挂载到/mnt目录下
mount -t cifs //SERVER/shared_name /mount_point -o username=USERNAME,password=PASSWORD
# mount -t cifs //192.168.1.301/tools /mnt -o username=test
访问数据
ls -l /mnt //windows上的文件默认都有执行权限
二、以CentOS6为服务端,windows作为客户端
1.服务端操作:
安装samba
CentOS 6默认已经安装好了samba的客户端程序,这里要做服务端,所以安装samba服务端程序:samba.x86_64
# yum -y install samba
samba相关文件组成:
服务脚本:
/etc/rc.d/init.d/nmb /etc/rc.d/init.d/smb
主配置文件:
/etc/samba/smb.conf
samba用户:
账号:都是系统用户,/etc/passwd
密码:samba服务自有密码文件
将系统用户添加为samba用户的命令:
smbpasswd:
-a Sys_User:添加系统用户为samba用户
-d Sys_User: 禁用指定用户账号
-e Sys_User: 启用指定用户账号
-x Sys_User: 删除指定用户账号
修改工作组
# cd /etc/samba
# vim smb.conf
修改workgroup = WORKGROUP //windows工作组默认为workgroup,CentOS工作组默认为MYGROUP
添加系统账号
# useradd smbuser1 //添加系统账号 # smbpasswd -a smbuser1 //将smbuser1密码添加到smbuser1账号中
测试
客户端windows系统连接服务器:
\192.168.1.104 输入用户名和密码 登录到用户的家目录
三、多个用户账号登录同一个共享目录
1.服务器端操作:
编辑samba配置文件: /etc/samba/smb.conf
# vim /etc/samba/smb.conf
最后一行添加自定义共享:
[shared_name] path = /path/to/share_directory //共享文件路径 comment = Comment String //注释信息 guest ok = {yes|no} //是否允许来宾账号访问 public = {yes|no} //是否允许公开 writable = {yes|no} //是否可写 read only = {yes|no} //是否只读 write list = +GROUP NAME //哪些组中用户可写
比如:
[shared] comment = My Shared Testing. path = /shared/samba guest ok = yes writable = yes
测试语法:
# testparm
创建共享目录:
# mkdir /shared/samba
# ls -ld /shared/samba //smbuser1没有写权限
# setfacl -m u:smbuser1:rwx /shared/samba //设置smbuser1用户能读能写能执行
重启服务:
# service nmb restart;service smb restart;
2. 客户端操作
安装samba客户端:
# yum -y install samba-client
连接服务器:
# smbclient //192.168.1.104/shared -U smbuser1 //注意:客户端访问的是配置段定义的名字shared,而不是创建的目录
3. 测试
客户端连接完服务器后,打开一个类似ftp的客户端:
smb:> lcd /etc
smb:> put fstab //成功上传
四、samba图形化工具: samba-swat
安装samba-swat
# yum install samba-swat -y
工具介绍:
这个工具是基于web服务提供图形界面,它自己提供了web服务器,以超级守护进程xinetd代为管理,在/etc/xinetd.d目录下有个文件swat
打开swat文件
# vim swat
# default: off # description: SWAT is the Samba Web Admin Tool. Use swat # to configure your Samba server. To use SWAT, # connect to port 901 with your favorite web browser. service swat { port = 901 socket_type = stream wait = no only_from = 127.0.0.1 //这里改为192.168.1.0/24 user = root server = /usr/sbin/swat log_on_failure += USERID disable = yes //改为 no }
重启xinetd服务
# service xinetd restart
测试:
浏览器输入: 192.168.1.104:901
练习:建立samba共享,共享目录为/data,要求:
(1)共享名为shared,工作组为alen
(2) 添加组为develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组,密码均为用户名
(3) 添加samba用户gentoo,centos和ubuntu,密码均为”alen“
(4) 此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问
(5) 此samba共享服务仅允许来自192.168.1.0/24网络的主机访问
服务端安装samba服务: # yum install samba
# cd /etc/samba
# vim smb.conf
修改工作组: workgroup = alen
hosts allow = 192.168.1.0/24
添加组及用户:
# groupadd develop
# useradd ubuntu
# useradd -G develop gentoo
# useradd -G develop centos
# echo "gentoo" | passwd --stdin gentoo
# echo "centos" | passwd --stdin centos
# echo "ubuntu" | passwd --atdin ubuntu
添加系统用户为samba用户:
# smbpasswd -a gentoo; 密码为alen
# smbpasswd -a centos; 密码为alen
# smbpasswd -a ubuntu; 密码为alen
添加共享配置段:
[shared]
comment = shared file
path = /data
guest ok = yes
write list = +develop
测试语法:
# testparm
develop组对共享目录添加写权限:
# mkdir /data
# setfacl -m g:develop:rwx /data
客户端访问:
# smbclient //192.168.1.103/shared -U centos