一、Samba介绍

 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

 SMB (Server Messages Block,信息服务块) 是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

 CIFS:Common Internet File System通用网络文件系统,是windows主机之间共享的协议,samba实现了这个协议,所以可以实现wondows与linux之间的文件共享服务。

 SAMBA的功能:

  共享文件和打印,实现在线编辑
  实现登录SAMBA用户的身份认证
  可以进行NetBIOS名称解析
  外围设备共享

二、Samba服务

1、相关包

  Samba 提供smb服务
  Samba-client 客户端软件
  samba-common 通用软件
  cifs-utils smb 客户端工具
  samba-winbind 和AD相关

2、服务进程

  smbd 提供smb (cifs) 服务;监听端口 TCP: 139,445

  nmbd 提供NetBIOS名称解;监听端口 UDP: 137,138

3、配置文件

  主配置文件:/etc/samba/smb.conf  (通过 man smb.conf 可查看帮助)

  语法检查:testparm [-v] [/etc/samba/smb.conf]

  客户端工具:smbclient,mount.cifs

  smb.conf 配置文件:(#和; 开头的语名为注释,大小写不敏感)

    [global]  #全局设置

    workgroup=name  #指定工作组名称
    server=string  #主机注释信息
    netbios=name  #指定NetBIOS名
    interfaces    #指定服务侦听接口和IP
    hosts allow host #允许指定主机访问,默认允许所有主机访问,用逗号、空格、tab分隔,如host allow = 172.16. .example.com
    host deny host   #拒绝指定主机访问
    config file=/etc/samba/conf.d/%U  #用户独立的配置文件
    Log file=/var/log/samba/log.%m  #不同客户机采用不同日志
    log level = 2  #日志级别,默认为0,不记录日志
    max log size=50  #日志文件达到50K,将轮循rotate,单位KB
    security三种认证方式:
      share:匿名(CentOS7不再支持)
      user:samba用户(采有linux用户,samba的独立口令)
      domain:使用DC(DOMAIN CONTROLLER)认证
    passdb backend = tdbsam#密码数据库格式

    [homes]  #用户家目录共享

    [printers]  #定义打印机资源和服务

    [sharename]  #自定义的共享目录配置

    [共享名称]  #远程网络看到的共享名称
    comment  #注释信息
    path  #所共享的目录路径
    public  #能否被guest访问的共享,默认no,和guest ok 类似
    browsable  #是否允许所有用户浏览此共享,默认为yes,no为隐藏
    writable=yes  #可以被所有用户读写,默认为no
    read only=no  #和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
    write list   #三种形式:用户,@组名,+组名,用,分隔 如writable=no,列表中用户或组可读写,不在列表中用户只读
    valid users  #特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

    宏定义:
      %m  客户端主机的NetBIOS名
      %H  当前用户家目录路径
      %g  当前用户所属组
      %L  samba服务器的NetBIOS名
      %T  当前日期和时间
      %M  客户端主机的FQDN
      %U  当前用户用户名
      %h  samba服务器的主机名
      %I  客户端主机的IP
      %S  可登录的用户名

4、samba用户管理

  实现samba用户需要安装 samba-common-tools 包,samba用户须是Linux用户,建议使用/sbin/nologin

   [root@centos7 ~]# yum install -y samba-common-tools

  添加samba用户

   smbpasswd -a
   pdbedit -a -u

  修改用户密码

   smbpasswd

  删除用户和密码

   smbpasswd -x
   pdbedit -x -u

  查看samba用户列表

   /var/lib/samba/private/passdb.tdb
   pdbedit -L -v

  查看samba服务器状态

   smbstatus

5、smb客户端访问

 1. UNC路径:(Universal Naming Convention,通用命名规范),格式:\\sambaserver\sharename

 2. 终端下使用smbclient登录服务器

  smbclient -L instructor.example.com
  smbclient -L instructor.example.com -U smbuser
  smbclient //instructor.example.com/shared -U smbuser

  可以使用-U选项来指定用户%密码,或通过设置和导出USER和PASSWD环境变量来指定

6、挂载cifs文件系统

 1. 手动挂载

  mount -o user=smbuser,password=centos //server/shared /mnt/smb

 2. 开机自动挂载

  cat /etc/fstab  可以用文件代替用户名和密码的输入

  //server/shared /mnt cifs credentials=/etc/smb.txt 0 0

  如://192.168.214.17/smbshare  /mnt/smbshare  cifs  crendentials=/etc/smb.txt 0 0(如果是centos6还需加 sec=ntlmssp 挂载选项)

  cat /etc/smb.txt

  username=smbuser

  password=centos

  chmod 600 /etc/smb.txt

三、实现smb共享

1、实验环境

  系统:CentOS7.6

  主机:一台服务器端(192.168.214.17),一台客户端(192.168.214.27)

  软件:samba  (服务器端),cifs-utils (客户端),光盘yum源

2、实现过程

 1. 在服务器上安装samba包

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

 2. 创建samba用户和组

[root@centos7 ~]# yum install -y samba-common-tools    #实现samba用户需要装此包
[root@centos7 ~]# groupadd -r smbgroup
[root@centos7 ~]# useradd -s /sbin/nologin -G smbgroup smbuser1
[root@centos7 ~]# smbpasswd -a smbuser1
[root@centos7 ~]# useradd -s /sbin/nologin smbuser2
[root@centos7 ~]# smbpasswd -a smbuser2

 3. 创建samba共享目录,并设置SELinux

[root@centos7 ~]# mkdir /data/smbshare
[root@centos7 ~]# chgrp smbgroup /data/smbshare
[root@centos7 ~]# chmod /data/smbshare
#以下为SELinux设置,SELinux关闭的不用设置
[root@centos7 ~]# semanage fcontext -a -t samba_share_t '/data/smbshare(/.*)?'
[root@centos7 ~]# restorecon -vvFR /data/smbshare

 4. samba服务器配置

[root@centos7 ~]# vim /etc/samba/smb.conf
#在[global]选项下,设置以下两项,如有默认选项,则不用改
security = user
passdb backend = tdbsam
#以下为自定义共享配置
[smbshare]
path = /data/smbshare
writeable = no
write list = @smbgroup #writeable = no时只有smbgroup组的用户才有写权限

 5. 启动samba服务

[root@centos7 ~]# systemctl start smb nmb
[root@centos7 ~]# systemctl enable smb nmb #设置开机启动
#以下为防火墙设置,已关闭的不用设置
[root@centos7 ~]# firewall-cmd --permanent --add-service=samba
[root@centos7 ~]# firewall-cmd --reload

 6. 客户端访问测试

[root@centos7- ~]# yum install -y cifs-utils    #安装包
#用smbuser1用户挂载smb共享并访问
[root@centos7- ~]# mkdir /mnt/smbuser1
[root@centos7- ~]# mount -o username=smbuser1 //192.168.214.17/smbshare /mnt/smbuser1
Password for smbuser1@//192.168.214.17/smbshare: ****** #输入密码
#或用mount -o username=smbuser1,password=centos //192.168.214.17/smbshare /mnt/smbuser1
#注意centos6挂载centos7时还要加一个挂载选项sec=ntlmssp
#mount -o sec=ntlmssp,username=smbuser1,password=centos //192.168.214.17/smbshare /mnt/smbuser1
[root@centos7- ~]# cd /mnt/smbuser1/ #进入挂载目录
[root@centos7- smbuser1]# ls #可以看到可以访问了
a.txt initial-setup-ks.cfg
#根据之前的smb.conf设置知道,smbuser1有写权限,smbuser2无写权限,可以来测试下
[root@centos7- smbuser1]# touch b.txt
[root@centos7- smbuser1]# ls #smbuser1成功了
a.txt b.txt initial-setup-ks.cfg
#用smbuser2用户挂载smb共享并访问
[root@centos7- ~]# mkdir /mnt/smbuser2
[root@centos7- ~]# mount -o username=smbuser2,password=centos //192.168.214.17/smbshare /mnt/smbuser2
[root@centos7- ~]# cd /mnt/smbuser2/
[root@centos7- smbuser2]# ls #可以看到挂载成功了
a.txt b.txt initial-setup-ks.cfg
[root@centos7- smbuser2]# touch c.txt #可以看到无写权限
touch: cannot touch ‘c.txt’: Permission denied

Linux学习-samba服务的更多相关文章

  1. 利用Linux的Samba服务模拟NT域

    利用Linux的Samba服务模拟NT域 Samba是一个与Windows NT具有相同协议的软件包.我们可以利用Samba服务来模拟 Windows NT域,使用户从Windows计算机上直接使用一 ...

  2. Linux 配置samba服务实现与Windows文件共享

    目录: 1.samba服务介绍 2. 安装samba服务和客户端 3.samba配置文件详解 4.配置实例 5.客户端挂载与测试 6.samba排错 1.Samba服务介绍     Samba 最先在 ...

  3. linux配置samba服务【原创】

    转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...

  4. linux下Samba服务配置

    SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可 ...

  5. 【Linux】samba服务

    samba是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件. ①Samba软件包的安装 使用源安装,在终端中输入如下命令: #sudo apt-get install samb ...

  6. 手把手带你基于嵌入式Linux移植samba服务

    摘要:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 本文分享自华为云社区<嵌入式Linux下移植samba服务--<基于北斗和4G ca ...

  7. Linux下samba服务搭建

    参考: https://www.cnblogs.com/lxyqwer/p/7271369.html https://www.cnblogs.com/liulipeng/p/3406352.html ...

  8. linux学习一个服务(未完)

    学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)

  9. linux安装Samba服务

    [1].yum -y install samba安装samba [2].找到samba配置文件:vim /etc/samba/smb.conf [3].[gloabl]下面security有三种模式: ...

