linux服务篇-Samba服务

       文件和打印机的一个共享程序,Samba=smb(由于smb被windows使用,所以命名为Samba)=server Manage Block!

       Samba最先在Linux和Windows之间架起了一座桥梁,正是由于Samba的出现,我们可以在Linux和Windows之间实现文件共享的相互通讯,我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地也远程联机打印

Samba应用环境

       文件和打印机共享:文件和打印机共享是Samba的最主要功能,SMB进程实现资源共享,将文件和打印机发布到网络中,以方便用户查看和使用!

       身份认证和权限管理:smbd服务支持user mode和domain mode等你身份验证和权限设置模式,通过加密的方式可以保证共享文件和打印机的安全!

       名称解析:Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。

浏览服务:局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。

工作端口和模式

       端口包括:139(NetBIOS协议,进行计算机名称的解析)和445(作用于文件共享)

早期,smb运行与NBT(NetBios Over TCP/IP)上,使用UDP协议的137,138,以及TCP的139号端口

拓展:NetBIOS协议

       Network Basic Input/Output System的简称,网络基本输入/和输出系统!协议可以理解为(用于局域网通讯的API,是由IBM公司开发),NETBIOS的主要作用:通过NETBIOS协议获得计算机名称,然后把计算机名解析为IP地址!后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP协议的139和445端口。

       C/S模式

Nmbd smbd

工作原理

当客户端访问服务器时,信息通过SMB协议进行传输,其工作过程可以分成四个步骤哈:

1:协议协商

客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应。

--------negprot请求------->

客户端                                               服务器

<--------negprot响应-------

2:建立连接

当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用。

--------session setup &X请求------->

客户端                                                             服务器

<--------session setup &X响应-------

3:访问共享资源

访问共享资源

       客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源哈。

--------tree connect &X请求------->

客户端                                                               服务器

<--------tree connect &X响应-------

4:断开连接

共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接。

--------tree disconnect请求------->

客户端                                                            服务器

<--------tree disconnect响应-------

服务端安装方式:

       [root@Kylinos63 ~]# rpm -ivh /media/Packages/samba-3.6.9-164.el6.x86_64.rpm

通用Internet文件系统

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

客户端安装:

       [root@Kylinos6 ~]# yum install -y samba-client

搭建一台SAMBA服务器的流程

  1. 编辑主配置文件,指定需要共享的目录,权限。主配置文件路径/etc/samba/smb.conf
  2. 在主配置文件中制定日志文件和存放路径
  3. 设置共享目录的在server上的本地权限及samba共享权限
  4. 重新加载配置文件或者重启smb服务,让配置生效

服务启动

[root@Kylinos63 ~]# systemctl restart smb

       [root@Kylinos63 ~]# systemctl enable smb

       [root@Kylinos63 ~]# netstat -antup | grep smb         //139端口实际就是提供Netbios服务

tcp        0      0 0.0.0.0:139          0.0.0.0:*          LISTEN      7195/smbd          

tcp        0      0 0.0.0.0:445         0.0.0.0:*           LISTEN      7195/smbd          

tcp        0      0 :::139              :::*               LISTEN      7195/smbd          

tcp        0      0 :::445              :::*               LISTEN      7195/smbd

       [root@Kylinos63 ~]# vim /etc/samba/smb.conf

#开头部分是Smb.conf配置文件介绍,包括文件作用相关信息

#smb.conf中,;开头的是配置实例,不生效,去掉;此行生效,#表示注释

[global]            #全局设定

        workgroup = MYGROUP  #工作组,为了和WIndows兼容,我们可以改为WORKGROUP

        server string = Samba Server Version %v     #对这台Server的Samb服务描述字段

;       netbios name = MYSERVER   #NETBIOS名字,在Windows的网上邻居中显示的名字,属全局配置

    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24   #设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

    hosts allow = 127. 192.168.1. 192.168.10.1   #表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段(192.168.31.)表示。hosts deny 与hosts allow 刚好相反,全局选项

        log file = /var/log/samba/log.%m        #log存放位置,,%m表示主机名

        max log size = 50                      #最大日志为50k,达到50k日志滚动

        security = user          #安全类型:user=基于用户名和密码的访问,一般使用user;security=share共享时不用输入密码直接访问;server=检查账户及密码工作交给另外一台Windows服务器或者Samba服务器去负责,domain=基于域的认证

        passdb backend = tdbsam                 #密码存放到samba数据库

#passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam是security account manager(安全账户管理)的简写。

#1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。

#2.tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库 可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。

我们除开使用smbpasswd之外,也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。

  pdbedit –a username:新建Samba账户。

  pdbedit –x username:删除Samba账户。

  pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。

  pdbedit –Lv:列出Samba用户列表的详细信息。

  pdbedit –c “[D]” –u username:暂停该Samba用户的账号。

  pdbedit –c “[]” –u username:恢复该Samba用户的账号。

#3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

        load printers = yes                             #载入本地打印机

        cups options = raw                              #设备类型,裸设备

[homes]            #几个特殊共享,某一个人的家目录对外共享控制机制,不要注释掉

        comment = Home Directories              #描述字段

        browseable = no                                 #默认开始,=no是隐藏

        writable = yes                                      #可写

;       valid users = %S          #有效的用户,%s代表只有属于自己的家目录才能访问

;       valid users = MYDOMAIN\%S     #有效用户,默认代表针对于域用户登陆的用户访问自己的家目录

[printers]                                                      #打印共享

        comment = All Printers

        path = /var/spool/samba

        browseable = no

        guest ok = no

        writable = no

        printable = yes

[share]                                             #自定义的共享名字

        comment = Public share          #描述字段

        path = /share                           #共享文件路径

        public = yes                                #匿名用户可以看到此目录

        writable = yes       #可写,这里针对所有用户,wrist list只是对后面的用户或组

        printable = no                          #设备是否是打印机

        write list = bob          bob,@sales    #用户表,这里的用户可以读写共享目录,可以写成用户名,用户名,@组名

        hosts allow = 192.168.1. 127.       #允许那个网段来访问,方式和前面的写法一样

#常见的几个选项

        create mask = 0755                              #上传文件的权限

        only guest = yes                        # 将登陆的用户映射为匿名用户

        guest ok = yes                          #允许匿名用户,类似于public=yes

        read only   = yes                       #权限只读,主要针对目录

        guest account = pcguest         #匿名用户上传文件的所属主组

              directory mask = 0755         #匿名用户上传文件的权限

              available = yes                                   #用来指定改共享资源是否可用

注意:当配置文件有重复的参数,例如

writable = yes

writable = no

下边的writable = no生效

拓展:

特殊权限  拓展权限  setfacl

   SUID: u+s

              只能用在可执行的二进制程序上面,对目录设置无效

              程序运行的时候(瞬间)从执行者变为程序的拥有者

            eg:passwd在普通用户是可以更改自己的密码的,但是我们查看到,shadow的权限是没有任何权限(----------.),但是更改密码的时候,普通用户执行passwd的权限将密码需要写入shadow里面去,所以在执行的时候,获取到了root的权限,将密码写入到shadow中!-----[普通用户执行某命令的瞬间提升成为root用户]

        #chomd u+s /usr/bin/less       //命令格式

            #chmod 4755 /usr/bin/less   //将特殊权限添加到最前面,4位数字执行方式,u+s->s=4  g+s->s=2

   SGID: g+s

              可以对二进制程序上面,也可以针对目录,更多的用于目录

              新创建的文件所属组会继承上级目录的所属组

                     Notes:若使用了cp -a的命令去copy到已经添加了g+s的目录中,是会覆盖g+s的权限的,RHEL6中

   SBIT: o+t

              stickybit 粘滞位,作用只用于目录,功能目录下创建了文件只有root,文件onwer和目录所有者才能删除

              纵使目录拥有了x权限,其他人员也无法删除

              #chmod o+t /tmp                //对目录/tmp添加t的权限

              #chmod 1744 /tmp              //利用数字添加t的权限,在权限数目前加一位,1添加,0取消t的权限

