samba 服务

samba服务

课程目标

  • samba服务器的应用场景及特点
  • samba服务器的搭建与配置
  • 基于用户名/密码的企业综合案例

一、samba介绍配置

  • SMB(Server Message Block)协议实现文件共享,也称CIFS(Common Internet File System)
  • 是Windows和Unix系统之间共享文件的一种协议
  • 客户端主要是Windows;支持多节点同时挂载以及并发写入
  • 主要用于Windows和Linux下的文件共享、打印共享
  • 实现匿名与本地用户文件共享

samba服务的主要进程

  • smbd进程 控制发布共享目录与权限、负责文件传输 TCP 139 455
  • nmbd进程 用于名称解析netbios UDP 137 138;基于NETBIOS协议获得计算机名称--->解析为相应IP地址,实现信息通讯。

NetBIOS是Network Basic Input/Output System的简称,一般指用于局域网通信的一套API


二、samba服务器搭建

配置文件

[root@server ~]# yum -y install samba
[root@server ~]# rpm -qa |grep ^samba
samba-winbind-3.6.9-164.el6.x86_64
samba4-libs-4.0.0-58.el6.rc4.x86_64
samba-winbind-clients-3.6.9-164.el6.x86_64
samba-3.6.9-164.el6.x86_64
samba-client-3.6.9-164.el6.x86_64
samba-common-3.6.9-164.el6.x86_64

[root@server ~]# service smb start
Starting SMB services:                                     [  OK  ]
[root@server ~]# service nmb start
Starting NMB services:                                     [  OK  ]

测试验证
[root@client ~]# which smbclient
/usr/bin/smbclient
[root@client ~]# rpm -qf /usr/bin/smbclient
samba-client-3.6.9-164.el6.x86_64
查看配置文件  
/etc/samba/smb.conf 
[global]    全局选项
        workgroup = MYGROUP     定义samba服务器所在的工作组
        server string = Samba Server Version %v     smb服务的描述
        log file = /var/log/samba/log.%m        日志文件
        max log size = 50       日志的最大大小kb
        security = user    认证模式:share匿名|user用户密码|server外部服务器用户密码
        passdb backend = tdbsam  密码格式
        load printers = yes      加载打印机
        cups options = raw       打印机选项
[homes]     局部选项(共享名称)  (默认共享本地用户家目录)
        comment = Home Directories      描述
        browseable = no     隐藏共享名称
        writable = yes      可读可写
[printers]  共享名称
        comment = All Printers      描述
        path = /var/spool/samba     本地的共享目录
        browseable = no     隐藏
        guest ok = no       ---> public = no 需要账号密码访问(匿名用户不允许访问)
        writable = no       ---> read only = yes 不可写
        printable = yes     ---> 打印选项

客户端工具如何使用?

[root@client ~]# smbclient -L //10.1.1.2    //查看samba服务器的共享名
Enter root's password: 回车       //(匿名用户查看)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (Samba Server Version 3.6.9-164.el6)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Server               Comment
    ---------            -------
    SERVER               Samba Server Version 3.6.9-164.el6

    Workgroup            Master
    ---------            -------
    MYGROUP              SERVER

在server端添加本地用户zhangsan
将zhangsan本地用户加入到smb数据库
[root@server ~]# smbpasswd -a zhangsan
New SMB password:
Retype new SMB password:
Added user zhangsan.
在客户端测试
[root@client ~]# smbclient //10.1.1.2/zhangsan -U zhangsan
Enter zhangsan's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]
smb: \> ls

需求:让匿名用户访问/samba/share共享资源,本地用户不能访问

[anon_share]
        path=/samba/share
        public = yes
        writable = yes
[root@server ~]# service smb restart

测试:
[root@client ~]# smbclient -L 10.1.1.2
Enter root's password: 
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Sharename       Type      Comment
    ---------       ----      -------
    anon_share (列出该共享标签名)
[root@client ~]# smbclient //10.1.1.2/anon_share    //进入该共享标签
Enter root's password: 
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]
smb: \> ls
匿名用户写文件被拒绝,在server端修改/samba/share的权限
[root@server share]# ll -d
drwxr-xr-x 2 root root 4096 Apr 23 21:06 .
[root@server share]# chmod o+w /samba/share/
另外匿名用户不需要加入samba数据库
让zhangsan访问/anon_share,本地用户可以访问,匿名用户访问的开关可控制
[root@client ~]# smbclient //10.1.1.2/anon_share -U zhangsan
Enter zhangsan's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]
smb: \> ls

