运维之道 | Samba 文件共享传输服务(匿名用户访问、指定用户访问、共享账号映射访问)
程序员文章站
2024-01-26 22:50:04
...
前言
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 服务器安装
[aaa@qq.com ~]# yum install -y samba
2、关闭selinux和防火墙
[aaa@qq.com ~]# systemctl stop firewalld
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# getenforce
Permissive
3、修改Samba配置文件
[aaa@qq.com ~]# 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服务
[aaa@qq.com ~]# systemctl start smb
5、使用Windows客户端访问共享目录
PS:此时没有配置登录用户和密码,尚不能登录
二、企业案例实战
案例一:匿名用户访问
公司现在用一个工作组 VillianTsang,需要部署 samba 服务器作为文件共享服务器,并发布共享目录/share,共享名为public,这个共享目录允许所有公司员工访问
1、创建共享目录,并设置权限
[aaa@qq.com ~]# mkdir /share ///创建共享目录
[aaa@qq.com ~]# chmod 777 /share ///给予/share 777 可读可写可执行权限
[aaa@qq.com ~]# touch villian.txt ///共享目录写入测试文件
2、修改samba配置文件
[aaa@qq.com ~]# 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服务
[aaa@qq.com ~]# systemctl restart smb
4、使用Windows客户端访问共享目录(免密匿名登录)
案例二:指定部门用户访问
创建销售部共享目录。通过用户名和密码共享文件,把/xsb 目录共享出去,只有知道用户名和密码的销售部同事才可以查看这个共享目录,其他部门无法访问
1、修改samba全局配置文件
[global]
workgroup = SAMBA
security = user ///修改为user,需要使用用户名访问
passdb backend = smbpasswd ///密码文本名
smb passwd file = /etc/samba/smbpasswd ///密码文本存放位置
2、重启samba服务
[aaa@qq.com ~]# systemctl restart smb
3、查看密码文件是否生成
[aaa@qq.com ~]# ls /etc/samba/
lmhosts smb.conf smb.conf.example smbpasswd ///smbpassword密码文本自动生成
4、添加销售部用户和组
[aaa@qq.com ~]# groupadd xsb ///创建销售部组
[aaa@qq.com ~]# useradd -g xsb zhangshan -M -s /sbin/nologin ///创建销售部张三用户
[aaa@qq.com ~]# useradd -g xsb wangwu -M -s /sbin/nologin ///创建销售部王五用户
[aaa@qq.com ~]# id wangwu ///查看用户的id信息
uid=1005(wangwu) gid=1004(xsb) 组=1004(xsb)
[aaa@qq.com ~]# id zhangshan
uid=1004(zhangshan) gid=1004(xsb) 组=1004(xsb)
5、添加销售部的samba账号
- 添加用户和密码
[aaa@qq.com ~]# smbpasswd -a zhangshan ///将销售部张三用户添加至samba中,并设置密码
New SMB password:
Retype new SMB password:
Added user zhangshan.
[aaa@qq.com ~]# smbpasswd -a wangwu
New SMB password:
Retype new SMB password:
Added user wangwu.
- 查看密码文本是否生成内容
[aaa@qq.com ~]# cat /etc/samba/smbpasswd
zhangshan:1004:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U ]:LCT-5E42242C:
wangwu:1005:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U ]:LCT-5E422437:
6、创建销售部共享目录,并设置权限
[aaa@qq.com ~]# mkdir /xsb
[aaa@qq.com ~]# chmod 777 /xsb
[aaa@qq.com ~]# vim xsb.txt
hello world
7、修改配置文件,指定共享目录,设置访问权限
[xsb]
comment = This is xsb directory
path = /xsb
valid users = @xsb
8、重启samba服务
[aaa@qq.com ~]# systemctl restart smb
9、使用Windows客户端访问共享目录(使用销售部用户+密码访问)
案例三:禁止部门某些用户访问
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服务
[aaa@qq.com ~]# systemctl restart smb
3、使用Windows客户端访问共享目录
三、账号映射
samba的用户账号信息是保存在smbpasswd文件中,而且可以访问samba服务器的账号也必须对应一个同名的系统账号。基于这一点,对于黑客而言,只要知道samba服务器的账号,就等于知道了Linux系统账号,只要**其samba账号密码加以利用就可以攻击samba服务器。基于这样一点,我们可以利用用户账号映射功能来解决。
1、修改samba全局配置文件
[aaa@qq.com ~]# vim /etc/samba/smb.conf
username map = /etc/samba/smbusers ///在全局配置中加入这一行
2、配置samba共享配置文件
[aaa@qq.com ~]# 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文本
[aaa@qq.com ~]# vim /etc/samba/smbusers
villian = zhangshan lisi wangwu zhaoliu ///将villian用户的账号映射给张三、李四、王五、赵六
4、创建villian用户账号,给予映射
[aaa@qq.com ~]# smbpasswd -a villian
New SMB password:
Retype new SMB password:
5、重启samba服务
[aaa@qq.com ~]# systemctl restart smb
6、使用Windows客户端访问共享目录
拓展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用户