配置匿名共享share

       通过配置一个工作组为kylinos.cn,用samba服务器作为文件服务器,发布共享目录/share,共享名为public,允许所有员工访问

测试目录和文件

       [root@Kylinos63 ~]# mkdir /share                                   //测试共享目录

[root@Kylinos63 ~]# cp /etc/passwd /share              //测试文件

配置文件修改

   Samba3的配置方式

[root@Kylinos63 ~]# vim /etc/samba/smb.conf

[global]

        workgroup = kylinos.cn                                                  #此行修改

        server string = Samba Server Version %v & kylinos.cn         #修改描述字段

 ……      

        security = share                                #修改访问安全类型

……

[public]                                        #末尾添加,共享名为public

        comment = Public share              #描述字段

        path = /share                               #路径

        public = yes                                    #允许匿名

   samba4的配置方式

       [root@Kylinos63 ~]# vim /etc/samba/smb.conf

[global]

        workgroup = kylinos.cn                                                  #此行修改

        security = user                                   #修改访问安全类型

              map to guest = bad user

……

[public]                                        #末尾添加,共享名为public

        comment = Public share              #描述字段

        path = /share                               #路径

        public = yes                                    #允许匿名

[root@Kylinos63 ~]# testparm   #检测smb.conf文件是否正确

[root@Kylinos63 ~]# service smb restart                          //启动服务

Windows客户端测试

按下Win+R,护着从开始-运行,然后输入共享地址格式 \\IP

linux服务篇-Samba服务_第1张图片

不用输入密码方式到public(实际是/share)

linux服务篇-Samba服务_第2张图片

可以看到public里面的passwd文件,全程无密码输入

注意:

Windows访问samba共享时,提示:“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问”

此问题需要修改Win10 网络策略

按window+R键输入gpedit.msc 来启动本地组策略编辑器,如下:

依次找到“计算机配置-管理模板-网络-Lanman工作站”这个节点,在右侧内容区可以看到“启用不安全的来宾登录”这一条策略设置。状态是“未配置”,如下:

双击“启用不安全的来宾登录”这一条策略设置,将其状态修改为“已启用”并单击确定按钮。

设置完成,再次尝试访问发现可以正常访问了

Linux客户端测试

       [root@Kylinos64 ~]# smbclient -L 192.168.1.63                               //查看Samba上的共享资源

       Enter root's password:              #这里密码为空,直接回车查看

Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Sharename       Type      Comment

    ---------       ----      -------

    public          Disk      Public share

    IPC$            IPC       IPC Service (Samba Server Version 3.6.9-164.el6 & kylinos.cn)

Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Server               Comment

    ---------            -------

    Workgroup            Master

    ---------            -------

       [root@Kylinos64 ~]# mount -t cifs //192.168.1.63/public /opt//匿名共享无需加入用户名

Password:                                                    #直接回车,密码为空

       [root@Kylinos64 ~]# cd /opt

[root@Kylinos64 opt]# ls ; cd

passwd

配置密码共享

       通过用户名和密码共享出sales。只有拥有用户名和密码的同事可以查看这个共享

创建测试目录及其文件

[root@Kylinos63 ~]# mkdir /sales

       [root@Kylinos63 ~]# cp /etc/group /sales/group.txt

修改配置文件

       [root@Kylinos63 ~]# vim /etc/samba/smb.conf

……

        security = user                                        #修改此项,安全级别

        #passdb backend = tdbsam                #注销此行

        passdb backend = smbpasswd          #使用smb自己的工具smbpasswd来给系统用户(真实用户

或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。

        smb passwd file = /etc/samba/smbpasswd      #存放密码位置

……

[sales]                                                             #末尾添加此行

comment = Sales Share Folder

path = /sales

public = yes

writable = yes

valid user = @sales

测试用户

       [root@Kylinos63 ~]# groupadd sales

       [root@Kylinos63 ~]# useradd -g sales sale1

       [root@Kylinos63 ~]# useradd -g sales sale2

[root@Kylinos63 ~]# grep sale /etc/passwd

