一、Samba简介

1、Samba概述

       Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS可以很好的完成Linux与Linux之间的数据共享,因而Samba较多的用在了Linux与windows之间的数据共享上面。



SMB:Server Message Block protocol     服务信息块

SMB是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,SMB协议客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。

在 TCP/IP 环境下,客户机通过 NetBIOS over TCP/IP(或 NetBEUI/TCP 或 SPX/IPX)连接服务器。一旦连接成功,客户机可发送 SMB 命令到服务器上,从而客户机能够访问共享目录、打开文件、读写文件,以及一切在文件系统上能做的所有事情。

CIFS)。与现有 Internet应用程序如文件传输协议(FTP)相比,CIFS灵活性更大。对于类UNIX系统,可使用一种称为 Samba 的共享软件。


2、NetBIOS

用于局域网通信的一套API

NETBIOS协议是由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。因为它占用系统资源少、传输效率高,所以几乎所有的局域网都是在NetBIOS协议的基础上工作的。

NetBIOS的功能简单地概括为:为局域网内的主机实现名称解析


二、samba

   samba在类UNIX上分别使用SMB和NMB进行实现了SMB和NetBIOS,

SMB是samba的核心服务,主要负责建立Linux Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听445TCP端口;

而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137138UDP,及139TCP端口。

   samba还有另一个进程:winbindd,但我们一般都不启动它,使用它再基于LDAP协议可以加入windows的AD
  

   Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。


安装samba:

[root@Node4 ~]# yum install samba

Dependencies Resolved

==========================================================================================================
 Package                          Arch              Version                      Repository          Size
==========================================================================================================
Installing:
 samba                            x86_64            3.6.23-36.el6_8              updates            5.1 M
Installing for dependencies:
 libtalloc                        x86_64            2.1.5-1.el6_7                base                26 k
 libtevent                        x86_64            0.9.26-2.el6_7               base                29 k
 samba-common                     x86_64            3.6.23-36.el6_8              updates             10 M
 samba-winbind                    x86_64            3.6.23-36.el6_8              updates            2.2 M
 samba-winbind-clients            x86_64            3.6.23-36.el6_8              updates            2.0 M

Transaction Summary
==========================================================================================================
Install       6 Package(s)


[root@Node4 ~]# rpm -ql samba
/etc/logrotate.d/samba
/etc/openldap/schema
/etc/openldap/schema/samba.schema
/etc/pam.d/samba
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
/etc/samba/smbusers
/usr/bin/eventlogadm       # 事件查看器,日志管理工具
/usr/bin/mksmbpasswd.sh   
/usr/bin/smbstatus         # 查看smb状态的命令
/usr/lib64/samba/auth

/usr/lib64/samba/vfs
/usr/lib64/samba/vfs/acl_tdb.so

/usr/sbin/nmbd
/usr/sbin/smbd
/usr/share/doc/samba-3.6.23

/var/spool/samba

启动samba:

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

Samba version 3.6.23-36.el6_8
PID     Username      Group         Machine                        
-------------------------------------------------------------------

Service      pid     machine       Connected at
-------------------------------------------------------

No locked files

[root@Node4 ~]# 
[root@Node4 ~]# ss -tunap|grep m
udp    UNCONN     0      0          172.16.11.255:137                   *:*      users:(("nmbd",17115,16))
udp    UNCONN     0      0          172.16.11.221:137                   *:*      users:(("nmbd",17115,15))
udp    UNCONN     0      0         192.168.10.255:137                   *:*      users:(("nmbd",17115,12))
udp    UNCONN     0      0           192.168.10.4:137                   *:*      users:(("nmbd",17115,11))
udp    UNCONN     0      0                      *:137                   *:*      users:(("nmbd",17115,9))
udp    UNCONN     0      0          172.16.11.255:138                   *:*      users:(("nmbd",17115,18))
udp    UNCONN     0      0          172.16.11.221:138                   *:*      users:(("nmbd",17115,17))
udp    UNCONN     0      0         192.168.10.255:138                   *:*      users:(("nmbd",17115,14))
udp    UNCONN     0      0           192.168.10.4:138                   *:*      users:(("nmbd",17115,13))
udp    UNCONN     0      0                      *:138                   *:*      users:(("nmbd",17115,10))
tcp    LISTEN     0      50                     *:139                   *:*      users:(("smbd",17133,29))
tcp    LISTEN     0      50                    :::139                  :::*      users:(("smbd",17133,27))
tcp    LISTEN     0      100                  ::1:25                   :::*      users:(("master",1401,13))
tcp    LISTEN     0      100            127.0.0.1:25                    *:*      users:(("master",1401,12))
tcp    LISTEN     0      50                     *:445                   *:*      users:(("smbd",17133,28))
tcp    LISTEN     0      50                    :::445                  :::*      users:(("smbd",17133,26))
[root@Node4 ~]#


