如何使用osquery监视Linux服务器

Osquery是一个开源操作系统监控,查询和分析软件。由Facebook创建,它将操作系统暴露为高端...

如何使用osquery监视Linux服务器

Osquery是一个开源操作系统监控,查询和分析软件。 它由Facebook创建,它将操作系统公开为高性能关系数据库,可以使用基于SQL的查询进行查询。

Osquery是一个多平台软件,可以安装在Linux,Windows,MacOS和FreeBSD上。 Osquery允许我们通过使用基于SQL的查询来探索操作系统配置文件,性能,安全性和更多指标。

在本教程中,我将向您展示如何在Linux发行版Ubuntu 18.04 LTS和CentOS 7上安装osquery。我们将安装osquery,学习如何使用'osqueryi'交互模式,以及如何使用osquery监视实时系统。

先决条件

  • Linux OS(Ubuntu 18.04或CentOS 7)
  • Root权限

我们将要做什么

  • 在Linux操作系统上安装osquery
  • osqueryi交互模式的基本用法
  • 使用osquery监控系统

第1步 - 在Linux操作系统上安装osquery

osquery为每个平台提供了自己的存储库。 这一步,我们将从官方的osquery存储库安装osquery包。

在Ubuntu上

添加osquery密钥。

export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY

在Ubuntu上安装osquery包。

sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
sudo apt install osquery -y

在CentOS上

添加osquery密钥。

curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery

在CentOS 7上安装osquery包。

sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
sudo yum-config-manager --enable osquery-s3-rpm
sudo yum install osquery

等待安装所有软件包。

安装osquery

第2步 - osqueryi交互模式的基本用法

osquery为用户提供了两个主要接口,osqueryi和osqueryd。

osqueryi是osquery交互式查询控制台。 它就像MySQL上的'mysql'命令shell和PostgreSQL数据库上的'psql'shell。

在这一步中,我们将学习'osqueryi'交互模式的基本用法。

在服务器终端上键入“osqueryi”命令,您将获得osquery交互式控制台模式。

osqueryi

接下来,我们将了解osqueryi控制台模式的基本命令。

在交互模式osqueryi上显示所有基本可用命令。

.help

使用osqueryi命令

显示当前的osquery配置和设置。

.show

显示osquery配置

Osquery提供多种视图模式来显示查询结果。 默认模式是“漂亮”模式。

现在我们将更改查询结果的查看模式,对于本指南,我们将使用'line'模式。

.mode csv
.mode list
.mode column
.mode line
.mode pretty

Osquery将操作系统公开为关系数据库系统。 有关系统的所有信息都存储在osquery表中,我们可以通过查询所有可用表来探索整个系统信息。

要获取osquery中所有可用表的列表,请运行以下命令。

.tables

获取所有表的列表

一旦我们知道了osquery系统中的所有可用表,我们将查看列。

使用以下命令获取表的模式(列,类型)。

.schema users
.schema processes

获取osquery列

您将获得该表的所有架构列。

第3步 - 使用查询进行基本Linux监控

在此步骤中,我们将使用osquery监视实时Linux系统。 我们将通过osqueryi交互模式监控系统配置文件信息,用户,网络接口等。

获取系统信息

显示有关系统硬件的详细信息。

SELECT * FROM system_info;
SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;

显示系统硬件细节

获取操作系统版本

显示当前的操作系统信息,包括操作系统版本,平台,操作系统补丁和代号。

SELECT * FROM os_version;

显示有关OS的详细信息

查看内核版本和模块

为了检查系统的内核信息,osquery提供了表'kernel_info'和'kernel_modules'。

显示系统使用的内核。

SELECT * FROM kernel_info;

显示系统上所有已加载的内核模块。

SELECT * FROM kernel_modules LIMIT 5;

获取有关已使用的Linux内核的详细信息

检查存储库和包

osquery提供了用于检查Linux Ubuntu和CentOS上的存储库和已安装软件包的表。

- 在Ubuntu上

在Ubuntu上,我们可以通过'apt_sources'检查可用的存储库,并检查通过'deb_packages'安装的包。

检查所有可用的Ubuntu存储库。

