大家都知道ftp是跨平台的服务,但是不能在线修改,编辑,只能上传、下载。而nfs是unix网络文件系统,它可以将目录远程挂载到服务器上,但是不能跨平台。而samba弥补这两种服务的不足,它不仅实现了linux与windows 跨平台文件共享,而且也可以实现挂载。

一、samba服务简介

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

二、samb服务基础

       软件包:samba

     Samba-client 客户端软件

     samba-common 通用软件 

     cifs-utils smb客户端工具

   协议:SMP(TCP139)CIFS(445)

   配置文件路径:/etc/samba/smb.conf

   所需服务器:centos7 (172.18.254.254)

三、samba服务器的配置步骤

1、安装软件

[root@localhost ~]# yum -y install samba

2、起服务

[root@localhost ~]# systemctl restart smb

3、samba帐号的管理

    samba用户:a、提前建立同名的系统用户(可不设置密码)

              b、采用独立于系统的密码

  管理工具:pdbedit

   添加用户:-a

  查询用户:-L

  删除用户:-x

[root@localhost ~]# systemctl restart smb
[root@localhost ~]# useradd -s /sbin/nologin smb1
[root@localhost ~]# smbpasswd -a smb1
New SMB password:
Retype new SMB password:
Added user smb1.
[root@localhost ~]# pdbedit -L              //查看系统中所有的smb账户
smb1:2002:

     4、配置文件及参数

[root@svr7 ~]# vim /etc/samba/smb.conf
[global]            //全局配置
        workgroup = MYGROUP
[homes]            //家目录共享                
[printers]            //打印机共享
[samba]
      path = /smb/        //共享目录路径
      public = yes|no      //默认no;公用的        
      browseable = yes|no    //默认yes;是否可以浏览
      read only = yes|no    //默认yes;只读
      writable = yes|no     //默认yes;可写
      write list = user    //默认无;可写入的用户列表
      valid users = user,user1//默认所有用户;有效的用户列表
      hosts allow = 客户地址       //允许的客户机地址
      hosts deny =  客户地址      //禁止的客户机地址
      comment = 注释          //说明

5、修改用户对目录的读写执行权限

[root@localhost ~]# mkdir /smb
[root@localhost ~]# setfacl -m u:smb1:rwx /smb

6、SELinux对samba共享的保护

a、用getseboolbool查看selinux开关

[root@localhost ~]# getsebool -a|grep samba_export
samba_export_all_ro --> off
samba_export_all_rw --> off

b、用setsebool控制SELinux开关

[root@localhost ~]# setsebool -P samba_export_all_ro=on
[root@localhost ~]# setsebool -P samba_export_all_rw=on

四、客户端访问共享目录

所需软件包:samba-client

1、列出共享资源:smbclient -L 服务器地址

[root@centos6 ~]#smbclient -L 172.18.254.254
Enter root's password:                                //匿名登录,可以不输密码,直接回车
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
Sharename       Type      Comment
---------       ----      -------
print$          Disk      Printer Drivers
IPC$            IPC       IPC Service (Samba 4.7.1)
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
Server               Comment
---------            -------
Workgroup            Master
---------            -------

注意:在没有配置主配置文件的情况下,用用户登录时,会登录到用户的家目录。

[root@localhost ~]# smbclient -L //172.18.254.254 -U smb1%centos
Sharename       Type      Comment
---------       ----      -------
print$         Disk      Printer Drivers
IPC$          IPC       IPC Service (Samba 4.7.1)
smb1          Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.
Server               Comment
---------            -------
Workgroup            Master
---------            -------

2、连接到目标主机的共享目录

[root@centos6 ~]#smbclient //172.18.250.55/leifengta -U xuxian
Enter xuxian's password: 
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.7.1]
smb: \> ls
  .                                   D        0  Mon Oct  8 20:52:38 2018
  ..                                  D        0  Mon Oct  8 20:14:25 2018
  xuxian.txt                          A        3  Mon Oct  8 20:45:52 2018
  lost+found                          D        0  Mon Oct  8 19:16:01 2018
  suzhen.txt                          A       12  Mon Oct  8 20:45:19 2018
  aquota.user                               7168  Mon Oct  8 20:11:47 2018
  2.samba.avi                         A 396617646  Mon Oct  8 18:45:48 2018
51200 blocks of size 4096. 51199 blocks available
smb: \>

五、配置过程中可能遇到的问题

1、客户端登录samba时出现以下提示:

session setup failed: NT_STATUS_LOGON_FAILURE

该错误提示表示用户有误,可能是用户不存在,也可能是密码错误,或者只是在samba用户和系统用户及密码出现错误,总之就是用户和密码的问题。

tree connect failed: NT_STATUS_BAD_NETWORK_NAME

该错误表示坏的网络名,表示共享目录不存在,或共享目录权限问题