sale1:x:500:500::/home/sale1:/bin/bash

sale2:x:501:500::/home/sale2:/bin/bash

建立samba对应账号

       [root@Kylinos63 ~]# touch /etc/samba/smbpasswd  //若有不存储在报错,需要新建

[root@Kylinos63 ~]# smbpasswd -a sale1                        //本地用户建立samba账号

New SMB password: #123456

Retype new SMB password:    #123456

[root@Kylinos63 ~]# smbpasswd -a sale2

New SMB password:       #123456

Retype new SMB password:        #123456

Added user sale2.

       [root@Kylinos63 ~]# chmod 777 /sales       //除开samba本身的权限控制,系统权限给足

       [root@Kylinos63 ~]# service smb restart

Windows客户端测试

linux服务篇-Samba服务_第3张图片

linux服务篇-Samba服务_第4张图片

Sale1是sale1用户自己的home目录,sales里面有group文件

linux服务篇-Samba服务_第5张图片

同样方式切换用户,切换用户前,清除用户

linux服务篇-Samba服务_第6张图片

执行这条命令:net use \\192.168.1.63\IPC$ /del

然后再执行访问共享

       \\192.168.1.63               //当你启用了user安全级别,匿名共享的public也就不匿名了

linux服务篇-Samba服务_第7张图片

Linux客户端的测试

       [root@Kylinos64 ~]# smbclient -L 192.168.1.63

Enter root's password:

Anonymous login successful

Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Sharename       Type      Comment

    ---------       ----      -------

    public          Disk      Public share

    sales           Disk      Sales Share Folder

    IPC$            IPC       IPC Service (Samba Server Version 3.6.9-164.el6 & kylinos.cn)

Anonymous login successful

Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]

    Server               Comment

    ---------            -------

    Workgroup            Master

    ---------            -------

       [root@Kylinos64 ~]# mount -o user=sale1,pass=123456 //192.168.1.63/sales /sales/

       [root@Kylinos64 ~]# ls /sales/

group.txt

若是Linux开机启动挂载的方式:

       [root@Kylinos64 ~]# vim /etc/fstab                   //末尾添加此行,开机启动挂载

//192.168.1.63/sales    /sales                  cifs    user=sale1,pass=123456  0 0

隐藏自己的home共享

       [root@Kylinos63 ~]# vim /etc/samba/smb.conf

#[homes]                                                        #把这四行注释

#       comment = Home Directories

#       browseable = no

#       writable = yes

       [root@Kylinos63 ~]# service smb restart

客户端测试(sale1)

linux服务篇-Samba服务_第8张图片

服务端边缘状态监测

       [root@Kylinos63 ~]# smbstatus

Ignoring unknown parameter "valid user"

Samba version 3.6.9-164.el6

PID     Username      Group         Machine                       

-------------------------------------------------------------------

51497     sale1         sales         192.168.1.64 (192.168.1.64)

51490     sale1         sales         linuxstudy   (192.168.1.33)

Service      pid     machine       Connected at

-------------------------------------------------------

IPC$         51497   192.168.1.64  Mon Oct 12 15:01:05 2015

IPC$         51490   linuxstudy    Mon Oct 12 14:59:48 2015

sales        51497   192.168.1.64  Mon Oct 12 15:01:05 2015

       IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问

Linux客户端工具smbclient

Smbclient(samba client)是基于SMB协议的,用于存取共享目标的客户端程序。

列出smb的分享目录

[root@kylinos ~]# smbclient -L 192.168.31.63  #匿名登录

Enter SAMBA\root's password:

Anonymous login successful

       [root@kylinos ~]# smbclient -L 192.168.31.63 -U sale2  #使用用户名列举

Enter SAMBA\sale2's password:

[root@Kylinos64 ~]# smbclient -L 192.168.1.63 -U sale1%123456     //列出某个IP的共享,可以不跟用户

像 FTP 客户端一样使用 smbclient

[root@kylinos ~]# smbclient //192.168.31.63/sales #匿名登录

Enter SAMBA\root's password:

Anonymous login successful

Try "help" to get a list of possible commands.

