1.samba简介
samba是一个开源并且免费的软件,它主要基于SMB和CIFS和其他主机进行通信,可实现跨平台共享数据、共享打印机等功能。
2.samba常见应用
samba最初发展的主要目的就是用来沟通Windows和Unix Like这两个不同的操作系统平台,那么它都有哪些功能呢?
主要功能:
(1)共享文件和打印机服务
(2)可通过基于samba用户的身份验证,进而访问有相应权限的目录
3.环境准备
(1)操作环境 Vmware Workstation 8.0 (2)系统 [root@localhost ~]# lsb_release -d Description: CentOS release 6.4 (Final) (3)平台 [root@localhost ~]# uname -m x86_64 (4)内核 [root@localhost ~]# uname -r 2.6.32-358.el6.x86_64
4.配置yum源以安置安装samba(也可使用光盘中的rpm包进行安装)
(1)配置yum网络源 wget http://mirrors.163.com/.help/CentOS-Base-163.repo (2)安置samba相关软件包 yum -y install samba*
5.目标概述
应用场景:hadoop和centeos分属两个公司的研发部门,使用的操作系统类型有unix like和windows,在合作期间需要共享一些数据(彼此都可删除修改这些文件);另外每个成员也要有专属自己的私密数据;负责调度工作的user01可以随时查看项目的进展情况。
实施方案:
步骤(1):决定通过samba服务器实现 步骤(2):添加samba用户hadoop和centos,并让两者对资源共享目录/samba/share有读写权限, 而让samba用户user01对/samba/share只能有读取的权限
7.创建用户hadoop,centos和user01,并将它们的密码都设为redhat
for i in hadoop centos user01; do useradd $i;echo "redhat"|passwd --stdin "$i";done
8.将hadoop,centos添加到mygroup组,并开放hadoop和centos对/samba/share目录的读写权限
创建组 groupadd mygroup 添加用户到组 gpasswd -M hadoop,centos mygroup 创建资源共享路径 [root@localhost ~]# mkdir /samba/share -pv mkdir: created directory `/samba' mkdir: created directory `/samba/share' 设置setfacl权限,使mygroup组对/samba/share有读写权限 setfacl -m g:mygroup:rwx /samba/share 验证/samba/share目录此时的权限设置情况 [root@localhost samba]# getfacl /samba/share/ getfacl: Removing leading '/' from absolute path names # file: samba/share/ # owner: root # group: root user::rwx user:hadoop:rwx user:centos:rwx group::r-x mask::rwx other::r-x
9.添加samba用户hadoop,centos和user01,并分别为之设置密码
[root@localhost ~]# smbpasswd -a hadoop New SMB password: Retype new SMB password: Added user hadoop. [root@localhost samba]# smbpasswd -a centos New SMB password: Retype new SMB password: Added user centos. [root@localhost samba]# smbpasswd -a user01 New SMB password: Retype new SMB password: Added user user01.
温馨提示:
首先,要创建samba用户,必须事先创建名称与之对应的系统用户; 其次,samba用户的密码是独立的,不能和与之对应的系统用户的密码相同(也可说,samba用户的密码非为/etc/shadow中的密码),否则太不安全了; 明白这些,然后,我们可以使用smbpasswd为系统用户设定访问samba的密码;
10.修改samba主配置文件,设置相关共享信息
切换至samba主目录 cd /etc/samba # 在修改之前先对原文件进行备份(这样的好处就是,即便我们把该原文件的副本弄得一团糟,也没啥关系,用原文件覆盖一下就好了) mv smb.conf{,.bak} # 修改samba配置文件(这里只显示改动过的内容,其他的都是默认选项) vim samba.conf # [global] 标志着全局字段定义的开始 [global] # windows默认的工作组是WORKGROUP,这样,我们就不用修改数量颇多的windows工作组名了,方便 workgroup = WORKGROUP # 设置白名单,即允许来自哪些网段的主机可以访问samba上的资源 hosts allow = 127. 172.16.251.0/16 # 自定义要共享的资源及相关权限设置 # [My share]是共享资源的名称,标志着自定义共享资源的开始 [My share] comment = shared file # 关于该共享资源的备注信息 path = /samba/share # 指定共享资源的路径 write list = @mygroup #权限设置,允许哪些用户(或组)对这个要共享的资源,具有写入权限
温馨提示1:
(1)write list = @mygroup等价于write list = hadoop,centos (2)@mygroup也可成+mygroup (3)write list = hadoop,centos 多个不同用户之间以逗号隔开
温馨提示2:
samba用户对共享资源的访问及修改权限,来自于两个方面 (1)samba主配置文件中对共享资源设置的权限 (2)samba用户对本地文件系统中目录的权限 这两点缺一不可。
11.重启smb和nmb服务,使之前的修改操作生效
法1: [root@localhost ~]# /etc/init.d/smb restart [root@localhost ~]# /etc/init.d/nmb restart 法2: [root@localhost ~]# for i in {s,n}mb; do service $i restart;done
温馨提示:samba在centos5和6上有区别,在centos5上,执行/etc/init.d/smb restart即可重启samba各程序,而在centos5上smb和nmb,两个都要启动
验证相关端口是否已存在
[root@localhost ~]# ss -tnlu|egrep "\b13[789]\b|\b445\b" udp UNCONN 0 0 172.16.255.255:137 *:* udp UNCONN 0 0 172.16.251.224:137 *:* udp UNCONN 0 0 *:137 *:* udp UNCONN 0 0 172.16.255.255:138 *:* udp UNCONN 0 0 172.16.251.224:138 *:* udp UNCONN 0 0 *:138 *:* tcp LISTEN 0 50 *:139 *:* tcp LISTEN 0 50 :::139 :::* tcp LISTEN 0 50 *:445 *:* tcp LISTEN 0 50 :::445 :::*
12.测试
使用宿主机(windows 7)的网上邻居访问测试
在网上邻居输入samba的IP(172.16.251.224),并回车;
使用网上邻居或UNC路径都会缓存历史记录,可先在宿主机的"运行"框输入cmd,然后执行net use * /del /y命令清除最近的历史缓存
(1)以samba用户hadoop的身份登录(密码是samba用户hadoop的密码,而非系统用户hadoop登录系统的密码)
登录成功,可以看到hadoop的家目录及共享资源目录
在共享资源My share中创建hadoop.txt验证samba用户hadoop对其有写入权限
至此,samba用户hadoop已对共享资源My share有读写权限。
然而,如何让每个成员也有点专属自己的私有空间呢?
亲,其实用户自己的家目录就是专属自己私人空间,并且在自己家目录下,用户有完全控制权限,其他普通用户则无权访问
,自然samba用户也就有了自己专属自己的私人空间了。
(2)samba用户centos的测试方法同上,务必记得,登录samba的密码是执行smbpasswd时设定的密码,
而非登录系统的密码
(3)负责调度工作的user01来查看进度,以samba用户user01的身份登录
负责调度工作的user01登录后,试图删除某个觉得无用的文件,被提示无权操作
调度员user01无权在属于两个研发团队的共享目录中创建目录
调度员在自己的家目录下有完全控制权限,如创建文件等
调度员user01可以查看My share中文件的内容,但是不能删除这些文件
至此,我们的目的已达到了
下面我们将演示如何通过Linux命令行,访问共享资源
法1:客户端以hadoop的身份挂载共享资源到本地/mnt目录下 [root@station25 ~]# mount -o username=hadoop //172.16.251.224/"My share" /mnt/ Password: #输入samba用户的密码 验证挂载是否成功 [root@station25 ~]# df -hP|grep "/mnt" //172 .16.251.224/My share 20G 400M 19G 3% /mnt 法2:以交互式方式,访问共享资源 [root@localhost ~]# smbclient //172.16.251.224/'My share' -U hadoop Enter hadoop's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6] smb: \> ls . D 0 Tue Mar 25 20:51:18 2014 .. D 0 Mon Mar 24 22:54:52 2014 pub.txt 20 Tue Mar 25 20:51:18 2014 issue A 103 Tue Mar 25 00:11:32 2014 adaas D 0 Tue Mar 25 14:17:50 2014 samba D 0 Tue Mar 25 00:33:22 2014 40317 blocks of size 524288. 37462 blocks available
相关知识讲解:
smbpasswd命令选项 -h 显示smbpasswd命令帮助信息 -a 添加指定samba用户 -d 禁用指定samba用户 -e 启用指定samba用户 -x 删除指定samba用户 不指定任何选项用户修改samba用户密码 samba主配置文件/etc/samba/smb.conf samba用户数据库文件 /etc/samba/smbpasswd samba用户名称映射文件 /etc/samba/smbusers smbd:为客户机提供共享资源的访问 smbd服务程序监听tcp协议的139端口(SMB)、445端口(CIFS); nmbd:提供基于netbios主机名称的解析,为windows网络中的主机进行名称解析 nmbd:监听UDP协议端的137~138端口(NetBIOS)