运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)

前言

1、Samba 概述

Samba 最先在Linux和Windous两个平台之间架起一座桥梁,正式由于Samba的出现,我们可以在Linux系统和Windows系统之间互相通信,比如拷贝文件、实现不同操作系统之间的资源共享等等,我们可以将其架设成一个功能非常强大的文件共享服务器,也可以将其架设成打印服务器提供本地和远程联机打印。

2、Samba 应用环境
  • 文件和打印机共享:文件和打印机共享是Samba的主要功能,SMB 进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问;
  • 身份验证和权限设置:smbd服务支持user mode 和domain mode 等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机;
  • 名称解析:Samaba 通过nmbd 服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址;
  • 浏览服务:局域网中,Samba 服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源;

一、Samba 服务器部署

1、samba 服务器安装
[root@localhost ~]# yum install -y samba
2、关闭selinux和防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce 
Permissive
3、修改Samba配置文件
[root@localhost ~]# vim /etc/samba/smb.conf

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]											///全局配置
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]												///共享打印机服务
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775
4、启动samba服务
[root@localhost ~]# systemctl start smb
5、使用Windows客户端访问共享目录

PS:此时没有配置登录用户和密码,尚不能登录
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第1张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第2张图片


二、企业案例实战

案例一:匿名用户访问

公司现在用一个工作组 VillianTsang,需要部署 samba 服务器作为文件共享服务器,并发布共享目录/share,共享名为public,这个共享目录允许所有公司员工访问
1、创建共享目录,并设置权限
[root@localhost ~]# mkdir /share				///创建共享目录
[root@localhost ~]# chmod 777 /share			///给予/share 777 可读可写可执行权限
[root@localhost ~]# touch villian.txt			///共享目录写入测试文件
2、修改samba配置文件
[root@localhost ~]# vim /etc/samba/smb.conf

[global]														///修改全局配置
        workgroup = VillianTsang								///修改工作组
        map to guest = bad user									///支持匿名共享(samba4以上版本)
        server string = This is VillianTsang directory			///修改文件目录描述

[public]														///在配置文件末尾添加共享目录
        comment = This is a Shared villiantsang directory		///文件目录描述
        path = /share											///共享文件目录绝对路径
        public = yes											///支持匿名访问
        browsable = yes											///可浏览 
3、重启samba服务
[root@localhost ~]# systemctl restart smb
4、使用Windows客户端访问共享目录(免密匿名登录)

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第3张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第4张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第5张图片


案例二:指定部门用户访问

创建销售部共享目录。通过用户名和密码共享文件,把/xsb 目录共享出去,只有知道用户名和密码的销售部同事才可以查看这个共享目录,其他部门无法访问

1、修改samba全局配置文件
[global]
        workgroup = SAMBA
        security = user								///修改为user,需要使用用户名访问
        passdb backend = smbpasswd					///密码文本名
        smb passwd file = /etc/samba/smbpasswd		///密码文本存放位置
2、重启samba服务
[root@localhost ~]# systemctl restart smb
3、查看密码文件是否生成
[root@localhost ~]# ls /etc/samba/
lmhosts  smb.conf  smb.conf.example  smbpasswd		///smbpassword密码文本自动生成
4、添加销售部用户和组
[root@localhost ~]# groupadd xsb										///创建销售部组
[root@localhost ~]# useradd -g xsb zhangshan -M -s /sbin/nologin  		///创建销售部张三用户 
[root@localhost ~]# useradd -g xsb wangwu -M -s /sbin/nologin 			///创建销售部王五用户

[root@localhost ~]# id wangwu											///查看用户的id信息
uid=1005(wangwu) gid=1004(xsb)=1004(xsb)
[root@localhost ~]# id zhangshan
uid=1004(zhangshan) gid=1004(xsb)=1004(xsb)
5、添加销售部的samba账号
  • 添加用户和密码
[root@localhost ~]# smbpasswd -a zhangshan				///将销售部张三用户添加至samba中,并设置密码
New SMB password:
Retype new SMB password:
Added user zhangshan.
[root@localhost ~]# smbpasswd -a wangwu
New SMB password:
Retype new SMB password:
Added user wangwu.
  • 查看密码文本是否生成内容