SELECT * FROM apt_sources;
SELECT name, base_uri, release, maintainer, components FROM apt_sources ORDER BY name;

使用deb_packages表检查所有安装的软件包。

SELECT * FROM deb_packages;

仅显示包和版本的名称。

SELECT name, version FROM deb_packages ORDER BY name;

检查Ubuntu上安装的软件包

对于特定包,请添加名称过滤器。

SELECT name, version FROM deb_packages WHERE name="nginx";

获取有关特定包的详细信息,在本例中为nginx

- 在CentOS上

在CentOS上,我们可以通过'yum_sources'检查可用的存储库,并检查通过'rpm_packages'安装的软件包。

检查所有可用的CentOS存储库。

SELECT * FROM yum_sources;
SELECT name, baseurl, enabled FROM yum_sources;

通过添加“已启用”过滤器检查已启用的存储库。

SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;

获取CentOS的套餐详情

使用rpm_packages表检查所有安装的软件包。

SELECT * FROM rpm_packages;
SELECT name, version FROM rpm_packages ORDER BY name;

对于特定包名称,请添加名称过滤器。

SELECT name, version FROM rpm_packages WHERE name="firewalld";

有关Firewalld的详细信息

装载磁盘信息

我们可以使用mounts表来检查有关系统驱动器的所有详细信息,包括免费的inode,标志,类型等。

检查系统安装的所有磁盘。

SELECT * FROM mounts;
SELECT device, path, type, inodes_free, flags FROM mounts;

对于特定类型的设备。

SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="ext4";
SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";

获取磁盘安装

记忆信息

以字节为单位检查系统内存。

SELECT * FROM memory_info;

获取内存详细信息

网络接口信息

使用“interface_addresses”检查网络地址。

SELECT * FROM interface_addresses;

网络接口信息

使用“interface_details”检查网络接口详细信息。

SELECT * FROM interface_details;
SELECT interface, mac, ipackets, opackets, ibytes, obytes FROM interface_details;

网络接口详情

服务器正常运行

检查服务器正常运行时间。

SELECT * FROM uptime;

检查用户

osqery提供了用于检查系统用户的详细信息表。 我们可以使用'users'表来检查系统上的所有用户,使用'last'表检查用户上次登录,并使用'logged_in_users'来获取具有活动shell的登录用户。

要检查服务器上的所有可用用户,请使用“用户”表。

SELECT * FROM users;

对于普通用户,我们可以将uid指定为'> = 1000'。

SELECT * FROM users WHERE uid>=1000;

系统用户详细信息

要检查上次登录用户,请使用“last”表。

SELECT * FROM last;

上次登录

对于普通用户,请将'type'填入'7'。

SELECT username, time, host FROM last WHERE type=7;

获取有关普通用户的详细信息

使用活动shell检查登录用户,使用'logged_in_users'表。

SELECT * FROM logged_in_users;

IP表防火墙信息

通过'tables'表,我们可以检查防火墙的所有可用规则,包括链,策略,src / dst IP和端口等。

显示所有iptables规则。

SELECT * FROM iptables;

使用下面的自定义查询指定规则。

SELECT chain, policy, src_ip, dst_ip FROM iptables WHERE chain="POSTROUTING" order by src_ip;

IP表防火墙信息

流程信息

我们可以使用'processes'表检查所有申请流程。 它提供有关过程的详细信息,包括pid,名称,路径,命令等。

基本进程查询以检查所有正在运行的应用

SELECT * FROM processes;

指定pid等列,路径和命令。

SELECT pid, name, path, cmdline FROM processes;

有关Linux进程的详细信息

检查Cron工作

使用'crontab'表检查可用的cron作业和脚本运行时间。

SELECT * FROM crontab;

Cronjobs

SUID二进制文件

SUID(在执行时设置所有者用户ID)是给予文件的特殊类型的文件权限,主要是二进制可执行文件。

检查所有可用的二进制文件。

SELECT * FROM suid_bin;

指定用户名和组名。

SELECT * FROM suid_bin WHERE username="root" AND groupname="nobody" order by path;

列出od SUID文件

以上所有内容都是使用osquery进行的基本Linux系统监控。

参考