三、配置Samba

 samba配置文件都存放在/etc/samba/目录下:

[root@Node4 ~]# cd /etc/samba/
[root@Node4 samba]# ls
lmhosts  smb.conf  smbusers

smb.conf 主配置文件:

  包括四个设置段:

[global]            设置全局环境选项
       [homes]             设置用户宿主目录共享
       [printers]           设置打印机共享
       [sharefiles]          设置文件共享

             

注意:

行前有分号“;”或“#”都表示注释,“#”表示描述注释,“;”表示配置注释(可以启用的选项)


[global]段常用选项设置:

workgroup = 指定工作组或域  # 就可以在同网段的windows主机的网上邻居上显示出该主机
server string = 描述      # 主机描述信息
;netbios name = MYSERVER   # 设置主机名

;  interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  # 监听的网卡或ip
;  hosts allow = 127. 192.168.12. 192.168.13.         # 允许访问的主机

security = 指定安全模式     # 这里指定samba的安全等级,默认即可
passdb backend = tdbsam    # 用户帐号密码保存的格式,默认即可

关于安全等级有四种:

 share:用户不需要账户及密码即可登录samba服务器

 user:由提供服务的samba服务器负责检查账户及密码(默认)

 server:由一台服务器进行集中用户认证

 domain:指定windows域控制服务器来验证用户的账户及密码。


1、samba的用户

系统用户:系统上的用户名,但密码是独立的,不是系统上用户的密码(不是/etc/shadow中的密码),而是单独访问samba的密码,和系统密码没关系

使用smbpasswd为系统用户设定访问samba的密码:

[root@Node4 ~]# smbpasswd --help
smbpasswd: invalid option -- '-'
When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -L                   local mode (must be first option)
  -h                   print this usage message
  -s                   use stdin for password prompt
  -c smb.conf file     Use the given path to the smb.conf file 
  -D LEVEL             debug level
  -r MACHINE           remote machine
  -U USER              remote username
extra options when run by root or in local mode:
  -a                   add user
  -d                   disable user      # 禁用
  -e                   enable user       # 启用用户
  -i                   interdomain trust account
  -m                   machine trust account
  -n                   set no password   # 设置空密码
  -W                   use stdin ldap admin password
  -w PASSWORD          ldap admin password
  -x                   delete user
  -R ORDER             name resolve order
  
  
[root@Node4 ~]# smbpasswd -a xj
New SMB password:
Retype new SMB password:
Added user xj.


2、共享文件的设置

直接添加在配置文件smb.conf文件最后即可:

[myshared]                      # 共享名,可不写
   comment = shared files       # 描述(注释)信息
   path = /share/test           # 共享文件的路径
   writable = yes               # 可写
   write list = USERNAME        # 可写的用户列表,多个用户使用逗号分隔,用户名全使用+或@表示该组的用户都可写;不和上一个选项一起使用,
   public|guest ok  = yes       #  用户能否访问没权限的文件
   browseable = no              # 无权限共享目录隐藏
   writable = yes 和read only = yes # 都是只读的信息
      valid users =        # 指定访问用户


3、samba的linux客户端使用

安装交互式客户端smbclient:

[root@Node5 ~]# yum install smbclient

Dependencies Resolved

==========================================================================================================
 Package                          Arch              Version                      Repository          Size
==========================================================================================================
Installing:
 samba-client                     x86_64            3.6.23-36.el6_8              updates             11 M