[root@localhost ~]# cat /etc/samba/smbpasswd 
zhangshan:1004:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U   ]:LCT-5E42242C:
wangwu:1005:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U      ]:LCT-5E422437:
6、创建销售部共享目录,并设置权限
[root@localhost ~]# mkdir /xsb
[root@localhost ~]# chmod 777 /xsb		
[root@localhost ~]# vim xsb.txt
hello world
7、修改配置文件,指定共享目录,设置访问权限
[xsb]
        comment = This is xsb directory
        path = /xsb
        valid users = @xsb
8、重启samba服务
[root@localhost ~]# systemctl restart smb
9、使用Windows客户端访问共享目录(使用销售部用户+密码访问)

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第6张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第7张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第8张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第9张图片


案例三:禁止部门某些用户访问

PS1、隐藏共享目录

browseable = no
这样用户访问共享目录后看不到对目录,需要写入目录的绝对URL进行访问

PS2、控制访问源

hosts allow = 192.168.182.:允许192.168.182.0/24这个网段的IP访问
hosts deny = 192.168.182.12:禁止192.168.182.12这个IP访问

  • hosts allow 字段定义允许访问的客户端(同时设置的时候,允许级别高于禁止级别)
  • hosts deny 字段定义禁止访问的客户端
  • EXCPT + IP (除了某IP,常用策略)

例:同案例二方案,同时设置禁止192.168.1.0/24网段的IP访问

1、修改samba全局配置文件
[xsb]
        comment = This is xsb directory
        path = /xsb
        valid users = @xsb
        writable = yes							///允许写入
        write list = zhangshan 					///写入权限用户 
        hosts deny = 192.168.182.				///禁止网段192.168.182.用户访问
        browseable = no							///隐藏共享目录,需要输入绝对路径才能访问		
2、重启samba服务
[root@localhost ~]# systemctl restart smb
3、使用Windows客户端访问共享目录

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第10张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第11张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第12张图片


三、账号映射

samba的用户账号信息是保存在smbpasswd文件中,而且可以访问samba服务器的账号也必须对应一个同名的系统账号。基于这一点,对于黑客而言,只要知道samba服务器的账号,就等于知道了Linux系统账号,只要破解其samba账号密码加以利用就可以攻击samba服务器。基于这样一点,我们可以利用用户账号映射功能来解决。

1、修改samba全局配置文件
[root@localhost ~]# vim /etc/samba/smb.conf

username map = /etc/samba/smbusers				///在全局配置中加入这一行
2、配置samba共享配置文件
[root@localhost ~]# vim /etc/samba/smb.conf

[xsb]
        comment = This is xsb directory			
        path = /xsb								///共享目录
        valid users = @xsb						///允许用户(销售部)
        writable = yes							///允许写入信息
        write list = @xsb						///写入用户清单(同上)
        public = no								///否公开共享目录
3、创建smbusers文本
[root@localhost ~]# vim /etc/samba/smbusers

villian = zhangshan lisi wangwu zhaoliu			///将villian用户的账号映射给张三、李四、王五、赵六
4、创建villian用户账号,给予映射
[root@localhost ~]# smbpasswd -a villian
New SMB password:
Retype new SMB password:
5、重启samba服务
[root@localhost ~]# systemctl restart smb
6、使用Windows客户端访问共享目录

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第13张图片

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第14张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第15张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第16张图片


拓展1:pdbedit 命令说明

pdbedit命令用于管理Samba服务的帐户信息数据库,格式为:"pdbedit [选项] 帐户"
第一次把用户信息写入到数据库时需要使用-a参数,以后修改用户密码、删除用户等等操作就不再需要了。

pdbedit -L :查看samba用户
pdbedit -a -u user:添加samba用户
pdbedit -r -u user:修改samba用户信息
pdbedit -x -u user:删除samba用户
 
samba服务数据库的密码也可以用 smbpasswd 命令 操作
smbpasswd -a user:添加一个samba用户
smbpasswd -d user:禁用一个samba用户
smbpasswd -e user:恢复一个samba用户
smbpasswd -x user:删除一个samba用户

拓展2:清除登录缓存信息

运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第17张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第18张图片
运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)_第19张图片

你可能感兴趣的:(Linux,系统服务)