Samba 日志分析

发布于 2022-01-10  220 次阅读


原文地址

Samba 日志分析

随着我们文件共享安全级别的提高,越来越多的情况下需要对日志进行记录并审计。Linux 平台下的 Samba 服务的配置文件是 smb.conf,有不少图形化配置工具例如 Webmin、smbconftool、SWAT 及 RedHat 提供的 system-config-samba 等工具都可以为您简化配置 smb.conf 的过程, 但这些工具的细致程度却无法满足 samba 的需求, 对于如何分析 samba 日志的问题,没有现成的工具,我们必须对其日志结构有所了解。

1 .Samba 默认提供的日志

具体怎么配置 samba 就不讲了,下面的实例用以跟踪查询客户端通过 SMB 访问共享资源的情况。命令 netstat –na |grep ESTABLISHED  代表显示 TCP 已连接情况,如图 1 所示。

pic_001.jpg

图 1  Samba 日志分析

如图 1 中倒数第二行的 PID 10600,代表 smbd 的进程 ID 号,用 ps -ef |grep 10600 可查看到。与此同时,系统会把 samba 进程启动日志写到 /var/log/messages 中。

通常,所有客户机访问日志都放在一个日志里不但查询不便而且文件容易变得很大不便于管理,如何做到将每个客户端的连接信息存放在单独的文件呢?我们需要在 smb.conf 上动点脑筋了。在 smb.conf 文件中已有一行代码可以实现以上目的。

log file = /var/log/samba/%m.log

去掉前面的 ";" 号然后,重启 smbd 服务systemctl restart smbd,如果担心日志过大则启用下面这条命令

max log size = 500 # 最大日志容量为 500KB
log file = /var/log/samba/%m.log # 把日志文件放到可写的路径
logging = syslog # 把日志存到非文件后端的解决方案里 配合 syslog only = yes, 或者使用 logging = systemd

注意:PID 起什么作用呢?通常大家不会关注 PID 号,有时在调试故障时却能发现问题。

这里解释 PID 在调试故障时发挥得作用,如图 2 所示。

pic_002.jpg

图 2  strace 分析 PID

ps -ef |grep smb

上述命令用于查找 samba 进程列表,根据所连用户身份(这里是 test 用户)可以轻松的指导 PID 是 13778 就是该用户的进程,接着运行带有两个参数的 strace 命令限制于文件相关的系统调用输出。-p 13778 参数告诉 strace 使用这个进程 ID 连接到运行的进程中。这条命令执行后,结果输出会比较长。你会看到 smb 会不停的扫描目录看看有无变化,当用户尝试有问题的操作时,就会非常详细的信息了,这些信息给用户解决问题(尤其是权限带来的问题,例如出现拒绝访问等权限问题)带来了不小的帮助。

2 Samba 审计

如果你觉得记录日志不详细,那么还可以通过 log level 参数来调整日志记录级别,级别越高,记录越详细。Samba 使用 LOG_DAEMON 将日志级别分为 10 级,下表 1 列出常用的 4 级。

表 1 Samba 日志级别

类型 级别
LOG_ERR 0
LOG_WARNING 1
LOG_NOTICE 2
LOG_INFO 3

使用审计模块获得更多详细信息, 下面介绍 samba 的 full_audit 模块, 方法如下:

在全局配置项目中加入如下代码

#Audit settings

full_audit:prefix = %u|%I|s

full_audit:failure = connect

full_audit:sucess = connect disconnect opendir mkdir rmdir closedir open close fchmod chown fchown chdir

full_audit:facility = local5

full_audit:priority = notice

%u: 表示用户

%I: 用户 IP 地址

%S: Samba 服务器共享名称

同时在共享目录例如 [public] 配置项下,添加

vfs object=full_audit

修改完 smb.conf 配置保存退出然后用 testparm 测试配置文件正确性。下面为 samba 审计日志一条样本:

cat 192.168.150.154.log.old |grep audit

Initialising custom vfs hooks from [full_audit]

Module ‘/usr/lib/samba/vfs/full_audit.so’ loaded

[2013/05/05 04:02:06,0] modules/vfs_full audit.c:log_success(689)

下面我们将升级日志记录到 Mysql 数据库并通过 web 发布以便查询。

3. 用 Mysql 记录 Samba 审计日志

为了使用 Mysql 数据库记录 samba audit log 日志, 并实现通 WEB 方式查阅 Samba 审计日志,我们做了如下实验,首先在 Centos Linux 5.5 系统下用源代码方式安裝 Samba ,然后到 SMBD Audit 官网:  http://smbdaudit.sourceforge.net/ 下载 smb_audit 软件,具体步骤如下:

1) 下载 smb_audit-0.3.7

cd /usr/local/src/

wget "http://sourceforge.net/settings/mirror_choices?project

tar jxf smb_audit-0.3.7.i386.tar.bz2

2.) 建立 MySQL 资料库

cd /usr/local/src/smb_audit-0.3.7

mysql -u root -p -A mysql

mysql> create database smbd;

mysql> grant all on smbd.* to 'smbd'@'localhost' identified by 'smbd001';

mysql> exit

mysql -p smbd < smbd_mysql.sql

3). 重新编译 mysql_audit.so 给 samba-3.0.28 使用

cd /usr/local/smb_audit-0.3.7/src2

yum install mysql-devel

mv 3.0.28a 3.0.28a-bak

ln -s /usr/local/src/samba-3.0.28/source 3.0.28a

cp 3.0.28a/popt/popt.h 3.0.28a/include/

make

cp mysql_audit.so /opt/samba/lib/vfs/

4). 配置 smb.conf 使用 mysql_audit

vi /etc/samba/smb.conf

vfs object = mysql_audit

service smb restart

5).WEB 配置

cd /var/www/html/

ln -s /usr/local/src/smb_audit-0.3.7 smb_audit

6). 浏览器访问效果 http://ip/smb_audit/ ,如图 3 所示。

pic_003.jpg

图 3 通过 web 浏览 samba 日志


或许明日太阳西下倦鸟已归时