smaba

简介

  • 在windows当中我们最常见的就是网上邻居可以看到同一互联网上连接的所有用户
    在服务器端,linux与window Server相比的稳定性,安全性执行效率以及性价比都是较高的。所以好多window Server下跑的一些服务都会切换到运行在linux服务上,但是对于一些桌面用户来说用到的较多的就是文件共享协议。而在linux中我们可以使用 FTP NFS这类型文件共享协议,但是对于window上比较简单的直接打开的服务在linux中的nfs协议来说是不能在window上使用的这种直接将文件系统共享出来的协议为SMB。
  • 与ftp的区别是不用将文件下载下来在使用,是直接可以在共享中打开使用的,所以说这种共享方式在使用当中是非常方便的,但是SMB是window当中的一种私有协议。即使如此在linux当也提供对SMB协议的一种支持。(虽然是window下的私有协议但是我们的开源技术团队为我们的linux也提供了这种服务称为samba服务,在开发过程中也是相当的艰苦 ,由于在window下是闭源的所以开发者是通过抓包分析window下所产生的数据包来实现的。弄清楚它的一个原理。)
  • SMB(Server Message block)协议是window下所使用的文件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。
Samba主要功能
  1. 通过SMB协议进行文件共享
  2. 通过SMB协议进行打印共享(我们可以通过在linux上通过smb配置打印服务器,为window提供打印服务)
  3. 加入一个windows2000/2003/2008域环境
    (在企业环境当中应用最多,目前smb是支持这三种主流的window服务操作系统的,好多企业当中整个的企业环境当中是使用window的域环境进行管理的,而所有的用户组,权限,组策略信息都是在window域环境进行配置的,那么但是我们的企业又想把一些应用服务和需要用到的一些域环境进行认证或者是做权限控制的这些应用服务去切换到linux系统当中,那在这种情况下就涉及到我如何和window下的这些域环境进行兼容,那么smb是可以加入window域环境当中,并且是可以和window下的这些域环境进行认证操作的。所以smb这个协议是相当强大的不仅限于只是实现文件共享)
  4. 通过windows域环境进行认证操作。
    SMB协议又称为CIFS(Common Internet File System)协议
安装Samba

Yum install samba -y

  • Samba拥有两个主服务(相关服务),对于一般使用的服务他只有一个主服务
  1. smbd (提供samba核心功能也是使用最多的一种功能) 提供文件及打印共享服务功能,使用139/445端口
  2. nmbd 提供Netbios(解析协议慢慢的被淘汰)支持,使用137/138端口,而对于这种协议使用较少,现在都是dns进行解析
    一般作为文件共享使用samba,则只需要smbd服务
SAMBA配置文件
  • Samba的配置文件为/etc/samba/smb.conf
    配置文件分为三个部分:
  1. [global] 定义全局性配置(配置samba服务的相关参数)
  2. [homes] 定义对用户家目录的共享配置(其实在默认情况下不做任何设置,直接启用服务我们就可以通过smb协议访问所有用户的家目录)
  3. [printers] 定义打印机共享配置
  • 独立环境下(不和任何域环境有关系)的samba常用的global配置如下
  • SAMBA

服务:
smbd
nmbd

使用的端口:
Port 137 Used for NetBIOS network browsing
Port 138 Used for NetBIOS name service
Port 139 Used for file and printer sharing and other operations
Port 445 Used by Windows 2000/XP when NetBIOS over TCP/IP is disabled

[global]
workgroup = MYGROUP 定义该Samba服务器所在的工作组或者域(如果下面的security=domain的话)
server string = Samba Server Version %v
设定机器的描述,当我们通过网络邻居访问的时候可以在备注里面看见这个内容,而且还可以使用%v = Samba服务的版本号。
log file = /var/log/samba/log.%m 定义记录文件的位置LogFileName
max log size = 50
定义记录文件的大小size(单位是KB,如果是0的话就不限大小)
security = user
定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:

  • share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
  • user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
  • server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
  • domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
    后面三种安全级都要求用户在本Linux机器上也要系统帐户。否则是不能访问的。
    load printers = yes

[homes]
在smb.conf文件中一般没有对这个目录的设定特定内容比如路径等。当客户机发出服务请求时,就在smb.conf文件的其它部分查找友特定内容的服务。如果没有发现这些服务,并且提供了homes段时,那么就搜索密码文件得到用户的Home目录。通过Homes段,Samba可以得到用户的Home目录并使之共享。下面是这个段的最基本的几个设置。
comment = Home Directories
browseable = no
writable = yes

[printers]

comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
write list = +staff @用来指定可以在该共享下写入文件的用户
这里printable指明该打印机可以打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。

  • 主配置文件格式:
[global]                                                ###全局控制段###
    workgroup = workgroup                #工作组
   server string = Samba Server Version %v
    security = user
    encrypt passwords = yes                #密码加密
    wins support = yes                        #wins支持
    log level = 1                                 #日志级别
    max log size = 1000                        #最大日志kb
    read only = no                        #可读写
[homes]                                         #家目录
    browsable = no                                #浏览
    map archive = yes                        
[printers]                                         #打印机
    path = /var/tmp                                #指定目录
    printable = yes                                #是个打印机
    min print space = 2000                               #空间
[test]                                                       #共享的目录
    browsable = yes                                #可浏览
    read only = yes                                #只读
    path = /usr/local/samba/tmp        #共享的服务器目录

e.g.

[global]
        workgroup = workgroup
[homes]
        browseable = no
        writable = yes
[test]
        path = /share
        comment = test a directory
  • 重启服务

[root@mail samba]# systemctl restart smb
[root@mail samba]# systemctl restart nmb

  • windows系统中删除登陆缓存信息
    cmd>net use * /delete
    在window资源设备器上去访问:\192.168.0.130
    提示要账号和密码:

  • 添加samba用户
    (先useradd添加用户)

[root@localhost samba]# smbpasswd -a xixi
New SMB password:
Retype new SMB password:
Added user xixi.

  • 查看samba用户用
    #pdbedit -L
    最后看到两个目录 用户家目录 xixi test 对应得是/share
案例1
  • 要求:
    1、通过samba实现公司的文件交换服务器,
    2、实现/public 目录让所有人访问,所有人都可以写入文件

  • 配置示例:

[root@localhost samba]# cat smb.conf
[global]
        workgroup = workgroup
[public]
        path = /public
public = yes
        comment = file
writable = yes
 

注意:selinux开启的状态下,需要执行:chcon -t samba_share_t /public -R

