跨平台快速文件共享 Samba(技术分享)-文件共享

0x01 关于smaba

主要用于实现不同系统平台间的文件共享,配置非常简单,轻量,适合用于常规办公内网环境中

linux <==> windows <==> unix

此次演示环境

CentOS6.9 x86_64ip:192.168.3.55 samba服务器

CentOS6.9 x86_64ip:192.168.3.57 用来模拟smb客户端进行访问测试

0x02 samba服务默认所监听的端口

137/udp,138/udp nmb 进程提供netbios解析,以满足基于 CIFS 协议的共享访问环境

138/tcp,445/tcp smb 进程主要为客户端提供文件共享,打印机服务以及用户权限验证

0x03 使用samba客户端工具 smbclient,其实有些类似于ftp的客户端工具,也是一种交互式的访问

在linux下使用smbclient访问windows中的共享目录

# smbclient -L 192.168.3.23 -U administrator

# smbclient //192.168.3.23/linux_dir -U dcadmin

# mount -t cifs //192.168.3.23/linux_dir /mnt/windows/ -o username=dcadmin 注意,此处要使用cifs协议进行挂载

在linux下使用smbclient访问linux中samba服务共享目录

# smbclient -L 192.168.3.55 -U webadmin

0x04 安装samba服务所需的各种软件包

# yum install samba samba-client samba-common -y

# /etc/init.d/nmb start;/etc/init.d/smb start

0x05 先来手工配置samba,编辑samba主配置文件

# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

# egrep -v "^$|;|#" /etc/samba/smb.conf

# vi /etc/samba/smb.conf

[global]

workgroup = klionsec

server string = Samba Server Version

netbios name = SmbServer# netbios名称,有点儿类似windows的机器名

interfaces = eth0# 将端口监听在指定的网卡接口上

hosts allow = 192.168.3.# 只允许指定的网段访问

# samba日志文件存放位置

log file = /var/log/samba/log.

max log size = 50

# 启用为用户登陆模式

security = user

passdb backend = tdbsam

[tools] # 访问时的共享目录名

comment = My HackTools # 对该共享目录的用途描述

path = /data/tools # 共享目录所在的绝对路径

guest ok = yes # 是否允许以来宾用户身份访问

read only = no # 表示对该共享目录可写

write list = webadmin,dbadmin # 允许写的用户列表

browseable = yes # 是否显示文件或目录列表

# testparm 用于测试samba主配置文件是否有语法错误,并显示最终生效的配置

# /etc/init.d/smb restart;/etc/init.d/nmb restart

# chkconfig smb on && chkconfig nmb on

0x06 创建用于共享访问的目录,并为该共享目录配置好权限,注意,如果要用户能写,务必要保证两点,首先,smb.conf中的共享目录要设置为read only = no,其次,还要对本地文件系统也能写才行,这里纯粹是为了方便才直接用facl来授权,你可以通过修改属主,属组来实现,比较简单,就不赘述了

# mkdir /data/tools -p

# setfacl -m u:sec:rx /data/tools/

# setfacl -m g:admins:rwx /data/tools/直接对指定组setfacl

# getfacl -c /data/tools/

0x07 创建samba用户并为每个用户设置samba密码,注意samba的验证方式,samba用户虽为系统本地用户,但samba用户的密码却为samba服务自己的密码,并存在它自己特定格式的数据库中,再次强调,严禁弱口令

# groupadd admins

# useradd -G admins -s /sbin/nologin -M webadmin

# useradd -G admins -s /sbin/nologin -M dbadmin

# useradd -s /sbin/nologin -M sec

# smbpasswd -a webadmin

# smbpasswd -a dbadmin

# smbpasswd -a sec

0x08 关于smbpasswd的基本使用,主要用来将系统用户添加为samba内置用户

-d 禁用指定系统用户

-e 启用指定系统用户

-x 删除指定系统用户

-a 添加指定系统用户

0x09 在192.168.3.57测试刚刚设置的权限是都已否生效,正常来讲,我们应该是一个用户对应一个目录,这样权限相对好控制,可自行写脚本实现

因为webadmin和dbadmin都属admins组,而admins组对共享目录可写,另外,在共享目录的可写用户列表中也有这俩用户,所以它俩才能往共享目录中写

mbclient //192.168.3.55/tools -U webadmin

跨平台快速文件共享 Samba(技术分享)

smbclient //192.168.3.55/tools -U dbadmin

跨平台快速文件共享 Samba(技术分享)

sec既不属于admins组,也不在可写用户列表中,所以,该用户在共享目录中只能看不能写,如下

smbclient //192.168.3.55/tools -U sec

跨平台快速文件共享 Samba(技术分享)

跨平台快速文件共享 Samba(技术分享)

0x10 如果嫌手工配置麻烦的话,还有一款纯图形化samba配置工具,实际中最好用完立马就关掉,个人觉得根本犯不着这样,其实写个一键脚本就好了

# yum install samba-swat -y

# vi /etc/xinetd.d/swat

service swat

{

port= 901

socket_type= stream

wait = no

only_from = 192.168.3.0/24 # 允许连的ip

user= root # 因为工具中间还涉及到一些服务管理功能,所以此处最好直接用root身份来搞

server= /usr/sbin/swat

log_on_failure+= USERID

disable= no

}

# 另外,需要注意swat基于xinet管理

# /etc/init.d/xinetd start

# chkconfig xinetd on

跨平台快速文件共享 Samba(技术分享)

跨平台快速文件共享 Samba(技术分享)

0x11 关于samba的一些安全问题

绝大部分问题都出自samba自身的一些漏洞,如,各类RCE...直接可远程getshell的漏洞就已经出了好几次了,所以建议大家实际中尽量用新一点的版本

关于权限分配,问题不太大,毕竟只是个内网服务,别傻到直接把端口暴露在公网就行,不然,很可能哪天一不小心就成了别人的`矿鸡`了

...

后话:

服务比较简单,此处仅做学习实验之用,切勿直接照搬用于实际生产环境中…

#SAMBA

推荐阅读