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登录系统的密码)

跨平台文件共享服务器之samba_第1张图片


登录成功,可以看到hadoop的家目录及共享资源目录

跨平台文件共享服务器之samba_第2张图片


在共享资源My share中创建hadoop.txt验证samba用户hadoop对其有写入权限

跨平台文件共享服务器之samba_第3张图片

至此,samba用户hadoop已对共享资源My share有读写权限。

然而,如何让每个成员也有点专属自己的私有空间呢?

亲,其实用户自己的家目录就是专属自己私人空间,并且在自己家目录下,用户有完全控制权限,其他普通用户则无权访问

,自然samba用户也就有了自己专属自己的私人空间了。

(2)samba用户centos的测试方法同上,务必记得,登录samba的密码是执行smbpasswd时设定的密码,

而非登录系统的密码

(3)负责调度工作的user01来查看进度,以samba用户user01的身份登录

跨平台文件共享服务器之samba_第4张图片


负责调度工作的user01登录后,试图删除某个觉得无用的文件,被提示无权操作

跨平台文件共享服务器之samba_第5张图片


调度员user01无权在属于两个研发团队的共享目录中创建目录

跨平台文件共享服务器之samba_第6张图片


调度员在自己的家目录下有完全控制权限,如创建文件等

跨平台文件共享服务器之samba_第7张图片

调度员user01可以查看My share中文件的内容,但是不能删除这些文件

跨平台文件共享服务器之samba_第8张图片

wKiom1MxkUnwC96IAAA6BmnnG4w046.jpg

至此,我们的目的已达到了


下面我们将演示如何通过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)