可用setfacl -m给用户加权限

Connection to 192.168.4.7 failed (Error NT_STATUS_HOST_UNREACHABLE)

2、客户端连接到samba共享目录时出现以下提示:

smb: \> ls

NT_STATUS_ACCESS_DENIED listing \*

文件权限不足,或者存在selinux限制

调整文件的权限,并打开selinux开关

3、执行setsebool -P 操作启用SElinux开关参数时失败,提示:Killed

内存不足,而且交换空间也不足

添加交换分区(1GB)在重试

六、多用户SMB挂载

SAMBA共享默认只支持同时用一个用户挂载SMB共享 ,但CentOS7中可启用多用户挂载功能 ,客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个 samba的挂载点,可获得不同权限 。

实验:多用户smb挂载

服务端:

1.新建两个smb用户,修改其密码

[root@localhost ~]# useradd -s /sbin/nologin xiaoma
[root@localhost ~]# useradd -s /sbin/nologin xiaomao
[root@localhost ~]# smbpasswd -a xiaoma 
New SMB password:
Retype new SMB password:
Added user xiaoma.
[root@localhost ~]# smbpasswd -a xiaomao
New SMB password:
Retype new SMB password:
Added user xiaomao.

      2.新建一个共享目录,并修改它的contect值及设置acl权限

[root@localhost ~]# mkdir /app/smbshared
[root@localhost ~]# chcon -t samba_share_t /app/smbshared/
[root@localhost ~]# setfacl -m u:xiaoma:rwx /app/smbshared/
[root@localhost ~]# setfacl -m u:xiaomao:rwx /app/smbshared/

     3.修改samba主配置文件

[root@localhost ~]# vim /etc/samba/smb.conf
[gongxiang]
        comment = My Gongxiang
        path = /app/smbshared
        browseable = yes
        writeable = no
        write list = xiaoma,xiaomao
        public = yes

4.重启服务

[root@localhost ~]# systemctl restart smb

       客户端:

    1、新建两个用户

[root@localhost ~]# useradd xiaoma
[root@localhost ~]# useradd xiaomao

        2、编辑身份认证文件

[root@localhost ~]# vim /etc/multiuser
username=smb1
password=centos

       3、开机自动挂载到服务器上

[root@localhost ~]# vim /etc/fstab 
//172.18.250.55/gongxiang /mnt/ cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0
[root@localhost ~]# mount -a

              credentials=/etc/multiuser            指定挂载时用到的用户身份认证文件

              multiuser                                       支持多用户认证

              sec=ntlmssp                认证方式为smb认证

    4、切换用户,进入到挂载的目录下

[root@localhost ~]# su - xiaoma
[xiaoma@localhost ~]$ cd /mnt
[xiaoma@localhost mnt]$ ls
ls: reading directory .: Permission denied               //因为没有做smb的认证所以无法访问smb共享
[xiaoma@localhost mnt]$ cifscreds add 172.18.250.55                //对用户进行smb的认证
Password:

    5、测试

[xiaoma@localhost mnt]$ ls
[xiaoma@localhost mnt]$ touch masai
[xiaoma@localhost mnt]$ ll
total 0
-rw-r--r--. 1 1009 1010 0 Oct 11 09:56 masai
[xiaoma@localhost mnt]$ exit
logout

七、一个samba的综合性实验

实验:创建baisuzhen,xuxian,fahai,xiaoqing,xushilin,guanyin 六个用户

1.要求以上六个用户都可以浏览并访问目标主机的共享目录leifengta,匿名用户可访问但不可浏览。大小2GB。未来可自动扩展

2.baisuzhen,xuxian,xushilin 可以在该共享目录下创建及删除文件,且彼此之间创建的文件,可以相互修改,其他用户不可创建文件。

3.xuxian,xushilin最多能各自创建200M的数据,且不能删除其他人创建的文件,baisuzhen不受限制.

4.六个用户各自都 有一个以自己名字为名的共享目录,仅自己可见可访问可创建,他人不可见,guanyin对所有目录均有完整权限。

1、创建六个用户,并设置密码

[root@localhost ~]#  for username in baisuzhen xuxian fahai xiaoqing xushilin guanyin ;do useradd -s /sbin/nologin $username ; (echo redhat;echo redhat) |smbpasswd -a $username ;done

2、创建共享目录,建议用逻辑卷挂载

[root@localhost ~]#  mkdir /app/baishezhuan
[root@localhost ~]#  fdisk /dev/sda 
[root@localhost ~]#  partprobe /dev/sda
[root@localhost ~]#  pvcreate /dev/sda6
[root@localhost ~]#  vgcreate vgbaishe /dev/sda6
[root@localhost ~]#  lvcreate -l +100%FREE -n lvbaishe vgbaishe
[root@localhost ~]#  mkfs.ext4 /dev/vgbaishe/lvbaishe 
[root@localhost ~]#  vim /etc/fstab 
/dev/vgbaishe/lvbaishe /app/baishezhuan                           ext4    defaults,usrquota  0 0
[root@localhost ~]#  mount -a

