1.samba简介 samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,有服务器及客户端程序构成
进过我们了解了NFS服务后,其实NFS和samba一样的,就是在网络中实现文件共享的一种实现,但二者有着略微不同,NFS服务其不支持windows平台,而本章介绍的是samba服务是能够在任何SMB协议的主机之间共享文件的一种实现,当然包括windows。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。 SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。


2.samba监听端口有:

TCP UDP
139 137
445 138

TCP端口相对应的服务是samba服务,其作用是提供对服务器中文件、打印资源的共享访问。 UDP端口相对应的服务是nmbad服务,其作用是提供基于NetBIOS主机名称的解析


3.samba进程:

进程 对应的协议
nmbd 对应netbios协议
smbd 对应cifs协议
winbindd + ldap 对应Windows AD 活动目录

4.samba用户:

账号 密码
都是系统用户 samba服务自有密码文件
/etc/passwd 通过smbpasswd -a USERNAME命令设置

5.samba安全级别 samba服务器的安全级别有三个,分别是user, server, domain

安全级别 作用
user 基于本地的验证
server 由另一台指定的服务器对用户身份进行认证
domain 由域控进行身份验证

以前的samba版本支持的安全级别有四个,分别是share,user,server,domain
share是用来设置匿名访问的,但现在的版本已经不支持share了,但是还是可以实现匿名访问的,只是配置方式变了。


6.samba 配置文件 /etc/samba/smb.conf (主配置文件)

samba三大组成 作用
【global】 全局配置,此处的设置项对整个samba服务器都有效
【homes】 宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中
【printers】 打印机共享设置

常用配置文件参数:

参数 作用
workgroup 表示设置工作组名称
server string 表示描述samba服务器
security 表示设置安全级别,其值可为share、user、server、domain
passdbackend 表示设置共享账户文件的类型,其值可为tdbsam (tbd数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件)
comment 表示设置对应共享目录的注释,说明信息,即文件共享名
browseable 表示设置共享是否可见
writable 表示设置目录是否可写
path 表示共享目录的路径
guest ok 表示设置是否所有人均可访问共享目录
public 表示设置是否允许匿名用户访问
write list 表示设置允许写的用户和组,组要用@表示,例如 write = root,@root
valid users 设置可以访问的用户和组,例如 valid users = root,@root
hosts deny 设置拒绝哪台主机访问,例如 hosts deny = 192.168.209.12
hosts allow 设置允许哪台主机访问,例如 hosts deny = 192.168.209.13
printable 表示设置是否为打印机

//测试配置文件是否有语法错误,以及显示最终生效的配置:使用testparm命令

