Samba简介:

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


重置虚拟机:
IP----172.25.254.137
hostname:samba.example.com
指定yum source

samba服务:
windows作为客户端访问linux的共享文件针对企业内部网中的绝大部分客户及采用Windows的情况,我们可以通过使用samba来实现文件服务器功能

   Samba的服务器程序可以实现以下主要功能: 
  
    ◆ 文件及打印共享; 
    ◆ 计算机名与IP的解悉; 
    ◆ WINS服务的支持; 
    ◆ 用户权限设置(如果配合Linux 的Quota还可以实现用户磁盘空间配额)。



windows共享出去了文件,即为server端
linux如何查看windows的共享文件:
yum install samba-client -y                ##安装samba服务的客户端软件##
smbcliet -L //server端IP -U usersname            ##查看server端共享了什么

mount //server端IP/共享文件 /挂载目录 username=guest            ##挂载后使用##

linux共享出去了文件,即为server端(windows做为客户端访问linux的共享文件):
yum samba samba-common sam-cient -y    ##安装相关软件包##
systemctl start smb    ##开启smb服务##
netstat -antple | grep smb    ##查看smb的端口##
systemctl stop firewalld    ##关闭火墙##
setsebool -P samba_enble_home_dirs on        ##修改selinux属性,打开samba访问节目录的权限##

注意:samba用户和系统用户不是同一个,samba用户必须添加,而且要添加的用户在系统中也必须真实存在。(所谓的samba用户都是指服务端的)
smbpasswd -a student    ##添加samba用户##
pdbedit L    ##列出samba用户##
pdbedit -x student    ##删除samba用户##

linux作为服务器共享了文件,linux也可以访问:
yum install samba-client -y     ##安装samba-client软件包
smbclient -L //172.25.254.137 -U student    ##查看服务端的student用户有什么##
smbclient //172.25.254.137/student -U student    ##登陆并进入student用户家目录##

实际操作:

[root@samba ~]# systemctl start smb    ##开启smb服务##
[root@samba ~]# systemctl stop firewalld.service    ##关闭火墙##
[root@samba ~]# setsebool -P samba_enable_home_dirs on  ##修改selinux属性##
[root@samba ~]# smbpasswd -a student    ##建立samba用户student##
New SMB password:    ##输入密码##
Retype new SMB password:    ##确认密码##
Added user student.
[root@samba ~]# pdbedit -L    ##列出samba用户##
student:1000:Student User
[root@samba ~]# smbclient -L //172.25.254.137 -U student ##查看student用户的共享文件有什么##
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 4.1.1)
        student         Disk      Home Directories
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]

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

        Workgroup            Master
        ---------            -------
[root@samba ~]# smbclient //172.25.254.137/student -U student    ##登陆进入student用户家目录##
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls    ##列出当前目录##
  .                                   D        0  Thu Jul 10 19:06:52 2014
  ..                                  D        0  Thu Jul 10 18:19:09 2014
  .bash_logout                        H       18  Wed Jan 29 07:45:18 2014
  .bash_profile                       H      193  Wed Jan 29 07:45:18 2014
  .bashrc                             H      231  Wed Jan 29 07:45:18 2014
  .ssh                               DH        0  Thu Jul 10 18:19:10 2014
  .config                            DH        0  Thu Jul 10 19:06:53 2014

                40913 blocks of size 262144. 28512 blocks available
smb: \> quit    ##退出(exit或者Ctrl+D也可以退出)##

补充命令:
getsebool -a | grep samba    ##查看samba服务相关的selinux属性##

samba的配置文件:/etc/samba/amb.conf

工作组的修改:

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

 89         workgroup = westos
[root@samba ~]# systemctl restart smb


效果如下:Domain=[WESTOS] 即为参数修改处

[root@samba ~]# smbclient -L //172.25.254.137 -U student
Enter student's password: 
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]

    Sharename       Type      Comment
    ---------       ----      -------
    westos          Disk      local directory westos
    linux           Disk      local directory linux
    IPC$            IPC       IPC Service (Samba Server Version 4.1.1)
    student         Disk      Home Directories
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]

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

    Workgroup            Master
    ---------            -------


samba共享目录:
假设要共享目录/westos(/westos目录要先存在)
vim /etc/samba/smb.cnf        ##修改samba服务的配置文件##
    [共享名称]
    comment = 共享说明
    path = 共享目录路径
例如:

[root@samba ~]# vim /etc/samba/smb.conf
    [westos]
    comment = local directory westos
    path = /westos
[root@samba ~]# systemctl restart smb        ##重启samba服务##


修改selinux:

只针对单一目录:
semanage fcontext -a -t samba_share_t '/westos(/.*)?'      #修个目录安全上下文#
restorecon -FvvR /westos/    #刷新该目录的selinux属性#