随机推荐

  1. python 接口测试时,后端报错no String-argument constructor/factory method

    解决方法: 1.先将字典转化为序列化的数据类型 data = {"pageNo":0,"pageSize":10,"shopId":15,& ...

  2. Unity 实现物体拖拽

    Unity实现拖拽: 也可以继承Unity EventSystem中的接口实现. 当鼠标按下的时候以左键为例: Using System.Collections; Using System.Colle ...

  3. flex 判断对象的类型

    在判断flex对象的类型之前,首先是获取对象类型,获取的方式有: mx.utils.NameUtil.getUnqualifiedClassName(object:Object):String  // ...

  4. 2018.03.26 Python-Pandas 字符串常用方法

    import numpy as np import pandas as pd 1 #字符串常用方法 - strip s = pd.Series([' jack ','jill',' jease ',' ...

  5. 【HANA系列】SAP HANA SQL获取当前日期

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...

  6. <class 'blog.admin.CategoryAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'mame', which is not a callable, an attribute of 'CategoryAdmin', or an attribute or method on 'blog.Category'

    系统反馈此类错误是因为行列映射时无法对应: 引起无法对应的原因有: 定义是缺少某列,定义时缩进导致,映射关系时缺少某列,(通俗讲列名对应不上). 这种错误多是python中的 因为其中对于空格的要求是 ...

  7. 网络编程.iocp

    1.(20191212)查到的一些资料:java从 JDK7开始 引入AOI(即 NIO2).然后 实现 IOCP使用的是 AsynchronousChannelGroup.AsynchronousS ...

  8. xmake入门,构建项目原来可以如此简单

    前言 在开发xmake之前,我一直在使用gnumake/makefile来维护个人C/C++项目,一开始还好,然而等项目越来越庞大后,维护起来就非常吃力了,后续也用过一阵子automake系列工具,并 ...

  9. django学习——通过HttpResponseRedirect 和 reverse实现重定向(转载)

    人分类: django   用django开发web应用, 经常会遇到从一个旧的url转向一个新的url,也就是重定向. HttpResponseRedirect:构造函数的第一个参数是必要的 — 用 ...

  10. [Git] 015 远程仓库篇 第二话

    0. 前言 在 [Git] 006 在本地新建一个仓库 中,我在本地建了一个仓库 "git_note" 这回的任务 在 GitHub 上建一个远程仓库:为方便记忆,我就起名为 &q ...