[root@lanzhiyong ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[lan]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions


7.samba访问 环境说明:

服务器IP 客户机IP
192.168.209.12 192.168.209.13

//交互式数据访问 (有两种访问模式),查看samba服务器有哪些共享资源

smbclient  -L  HOST  -U   USERNAME
			例如:[root@lan ~]# smbclient -L 192.168.209.12 -U lan
Enter SAMBA\lan's password: 
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        lan             Disk      lan
        IPC$            IPC       IPC Service (Samba 4.6.2)
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------  
				
			
smbclient    //SERVER/share_name   -U  USARENAME
			例如:[root@lan ~]# smbclient //192.168.209.12/lan  -U lan
Enter SAMBA\lan's password: 
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                                   D        0  Mon Aug  6 16:10:26 2018
  ..                                  D        0  Mon Aug  6 15:53:39 2018
  9999                                D        0  Mon Aug  6 16:10:22 2018
  8888                                D        0  Mon Aug  6 16:10:26 2018

                17811456 blocks of size 1024. 8041628 blocks available
smb: \> quit     //quit退出
-----

8.实例 (配置用户认证共享,就是指定用户登入密码才能访问共享资源)
       前提是在服务器端和客户端在关闭防火墙的情况下才能实现共享目录。服务器端IP:192.168.209.12      客户端IP:192.168.209.13

    在服务器端做以下操作:
	```
	//使用yum命令安装samba-*
		[root@lanzhiyong ~]# yum install -y samba-* 
		//映射共享目录
		//创建用lan
		[root@lanzhiyong ~]# useradd -M lan 
		
		//为lan用户创建smb共享密码:
		[root@lanzhiyong ~]# smbpasswd -a lan
		New SMB password:           //设置密码
    Retype new SMB password:
		```
		//假设这里映射lan 用户为share 用户,那么就要在/etc/samba/smbusers文件中添加如下内容:
		```
		[root@lanzhiyong ~]# echo 'lan = share' > /etc/samba/smbusers
		
		//在全局配置中添加如下内容:
	   	[root@lanzhiyong ~]# vim /etc/samba/smb.conf 
           [global]
           workgroup = SAMBA
           security = user
           username map = /etc/samba/smbusers      //添加此行内容
           passdb backend = tdbsam

	      //创建一个共享目录lanzhiyong
          [root@lanzhiyong ~]# mkdir /opt/lanzhiyong
          [root@lanzhiyong ~]# chown -R lan.lan /opt/lanzhiyong/
	      [root@lanzhiyong ~]# ls -ld /opt/lanzhiyong/
        drwxr-xr-x. 4 lan lan 30 8月   6 16:10 /opt/lanzhiyong/
		```
	    	//配置共享
				```
       [root@lanzhiyong ~]# cat >> /etc/samba/smb.conf <<EOF
       [lan]
       comment = lan
       path = /opt/lanzhiyong
       browseable = yes
       guest ok = yes
       writable = yes
       write list = share
       public = yes
			 
       [root@lanzhiyong ~]# tail -8 /etc/samba/smb.conf  
       [lan]
       comment = lan
       path = /opt/lanzhiyong
       browseable = yes
       guest ok = yes
       writable = yes
       write list = share
       public = yes
		```
		```
	  //启动smb服务
		[root@lanzhiyong ~]# systemctl start smb 
		
		//重启smb服务
		[root@lanzhiyong ~]# systemctl restart smb   
		
		//重新加载smb服务
		[root@lanzhiyong ~]# systemctl reload smb
		
	  //设置smb服务随系统启动而启动
		[root@lanzhiyong ~]# systemctl enable smbc 
		```
		
		***		//在客户端先安装samba-smbclient
		[root@lan ~]# yum install -y samba-client 
		
		//在客户端查看samba服务器有哪些共享资源
	  [root@lan ~]# smbclient -L 192.168.209.12 -U share
     Enter SAMBA\share's password: 
		 ```
     Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        lan             Disk      lan
        IPC$            IPC       IPC Service (Samba 4.6.2)
       Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
			
			
    //创建需要在客户端挂载到哪个目录下          
    [root@lan ~]# mkdir /opt/smb

    //将samba服务器的共享资源lan挂载到客户机本地
    [root@lan ~]# mount -t cifs //192.168.209.12/lan /opt/smb/ -o         username=share,password=redhat
    [root@lan ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  9.4G  7.7G   55% /
devtmpfs                 478M     0  478M    0% /dev
tmpfs                    489M     0  489M    0% /dev/shm
tmpfs                    489M  6.8M  482M    2% /run
tmpfs                    489M     0  489M    0% /sys/fs/cgroup
/dev/sda1               1014M  125M  890M   13% /boot
tmpfs                     98M     0   98M    0% /run/user/0
//192.168.209.12/lan      17G  9.4G  7.7G   55% /opt/smb

//在客户机上进行共享目录创建新文件 [root@lan ~]# cd /opt/smb/ [root@lan smb]# touch 8888 [root@lan smb]# mkdir 9999 [root@lan smb]# ls 8888 9999

//最后到服务器端上验证:
	
		```
      [root@lanzhiyong lan]# cd /opt/lanzhiyong/
      [root@lanzhiyong lanzhiyong]# ls
      8888  9999 
		
		```
		
	

-----


	
  9.实例  (配置匿名共享,就是不需要密码都可以访问共享资源)
     前提是在服务器端和客户端在关闭防火墙的情况下才能实现共享目录。服务器端IP:192.168.209.12      客户端IP:192.168.209.13
		先在服务器端:

		//使用yum命令安装samba服务器
		[root@lanzhiyong ~]# yum install -y samba-* 
		
		//在全局配置中添加如下内容:
		[root@lanzhiyong ~]# vim /etc/samba/smb.conf 
		[global]
        workgroup = SAMBA
        security = user
        map to guest =  Bad User      //添加此行内容
		
		//创建一个共享目录lanzhiyong
         [root@lanzhiyong ~]# mkdir /opt/lanzhiyong
		 [root@lanzhiyong ~]# chmod -R 777 /opt/lanzhiyong/ 
		 [root@lanzhiyong ~]# ll -ld /opt/lanzhiyong/      
        drwxrwxrwx. 4 lan lan 30 8月   6 16:10 /opt/lanzhiyong/
		 
		//配置共享
      [root@lanzhiyong ~]# cat >> /etc/samba/smb.conf <<EOF
	  [lanzhiyong]
      comment = lanzhiyong
      path = /opt/lanzhiyong
      browseable = yes
      guest ok = yes
      writable = yes
      public = yes
      EOF
	  [root@lanzhiyong ~]# tail -7 /etc/samba/smb.conf
	  [lanzhiyong]
      comment = lanzhiyong
      path = /opt/lanzhiyong
      browseable = yes
      guest ok = yes
      writable = yes
      public = yes
			
      	//启动smb服务
	     [root@lanzhiyong ~]# systemctl start smb 
			
		在客户端做以下操作:
		//在客户端先安装samba-smbclient
		 [root@lanzhiyong ~]#yum install -y samba-client 
					
		//在客户端查看samba服务器有哪些共享资源
    	[root@lanzhiyong ~]#smbclient -L 192.168.209.12 -U 'Bad User'
		 Enter SAMBA\Bad User's password: 
         Anonymous login successful
        OS=[Windows 6.1] Server=[Samba 4.6.2]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        lan             Disk      lan
        IPC$            IPC       IPC Service (Samba 4.6.2)
        Anonymous login successful
       OS=[Windows 6.1] Server=[Samba 4.6.2]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
	
		
		
		
   //将samba服务器的共享资源lan挂载到客户机本地
	 
	[root@lan ~]# mount -t cifs //192.168.209.12/lanzhiyong /opt/smb/ -o username=share,password=redhat
	[root@lan ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   17G  9.4G  7.7G   55% /
    devtmpfs                 478M     0  478M    0% /dev
    tmpfs                    489M     0  489M    0% /dev/shm
    tmpfs                    489M  6.8M  482M    2% /run
    tmpfs                    489M     0  489M    0% /sys/fs/cgroup
    /dev/sda1               1014M  125M  890M   13% /boot
    tmpfs                     98M     0   98M    0% /run/user/0
    //192.168.209.12/lanzhiyong     17G  9.4G  7.7G   55% /opt/smb

		//在客户机上进行共享目录创建新文件
		[root@lan ~]# cd /opt/smb/
		[root@lan smb]# touch 123
		[root@lan smb]# mkdir 123123123
		[root@lan smb]# ls
        123  123123123
	   	
		
		//到服务器端上验证:
	   [root@lanzhiyong ~]# cd /opt/lanzhiyong/
       [root@lanzhiyong lanzhiyong]# ls
       123  123123123