smb: \>

[root@kylinos ~]# smbclient //192.168.31.63/sales -U sale1  #用户登录

Enter SAMBA\sale1's password:

Try "help" to get a list of possible commands.

smb: \>

[root@Kylinos64 ~]# smbclient //192.168.1.63/sales -U sale1%123456     //像使用FTP工具一样使用

Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]

smb: \> ls

  .                                   D        0  Mon Oct 12 14:25:36 2015

  ..                                 DR        0  Mon Oct 12 14:25:18 2015

  group.txt                                  804  Mon Oct 12 14:25:36 2015

        40317 blocks of size 262144. 22595 blocks available

#会有smb提示符,可以使用cd,lcd,get ,mget,put ,mput等这些命令访问远程共享

使用smbget下载文件

[root@kylinos64 ~]# smbget smb://192.168.31.63/sales/group.txt -U sale1

Password for [sale1] connecting to //sales/192.168.31.63:

Using workgroup SAMBA, user sale1

smb://192.168.31.63/sales/group.txt                                                                                                     

Downloaded 1.07kB in 2 seconds

直接一次性使用 smbclient

[root@Kylinos64 ~]# smbclient -c "ls" //192.168.1.63/sales -U sale2%123456  //类似上面命令,单用ls

[root@Kylinos64 ~]# smbclient -c "mkdir share1" //192.168.1.63/sales -U sale1%123456 //创建目录

[root@Kylinos64 ~]# ls /sales/                                         //之前已经挂载,所以这里可以看到share1

group.txt  share1

Linux挂载Windows共享

       [root@Kylinos64 ~]# mount -t cifs //192.168.1.230/IT.S\ Se  /mnt -o user=administrator,pass=123456

开机自动挂载(文件共享名:IT.S Se)

       [root@Kylinos64 ~]# vim /etc/fstab

//192.168.1.230/IT.S\040Se      /mnt          cifs    user=administrator,pass=123456 0 0

#空格编码使用\040代替

虚拟用户(用户映射)

没有绝对的虚拟用户,只会将一个不存在的用户或多个用户,映射为本地的一个真实用户

创建真实用户

       [root@Kylinos63 ~]# useradd find

[root@Kylinos63 ~]# smbpasswd -a find

创建用户映射

       [root@Kylinos63 ~]# vim /etc/samba/smbusers

# Unix_name = SMB_name1 SMB_name2 ...

root = administrator admin

nobody = guest pcguest smbguest

find = kylinos15                                 #末尾添加此行

编辑配置文件

       [root@Kylinos63 ~]# vim /etc/samba/smb.conf

…… 

        workgroup = kylinos.cn

        server string = Samba Server Version %v & kylinos.cn         #上面两行的下面添加下面一行

        username map = /etc/samba/smbusers      #写到全局,全局生效,写到某一个共享,只是针对某一个共享生效

……

       [root@Kylinos63 ~]# service smb restart

使用windows测试即可

       清除用户信息,然后使用kylinos15登陆测试,kylinos15并不存在

linux服务篇-Samba服务_第9张图片

swat介绍

SWAT:The Samba WEB Administration Tool

SWAT是Samba的图形化管理工具。我们可以通过浏览器利用swat工具来设置samba。在swat中每一个samba参数都有相应的帮助文件或解释文件,很适合初学者。

SWAT工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。

1: 版本问题,安装3.6.23

2:编辑swat配置文件,only_from,disabled

3:启动xinetd,启动smb

4:  web访问:http://IP:901

#vim /etc/xinetd.d/swat                     //编辑配置文件

service swat

{

        port            = 901

        socket_type     = stream

        wait            = no

        only_from       = 192.168.1.0/24            #修改可以管理的IP地址段

        user            = root

        server          = /usr/sbin/swat

        log_on_failure  += USERID

        disable         = no                        #启用

linux服务篇-Samba服务_第10张图片

linux服务篇-Samba服务_第11张图片

linux服务篇-Samba服务_第12张图片

你可能感兴趣的:(KylinOS,linux,linux,服务器,windows)