3、为baisuzhen,xuxian,xushilin三个用户设置acl权限,使其可以在共享目录下创建删除文件

[root@localhost ~]#  setfacl -m u:baisuzhen:rwx /app/baishezhuan/
[root@localhost ~]#  setfacl -m u:xuxian:rwx /app/baishezhuan/
[root@localhost ~]# setfacl -m u:xushilin:rwx /app/baishezhuan/

4、配置samba的主配置文件

[root@localhost ~]#vim /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        config file = /etc/samba/conf.d/%U.conf        //子配置文件
[leifengta]
        comment = xi hu leifengta
        path = /app/baishezhuan
        public = yes                       //可访问
        browseable = no                           //不能浏览
        writeable = no                         //不可写

5、将baisuzhen,xuxian,xushilin三个用户加入到同一个组中,使彼此之间创建的文件,可以相互修改,其他用户不可创建文件

[root@localhost  conf.d]# groupadd baishezhuan
[root@localhost  conf.d]# usermod  -aG baishezhuan baisuzhen
[root@localhost  conf.d]# usermod  -aG baishezhuan xuxian
[root@localhost  conf.d]# usermod  -aG baishezhuan xushilin
[root@localhost  conf.d]# chgrp baishezhuan /app/baishezhuan
[root@localhost  conf.d]# chmod g+s /app/baishezhuan/         //对一个目录作用了sgid权限后,任何人在该目录下创建的文件的所属组,均与该目录的所属组相同。
[root@localhost  conf.d]# chown baisuzhen /app/baishezhuan/
[root@localhost  conf.d]# chmod o+t /app/baishezhuan/          //对一个目录作用了stickey权限后,该目录下文件仅其所属人和目录所属人及root可删除

6、创建与六个用户名字相同的目录,并编辑子配置文件

[root@localhost  samba]# mkdir conf.d
[root@localhost  samba]# cd conf.d/
[root@localhost conf.d]# vim baisuzhen.conf
[leifengta]
        comment = xi hu leifengta
        path = /app/baishezhuan
        browseable = yes
       writeable = yes
       force create mode = 0664
[baisuzhen]
        comment = baisuzhen
        path = /app/common/baisuzhen
        browseable = yes
        writeable = yes
[root@localhost conf.d]# vim xiaoqing.conf 
[leifengta]
        comment = xi hu leifengta
        path = /app/baishezhuan
        browseable = yes
        writeable = no
[xiaoqing]
        comment = xiaoqing
        path = /app/common/xiaoqing
        browseable = yes
        writeable = yes
[root@localhost conf.d]# cat guanyin.conf 
[leifengta]
        comment = xi hu leifengta
        path = /app/baishezhuan
        browseable = yes
        writeable = no
[baisuzhen]
        comment = baisuzhen
        path = /app/common/baisuzhen
        browseable = yes
        writeable = yes
[fahai]
        comment = fahai
        path = /app/common/fahai
        browseable = yes
        writeable = yes
[xiaoqing]
        comment = xiaoqing
        path = /app/common/xiaoqing
        browseable = yes
        writeable = yes
[xushilin]
        path = /app/common/xushilin
        browseable = yes
        writeable = yes
[xuxian]
        comment = xuxian
        path = /app/common/xuxian
        browseable = yes
        writeable = yes
[guanyin]
        comment = guanyin
        path = /app/common/guanyin
        browseable = yes
        writeable = yes

7、 为xuxian,xushilin设置quota

[root@localhost  ~]# quotacheck -cum /app/baishezhuan/                       //生成quota数据库
[root@localhost  ~]# quotaon /app/baishezhuan/                            //开启quota
[root@localhost  ~]# edquota -u xuxian
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vgbaishe-lvbaishe          4          0       200M          1        0        0
[root@localhost  ~]# edquota -p xuxian xushilin                                                        
[root@localhost  common]# mkdir baisuzhen xiaoqing fahai xuxian xushilin guanyin

8、设置共享目录所属人,使其仅自己可见可访问可创建,他人不可见,guanyin对所有目录均有完整权限

[root@localhost common]# chown baisuzhen baisuzhen/
[root@localhost  common]# chown fahai fahai/
[root@localhost common]# chown guanyin guanyin/
[root@localhost  common]# chown xiaoqing xiaoqing/
[root@localhost common]# chown xushilin xushilin/
[root@localhost  common]# chown xuxian xuxian/
[root@localhost common]# chmod 700 *
[root@localhost common]# setfacl -m u:guanyin:rwx *

9、测试