用户控制:
public =所有用户都可以访问    /guest ok=yes/no
map to guest = Bad User        匿名访问
browseable = 可浏览(设置共享是否可游览,如果是no表示隐藏,通过ip+共享名进行访问)
valid users =        有效用户@maomao
writable = yes        可写,还要看目录权限
writable list = maomao,@GROUPNAME,+GROUPNAME
readonly = yes 只读设置
create mask = 0644 客户机创建文件权限
directory mask = 0744 客户机创建目录的权限
valid user = user1,user2,@group1//禁止登录用户,用户用逗号隔开,组用@  //禁止
invalid =             //允许访问控制
max connections = 最大连接数目
deadtime = 断掉连接时间(分钟,0为不限制
hosts allow =        允许主机
hosts deny =        拒绝主机
允许优先
案例2
  1. 通过samba提供一个公共文件服务器,所有人都可以访问并写入,但是不可以删除和修改他人的文件。
  2. 技术部需要一个文件服务器,用于存放常用的软件工具,所有人都可以访问,但是只有技术部可以写入
  3. 每个人都可以进入自己的独立家目录,别人不可以访问。
  • 配置示例:
[root@localhost ~]# cat /etc/samba/smb.conf
[global]
        workgroup = workgroup
security = user
[share]     共享名
        path = /share    共享路径
public = yes  指定该共享目录是否允许guest账户访问
        comment = file          共享目录的描述
writable = yes   该目录路径是否可写
[soft]          
        path = /soft
public = yes
        comment = soft
write list = @jishubu   (表示技术部组的人可以写添加技术部组将用户加入组,并将用户改为samba用户)
[homes]
        browsable = no
        writable = yes

[root@localhost ~]# chcon -t samba_share_t /soft
[root@localhost ~]# chcon -t samba_share_t /share
[root@localhost ~]# setsebool -P samba_export_all_rw on
注意SELINUX开启的情况下,需要执行setsebool -P samba_enable_home_dirs on 否则,用户不能进入自己的家目录

linux客户端访问
  1. 安装软件包,samba-client
    #列出服务器资源
    smbclient -L //192.168.171.143 -U xixi
    出现错误(暂时可以解决):
    protocol negotiation failed: NT_STATUS_IO_TIMEOUT
    解决办法是在客户端的/etc/hosts文件中添加客户端和服务端的地址映射
    如:
    192.168.40.131 web
    192.168.40.132 ldap

  2. 通过客户端 进入samba

[root@localhost ~]# smbclient //192.168.221.129/public -U xixi
Enter xixi’s password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
smb: > mget File 下载文件(ls showconnect)

#登陆使用资源

smbclient //192.168.171.143/share -U xixi

1.2客户端
#挂载使用资源

mount //192.168.171.143/share /share -o username=xixi,password=redhat
#自动挂载
//192.168.142.128/share /pub cifs defaults,username=xixi,password=redhat 0 0 (通用互联网文件系统)

实例

1、建立共享目录student,它的本机路径为/home/student,只有teacher组的用户可以读写该目录,student用户只能读取。

#mkdir /home/student
#groupadd students
#groupadd teacher
#useradd -g teacher user
#useradd -g teacher user
#smbpasswd -a user
#chgrp student /home/student
#chmod 757 /home/student
#chmod g+s /home/student

security=user
[student]
path=/home/student
comment=student
write list=@teahcer
valid users=@teacher @student
  1. 员工可以在公司内流动办公,无论在任何一台机器上工作,都能把自己的文件放到服务器上,同时不能使用服务器上的
>security=user
[homes]
comment=home directories
browseable=no
writeable=yes
valid user=%S   (所有员工)
  1. 公司有两个部门,sales和market,两个部门都有单独的共享目录,只可以总经理和相应部门员工访问,并且公司员工禁止访问非本部门的共享目录

#mkdir /home/sales
#mkdir /home/masket
#groupadd sales
#useradd -g sales user
#useradd -g market user
#smbpasswd -a user
#chgrp sales /home/sales
#chgrp market /home/market
#chown ceo /home/sales
#chown ceo /home/market
#chmod 770 /home/sales
#chmod 770 /home/market
#chmod g+s /home/sales
#chmod g+s /home/market

Security=user
[sales]
Path=/home/sales
Comment = sales
Wirte list =@sales ceo
Valid users=@sales ceo
Create mask=0770
Directory mask=0770
[masket]
Path=/home/market
Comment=market
Write list =@maret ceo
Valid users=@market ceo
Create mask=0770
Directory mask=0770

Multiuser机制

  • 所需软件包:cifs-utils
    手动挂载:mount //服务器地址/共享名 挂载点
    开机挂载配置/etc/fstab://服务器地址/共享名 挂载点 cifs _netdev 0 0
    _netdev:网络设备(请启动完成网络服务,再进行挂载此设备)
    cifs: samba使用的文件系统是cifs

  • Multiuser机制
    Samba的multiuser挂载技术
    Ø 管理员只需作一次挂载
    Ø 客户端在访问挂载点时,若需不同权限,可以临时切换为新的共享用户(无需重新挂载)。
    挂载参数需要添加“multiuser,sec=ntlmssp”,客户机上的普通用户可以通过cifscreds命令提交新的身份凭据。
    在客户端挂载Samba共享目录,需要软件包cifs-utils的支持。
    为访问网络资源配置开机挂载时,注意添加参数“_netdev”,表示等客户机网络配置可用以后才挂载对应资源。
    /etc/fstab挂载参数:
    //服务器地址/共享名 /挂载点 cifs username=用户名,password=密码,multiuser,sec=ntlmssp,_netdev 0 0

  • 实现方式:
    Ø 挂载smb共享时启用multiuser支持;
    Ø 使用cifscreds临时切换身份
    mount.cifs挂载参数调整
    Ø multiuser,提供对客户端多个用户身份的区分支持
    Ø sec=ntlmssp,提供NT局域网管理安全支持
    多用户挂载参数:multiuser,sec=ntlmssp,_netdev
    客户机多用户测试,切换共享用户身份
    Ø 在客户端以普通用户登入 :#su - 普通用户
    Ø 使用cifscreds提交新的用户凭据并测试:
    cifscreds add|update -u 共享用户名 服务器地址

附件练习

多用户挂载的验证策略
提权
再服务器上通过SMB共享目录/devops,并满足以下要求

  1. 共享名为devops
  2. 共享目录devops只能被192.168.171.0网段中的客户端使用
  3. 共享目录devops必须可以被浏览
  4. 用户xixi必须能以读的方式访问此共享,访问密码是xixi
  5. 用户maomao必须能以读写的方式访问此共享,访问密码是maomao
    此共享永久挂载在192.168.171.144上的/mnt/dev/目录,并使用用户xixi作为认证任何用户可以通过用户maomao来临时获取写的权限
  • 服务端:

mkdir /devops
chmod o+w /devops
vi /etc/samba/smb.conf

[devops]
path = /devops
hosts all = 192.168.171.
browseable = yes
writable = no
write list = maomao

smbpasswd -a xixi
smbpasswd -a maomao
systemctl restart smb nmb

  • 客户端

yum install cifs-*
mkdir /mnt/dev
smbclient -L //192.168.171.143/ -U xixi
vi /etc/fstab 自动挂载

//192.168.171.143/devops                /mnt/dev                cifs        defaults,multiuser,username=xixi,password=xixi,sec=ntlmssp  0 0

mount -a 重新挂载
su - maomao
cifscreds add sta1
umount /mnt/dev
su - xixi
cifscreds add sta1 -u maomao

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值