针对所有目录:
setsebool -P samba export all rw on    ##开放读写权限##
setsebool -P samba export all ro on    ##开启只读权限##
共享系统建立目录修改selinux属性,该操作针对所有目录,一旦开放selinux不保护目录访问




课堂实践:

[root@samba ~]# mkdir /westos
[root@samba ~]# mkdir /linux
[root@samba ~]# vim /etc/samba/smb.conf 
[root@samba ~]# tail -n 3 /etc/samba/smb.conf 
    [westos]
    comment = local directory westos
    path = /westos
[root@samba ~]# systemctl restart smb.service 
[root@samba ~]# semanage fcontext -a -t samba_share_t '/westos(/.*)?'
[root@samba ~]# restorecon -FvvR /westos/
restorecon reset /westos context unconfined_u:object_r:default_t:s0->system_u:object_r:default_t:s0
[root@samba ~]# smbclient //172.25.254.137/westos -U student
Enter student's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
  .                                   D        0  Fri Mar 17 22:17:15 2017
  ..                                  D        0  Fri Mar 17 22:17:19 2017

        40913 blocks of size 262144. 28482 blocks available
smb: \> quit
[root@samba ~]# !vim
vim /etc/samba/smb.conf 
[root@samba ~]# tail -n 3 /etc/samba/smb.conf 
    [linux]
    comment = local directory linux
    path = /linux
[root@samba ~]# setsebool -P samba_export_all_ro on 
[root@samba ~]# smbclient //172.25.254.137/linux -U student
Enter student's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
  .                                   D        0  Fri Mar 17 22:17:19 2017
  ..                                  D        0  Fri Mar 17 22:17:19 2017

        40913 blocks of size 262144. 28512 blocks available
smb: \> quit


samba的匿名访问

[root@samba ~]# vim /etc/samba/smb.conf    ##修改samba的配置文件##
    guest ok = yes    ##匿名用户登陆访问开启##
[root@samba ~]# systemctl restart smb    ##重启samba服务##

注:配置文件不知道怎么写的时候要学会使用men 5 文件名

测试访问共享
结果:匿名用户能登陆访问,但是mount挂载不能
问题解决:
修改配置文件:map to guest = bad user     ##把所有的匿名用户映射为guest用户##

配置文件示例:

125    map to guest = bad user
……
321    [westos]
322    comment = locla directory westos
323    path = /westos
324    guest ok = yes


总结:samba匿名用户访问需要修改配置文件,samba服务的匿名用户登陆访问默认时关闭的,想要客户端匿名登陆访问就需要开启匿名用户登陆访问并把匿名用户映射为guest用户


注:配置文件修改后一定要重启服务


管理参数:配置文件中,修改哪个共享目录的管理参数就在那个目录下添加参数
writable = yes         ##用户可以使用samba这个程序执行写的动作(解决服务本身拒绝的问题)##
chmod 777 /westos    ##修改共享目录权限(解决文件系统本身拒绝的问题)##
注意:服务允许不代表文件系统也允许

writable = yes        ##任意用户可写##
write list = lee    ##指定lee用户可写##
write list = @lee    ##指定lee用户组可写(@和+效果一样)##
注:指定某个用户或某个用户组可写时需要注释掉任意用户可写

valid users = lee    ##指定lee用户可登陆##
valid users = @lee    ##指定lee用户组可写(@和+效果一样)##
browseable = no        ##隐藏共享目录(但是用户可以进入)##
admin users = lee    ##用户lee对westos有绝对的控制权,对共享目录来说lee用户相当于root用户##

samba认证:(samba认证主要在客户机操作)
yum install cifs-utils -y     ##安装软件包(不需要开启服务)
vim /root/passwdfile
    username=smb用户
    password=smb用户密码
mount //server端IP/共享目录 /挂载点 -0 credentials=/root          ##挂载共享目录## /smbpasswdfile:multiuser,sec=ntlmssp        ##挂载使用认证文件:multiuser表示多用户认证,sec=ntlmssp表示认证方式##

su - lee    ##lee与samba用户同名##
ls /mnt查看失败   
cifscreds add server端IP    ##lee用户认证samba共享系统##
ls /mnt查看成功

su - test    ##test与samba用户不同名##
ls /mnt查看失败
cifscreds add server端IP    ##test用户认证samba共享系统##

ls /mnt查看失败


cifscreds add IP     去这个IP上做认证(输入密码)
cifscreds clearall    清除所有认证

注:客户端认证时用户身份和samba用户身份一致且输入samba用户密码正确,

samba多用户认证的作用:
防止匿名用户查看
以各自的samba用户身份建立文件