0x01 关于smaba
1 2
| 主要用于实现不同系统平台间的文件共享,配置非常简单,轻量,适合用于常规办公内网环境中 linux <==> windows <==> unix
|
此次演示环境
1 2
| CentOS6.9 x86_64 ip:192.168.3.55 samba服务器 CentOS6.9 x86_64 ip:192.168.3.57 用来模拟smb客户端进行访问测试
|
0x02 samba服务默认所监听的端口
1 2
| 137/udp,138/udp nmb 进程提供netbios解析,以满足基于 CIFS 协议的共享访问环境 138/tcp,445/tcp smb 进程主要为客户端提供文件共享,打印机服务以及用户权限验证
|
0x03 使用samba客户端工具 smbclient,其实有些类似于ftp的客户端工具,也是一种交互式的访问
在linux下使用smbclient访问windows中的共享目录
1 2 3
| # 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服务共享目录
1
| # smbclient -L 192.168.3.55 -U webadmin
|
0x04 安装samba服务所需的各种软件包
1 2
| # yum install samba samba-client samba-common -y # /etc/init.d/nmb start;/etc/init.d/smb start
|
0x05 先来手工配置samba,编辑samba主配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| [global] workgroup = klionsec server string = Samba Server Version %v netbios name = SmbServer # netbios名称,有点儿类似windows的机器名 interfaces = eth0 # 将端口监听在指定的网卡接口上 hosts allow = 192.168.3. # 只允许指定的网段访问 # samba日志文件存放位置 log file = /var/log/samba/log.%m 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 # 是否显示文件或目录列表
|
1 2 3
| # 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来授权,你可以通过修改属主,属组来实现,比较简单,就不赘述了
1 2 3 4
| # 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服务自己的密码,并存在它自己特定格式的数据库中,再次强调,严禁弱口令
1 2 3 4 5 6 7
| # 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内置用户
1 2 3 4
| -d 禁用指定系统用户 -e 启用指定系统用户 -x 删除指定系统用户 -a 添加指定系统用户
|
0x09 在192.168.3.57测试刚刚设置的权限是都已否生效,正常来讲,我们应该是一个用户对应一个目录,这样权限相对好控制,可自行写脚本实现
因为webadmin和dbadmin都属admins组,而admins组对共享目录可写,另外,在共享目录的可写用户列表中也有这俩用户,所以它俩才能往共享目录中写
1
| smbclient //192.168.3.55/tools -U webadmin
|

1
| smbclient //192.168.3.55/tools -U dbadmin
|

sec既不属于admins组,也不在可写用户列表中,所以,该用户在共享目录中只能看不能写,如下
1
| smbclient //192.168.3.55/tools -U sec
|


0x10 如果嫌手工配置麻烦的话,还有一款纯图形化samba配置工具,实际中最好用完立马就关掉,个人觉得根本犯不着这样,其实写个一键脚本就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
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 }
|


0x11 关于samba的一些安全问题
1 2 3
| 绝大部分问题都出自samba自身的一些漏洞,如,各类RCE...直接可远程getshell的漏洞就已经出了好几次了,所以建议大家实际中尽量用新一点的版本 关于权限分配,问题不太大,毕竟只是个内网服务,别傻到直接把端口暴露在公网就行,不然,很可能哪天一不小心就成了别人的`矿鸡`了 ...
|
后话:
服务比较简单,此处仅做学习实验之用,切勿直接照搬用于实际生产环境中…