总结:
1. samba服务默认是基于用户名和密码认证的服务
2. samba服务的用户必须是samba服务器上存在的用户,密码必须是samba数据库里的密码
3. 对于发布的共享资源,默认情况下本地用户是可以访问的,匿名用户是否能访问看是否打开public=yes

samba也可以用挂载的方式在客户端对共享目录进行操作
[root@client ~]# mount
mount        mount.fuse   mount.nfs4   mountstats   
mount.cifs   mount.nfs    mountpoint   mount.tmpfs  
[root@client ~]# mount.cifs -o user=zhangsan,pass=123 //10.1.1.2/anon_share /u01
[root@client ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/sda5               16G  3.7G   12G  25% /
tmpfs                  491M   72K  491M   1% /dev/shm
/dev/sda1              194M   30M  155M  16% /boot
/dev/sda3              2.0G   37M  1.8G   2% /home
/dev/sr0               4.2G  4.2G     0 100% /media
//10.1.1.2/anon_share   16G  3.8G   12G  26% /u01
已经挂载好了
[root@client ~]# cd /u01
[root@client u01]# ls
aaa
[root@client u01]# touch 1.txt
[root@client u01]# ls
1.txt  aaa
在客户端操作,结果都会在server端出现
[root@server share]# ls
1.txt  aaa

Windows访问,比较简单,在文件资源管理器我的电脑那一栏输入\\10.1.1.2,回车后输入zhangsan和密码123,即可在该目录里进行创建文件夹等操作。

访问控制:

控制读写权限
    writable = yes/no
    readonly = yes/no
如果资源可写,但只允许某些用户可写,其他都只读
write_list = admin,root,@staff(用户组)
read_list = mary,@students

控制访问对象
    valid_users = tom mary
    invalid_users = tom
注意:这两个选项只能存在其中一个

网络访问控制
host_deny = 192.168.0   拒绝某个网段
host_allow = 192.168.0.254  允许某个IP
hosts_deny = all    拒绝所有
hosts_allow = 192.168.0. EXCEPT 192.168.0.254   允许某个网段,但拒绝某个IP
注意:deny和allow同时存在,优先allow

综合案例:

公司:itcast,有3个部门,cw,rs,sc和一个公共区pub,每个部门的资料根据如下需求进行共享;

1、财务部门/samba/itcast_cw,cw01财务总监有可读可写权限,财务员工可读,boss01对其有管理权限

2、市场部门/samba/itcast_sc,市场部门员工可读可写,公司员工可以查询资料,boss02对其有管理权限

3、HR部门/samba/itcast_rs,rs01HR总监可读写,HR部门员工可对财务部查询,vip用户可以查询

4、休息区/samba/itcast_pub 自己管理自己的文件

步骤:
1.在服务器上创建相应目录,来保存不同部门资料
mkdir /smb/{cw,rs,sc,pub} -p
2.创建相应的用户组(方便管理)
groupadd itcast
groupadd cw
groupadd rs
groupadd sc

useradd cw01 -g cw -G itcast
useradd cw02 -g cw -G itcast
useradd rs01 -g rs -G itcast
useradd rs02 -g rs -G itcast
useradd sc01 -g sc -G itcast
useradd sc02 -g sc -G itcast
useradd boss01 -g itcast
useradd boss02 -g itcast
useradd vip 

3.修改相应目录的权限

4.搭建samba服务,来共享不同部门的资料
vim /etc/samba/smb.conf
...
[cw]
    path=/smb/cw
    valid_users = boss01,@cw,@rs
    write_list = cw01,boss01
[rs]
    path=/smb/rs
    valid_users = vip,@rs
    write_list = rs01
[sc]
    path=/smb/sc
    valid_users = boss02,@itcast
    write_list = @sc,boss02
[pub]
    path=/smb/pub
    valid_users = @itcast
    writable = yes

5.将用户加入到smb数据库里
smbpasswd -a cw01
......
6.测试验证
Linux:
Windows:

总结:

  1. ftp 局域网 安全
  2. nfs 局域网 挂载访问 mount.nfs
  3. samba 局域网 直接服务(smbclient) | 挂载访问(mount.cifs)大部分客户端是Windows
上一篇:第三节,烧录固件。


下一篇:Samba或NFS实现文件共享