Installing for dependencies:
 libtalloc                        x86_64            2.1.5-1.el6_7                base                26 k
 libtevent                        x86_64            0.9.26-2.el6_7               base                29 k
 samba-common                     x86_64            3.6.23-36.el6_8              updates             10 M
 samba-winbind                    x86_64            3.6.23-36.el6_8              updates            2.2 M
 samba-winbind-clients            x86_64            3.6.23-36.el6_8              updates            2.0 M

Transaction Summary
==========================================================================================================
Install       6 Package(s)

smbclient使用:

[root@Node5 ~]# smbclient -L 192.168.10.4        # 检查服务器上的共享
Enter root's password: 
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]

	Sharename       Type      Comment
	---------       ----      -------
	myshared        Disk      shared files
	IPC$            IPC       IPC Service (Samba Server Version 3.6.23-36.el6_8)
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]

	Server               Comment
	---------            -------
	NODE4                Samba Server Version 3.6.23-36.el6_8
	XJ-PC                

	Workgroup            Master
	---------            -------
	WORKGROUP            XJ-PC
	
[root@Node5 ~]# smbclient //192.168.10.4/myshared -U xn    # 这里用的是共享的文件名
Enter xn's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> ?
?              allinfo        altname        archive        blocksize      
cancel         case_sensitive cd             chmod          chown          
close          del            dir            du             echo           
exit           get            getfacl        geteas         hardlink       
help           history        iosize         lcd            link           
lock           lowercase      ls             l              mask           
md             mget           mkdir          more           mput           
newer          open           posix          posix_encrypt  posix_open     
posix_mkdir    posix_rmdir    posix_unlink   print          prompt         
put            pwd            q              queue          quit           
readlink       rd             recurse        reget          rename         
reput          rm             rmdir          showacls       setea          
setmode        stat           symlink        tar            tarmode        
timeout        translate      unlock         volume         vuid           
wdel           logon          listconnect    showconnect    ..             
!

smbclient -L [//]SERVER [-U USERNAME]        # 检查服务器上的共享
 smbclient //SERVER/SHARED -U USERNAME 
 testparm    # 测试配置文件语法,并显示最终生效的配置

客户端挂载使用:

mount -t cifs //server/shared /path/to/mount_point -o username=smbuser
 
  
[root@Node5 ~]# mount -t cifs //192.168.10.4/myshared /samba -o username=xn,passwd=11
[root@Node5 ~]# ls /samba
haha  issue

开机自动挂载:   # 不需要安装任何客户端工具

//192.168.10.4/myshared   /samba                  cifs  defaults,username=xn,password=11       0 0


四、samba-swat

  samba-swat是samba的GUI配置工具:

[root@Node4 src]# yum install samba-swat

[root@Node4 src]# rpm -ql samba-swat
/etc/xinetd.d/swat
/usr/lib64/samba/de.msg
/usr/lib64/samba/en.msg
/usr/lib64/samba/fi.msg
/usr/lib64/samba/fr.msg
/usr/lib64/samba/it.msg
/usr/lib64/samba/ja.msg
/usr/lib64/samba/nl.msg
/usr/lib64/samba/pl.msg
/usr/lib64/samba/ru.msg
/usr/lib64/samba/tr.msg
/usr/sbin/swat
/usr/share/man/man8/swat.8.gz
/usr/share/swat
/usr/share/swat/help
/usr/share/swat/help/Samba3-ByExample

配置:

[root@Node4 src]# cat /etc/xinetd.d/swat 
# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \
#	       to configure your Samba server. To use SWAT, \
#	       connect to port 901 with your favorite web browser.
service swat
{
	disable	= no
	port		= 901
	socket_type	= stream
	wait 		= no
	only_from 	= 192.168.10.0/24
	user		= root
	server		= /usr/sbin/swat
	log_on_failure	+= USERID
}

使用浏览器访问:


samba解析 wins samba详解_ldap

   

注意:

   使用系统帐号、密码登录即可,

   在swat中配置,会直接修改/etc/samba/smb.conf文件,而且会干掉所有的注释信息,建议备份原始的配置文件


练习:

  创建一个共享,符合以下要求:

     1、仅允许192.168.10.0/24和172.16.11.0/24网络中的主机访问

     2、共享名为myshared

     3、允许mygroup组中用户执行写入操作

     4、允许来宾用户访问