GNU/Linux >> Znalost Linux >  >> Linux

Dotazujte se na svůj operační systém Linux jako na databázi

Linux nabízí mnoho příkazů, které uživatelům pomohou získat informace o jejich hostitelském operačním systému:výpis souborů nebo adresářů pro kontrolu atributů; dotazování, zda jsou nainstalovány balíčky, běží procesy a služby začínají při startu; nebo se dozvědět o hardwaru systému.

Každý příkaz používá svůj vlastní výstupní formát pro výpis těchto informací. Musíte použít nástroje jako grep , sed a awk filtrovat výsledky, abyste našli konkrétní informace. Mnoho těchto informací se také často mění, což vede ke změnám ve stavu systému.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Bylo by užitečné zobrazit všechny tyto informace ve formátu jako výstup databázového SQL dotazu. Představte si, že byste se mohli dotazovat na výstup ps a rpm příkazy, jako byste se dotazovali na tabulku databáze SQL s podobnými názvy.

Naštěstí existuje nástroj, který dělá právě to a mnohem víc:Osquery je open source „systém pro instrumentaci, monitorování a analýzu operačního systému s podporou SQL.“

Mnoho aplikací, které se zabývají zabezpečením, DevOps, dodržováním předpisů a správou zásob (abychom jmenovali alespoň některé), závisí na základních funkcích poskytovaných Osquery v jejich srdci.

Instalovat Osquery

Osquery je k dispozici pro Linux, macOS, Windows a FreeBSD. Nainstalujte nejnovější verzi pro váš operační systém podle pokynů k instalaci. (V těchto příkladech použiji verzi 4.7.0.)

Po instalaci ověřte, že funguje:

$ rpm -qa | grep osquery
osquery-4.7.0-1.linux.x86_64
$
$ osqueryi --version
osqueryi version 4.7.0
$

Komponenty Osquery

Osquery má dvě hlavní součásti:

  • osqueri je interaktivní konzola dotazů SQL. Jedná se o samostatný nástroj, který nepotřebuje oprávnění superuživatele (pokud se neptáte na tabulky, které tuto úroveň přístupu vyžadují).
  • osqueryd je jako monitorovací démon pro hostitele, na kterém je nainstalován. Tento démon může naplánovat provádění dotazů v pravidelných intervalech, aby shromáždil informace z infrastruktury.

Obslužný program osqueri můžete spustit, aniž byste měli spuštěný démon osqueryd. Další nástroj, osqueryctl , řídí spouštění, zastavování a kontrolu stavu démona.

$ rpm -ql osquery-4.8.0-1.linux.x86_64 | grep bin
/usr/bin/osqueryctl
/usr/bin/osqueryd
/usr/bin/osqueryi
$

Použití interaktivní výzvy osqueryi

S Osquery komunikujete podobně, jako byste používali databázi SQL. Ve skutečnosti je osqueryi upravenou verzí shellu SQLite. Spuštění osqueryi příkaz vás přenese do interaktivního prostředí, kde můžete spouštět příkazy specifické pro Osquery, které často začínají . :

$ osqueryi 
Using a virtual database. Need help, type '.help'
osquery>

Pro ukončení interaktivního shellu spusťte .quit příkaz pro návrat do shellu operačního systému:

osquery> 
osquery> .quit
$

Zjistěte, jaké stoly jsou k dispozici

Jak již bylo zmíněno, Osquery zpřístupňuje data jako výstup SQL dotazů. Informace v databázích se často ukládají do tabulek. Ale jak se můžete dotazovat na tyto tabulky, když neznáte jejich názvy? Můžete spustit .tables příkaz k zobrazení seznamu všech tabulek, které můžete dotazovat. Pokud jste dlouholetým uživatelem Linuxu nebo správcem systému, názvy tabulek vám budou známé, protože tyto informace získáváte pomocí příkazů operačního systému:

osquery> .tables 
  => acpi_tables
  => apparmor_events
  => apparmor_profiles
  => apt_sources

<< snip >>

  => arp_cache
  => user_ssh_keys
  => users
  => yara
  => yara_events
  => ycloud_instance_metadata
  => yum_sources
osquery>

Zkontrolujte schéma pro jednotlivé tabulky

Nyní, když znáte názvy tabulek, můžete vidět, jaké informace každá tabulka poskytuje. Jako příklad vyberte processes , protože ps k získání těchto informací se poměrně často používá. Spusťte .schema příkaz následovaný názvem tabulky, abyste viděli, jaké informace jsou v této tabulce uloženy. Pokud chcete zkontrolovat výsledky, můžete rychle spustit ps -ef nebo ps aux a porovnejte výstup s obsahem tabulky:

osquery> .schema processes
CREATE TABLE processes(`pid` BIGINT, `name` TEXT, `path` TEXT, `cmdline` TEXT, `state` TEXT, `cwd` TEXT, `root` TEXT, `uid` BIGINT, `gid` BIGINT, `euid` BIGINT, `egid` BIGINT, `suid` BIGINT, `sgid` BIGINT, `on_disk` INTEGER, `wired_size` BIGINT, `resident_size` BIGINT, `total_size` BIGINT, `user_time` BIGINT, `system_time` BIGINT, `disk_bytes_read` BIGINT, `disk_bytes_written` BIGINT, `start_time` BIGINT, `parent` BIGINT, `pgroup` BIGINT, `threads` INTEGER, `nice` INTEGER, `is_elevated_token` INTEGER HIDDEN, `elapsed_time` BIGINT HIDDEN, `handle_count` BIGINT HIDDEN, `percent_processor_time` BIGINT HIDDEN, `upid` BIGINT HIDDEN, `uppid` BIGINT HIDDEN, `cpu_type` INTEGER HIDDEN, `cpu_subtype` INTEGER HIDDEN, `phys_footprint` BIGINT HIDDEN, PRIMARY KEY (`pid`)) WITHOUT ROWID;
osquery>

Chcete-li se vrátit domů, použijte následující příkaz k zobrazení schématu pro balíčky RPM a porovnejte informace s rpm -qa a rpm -qi příkazy operačního systému:

osquery> 
osquery> .schema rpm_packages
CREATE TABLE rpm_packages(`name` TEXT, `version` TEXT, `release` TEXT, `source` TEXT, `size` BIGINT, `sha1` TEXT, `arch` TEXT, `epoch` INTEGER, `install_time` INTEGER, `vendor` TEXT, `package_group` TEXT, `pid_with_namespace` INTEGER HIDDEN, `mount_namespace_id` TEXT HIDDEN, PRIMARY KEY (`name`, `version`, `release`, `arch`, `epoch`, `pid_with_namespace`)) WITHOUT ROWID;
osquery>

Více se dozvíte v dokumentaci tabulek Osquery.

Použijte příkaz PRAGMA

V případě, že jsou pro vás informace o schématu příliš záhadné, existuje další způsob, jak vytisknout informace v tabulce ve podrobném tabulkovém formátu:PRAGMA příkaz. Například použiji PRAGMA zobrazíte informace pro rpm_packages tabulka v pěkném formátu:

osquery> PRAGMA table_info(rpm_packages);

Jednou z výhod těchto tabulkových informací je, že se můžete zaměřit na pole, na které se chcete dotazovat, a zobrazit typ informací, které poskytuje:

osquery> PRAGMA table_info(users);
+-----+-------------+--------+---------+------------+----+
| cid | name        | type   | notnull | dflt_value | pk |
+-----+-------------+--------+---------+------------+----+
| 0   | uid         | BIGINT | 1       |            | 1  |
| 1   | gid         | BIGINT | 0       |            | 0  |
| 2   | uid_signed  | BIGINT | 0       |            | 0  |
| 3   | gid_signed  | BIGINT | 0       |            | 0  |
| 4   | username    | TEXT   | 1       |            | 2  |
| 5   | description | TEXT   | 0       |            | 0  |
| 6   | directory   | TEXT   | 0       |            | 0  |
| 7   | shell       | TEXT   | 0       |            | 0  |
| 8   | uuid        | TEXT   | 1       |            | 3  |
+-----+-------------+--------+---------+------------+----+
osquery>

Spusťte svůj první dotaz

Nyní, když máte všechny požadované informace z tabulky, schématu a položek, které chcete dotazovat, spusťte svůj první dotaz SQL a zobrazte informace. Dotaz níže vrátí uživatele, kteří jsou přítomni v systému, a každého z nich ID uživatele, ID skupiny, domovský adresář a výchozí shell. Uživatelé Linuxu mohou tyto informace získat zobrazením obsahu /etc/passwd soubor a dělá nějaký grep , sed a awk magie.

osquery> 
osquery> select uid,gid,directory,shell,uuid FROM users LIMIT 7;
+-----+-----+----------------+----------------+------+
| uid | gid | directory      | shell          | uuid |
+-----+-----+----------------+----------------+------+
| 0   | 0   | /root          | /bin/bash      |      |
| 1   | 1   | /bin           | /sbin/nologin  |      |
| 2   | 2   | /sbin          | /sbin/nologin  |      |
| 3   | 4   | /var/adm       | /sbin/nologin  |      |
| 4   | 7   | /var/spool/lpd | /sbin/nologin  |      |
| 5   | 0   | /sbin          | /bin/sync      |      |
| 6   | 0   | /sbin          | /sbin/shutdown |      |
+-----+-----+----------------+----------------+------+
osquery>

Spouštět dotazy bez vstupu do interaktivního režimu

Co když chcete spustit dotaz bez vstupu do interaktivního režimu osqueri? To by mohlo být velmi užitečné, pokud kolem toho píšete skripty shellu. V tomto případě můžete echo SQL dotaz a přenést jej do osqueri přímo z prostředí Bash:

$ echo "select uid,gid,directory,shell,uuid FROM users LIMIT 7;" | osqueryi
+-----+-----+----------------+----------------+------+
| uid | gid | directory      | shell          | uuid |
+-----+-----+----------------+----------------+------+
| 0   | 0   | /root          | /bin/bash      |      |
| 1   | 1   | /bin           | /sbin/nologin  |      |
| 2   | 2   | /sbin          | /sbin/nologin  |      |
| 3   | 4   | /var/adm       | /sbin/nologin  |      |
| 4   | 7   | /var/spool/lpd | /sbin/nologin  |      |
| 5   | 0   | /sbin          | /bin/sync      |      |
| 6   | 0   | /sbin          | /sbin/shutdown |      |
+-----+-----+----------------+----------------+------+
$

Zjistěte, jaké služby se spouštějí při spouštění

Osquery může také vrátit všechny služby nastavené tak, aby se spouštěly při startu. Například pro dotaz na startup_items a získejte název, stav a cestu prvních pěti služeb, které se spouštějí při spuštění:

osquery> SELECT name,type,status,path FROM startup_items LIMIT 5;
  name = README
  type = Startup Item
status = enabled
  path = /etc/rc.d/init.d/README

  name = anamon
  type = Startup Item
status = enabled
  path = /etc/rc.d/init.d/anamon

  name = functions
  type = Startup Item
status = enabled
  path = /etc/rc.d/init.d/functions

  name = osqueryd
  type = Startup Item
status = enabled
  path = /etc/rc.d/init.d/osqueryd

  name = AT-SPI D-Bus Bus
  type = Startup Item
status = enabled
  path = /usr/libexec/at-spi-bus-launcher --launch-immediately
osquery>

Vyhledat informace ELF pro binární kód

Představte si, že chcete zjistit více podrobností o ls binární. Obvykle byste to udělali pomocí readelf -h za ním následuje ls cesta příkazu. Můžete se zeptat na elf_info tabulky s Osquery a získejte stejné informace:

osquery> SELECT * FROM elf_info WHERE path="/bin/ls";
      class = 64
        abi = sysv
abi_version = 0
       type = dyn
    machine = 62
    version = 1
      entry = 24064
      flags = 0
       path = /bin/ls
osquery>

Nyní máte možnost ochutnat, jak používat osqueri k hledání informací, které vás zajímají. Tyto informace jsou však uloženy na obrovském množství tabulek; jeden systém, na který jsem se dotazoval, měl 156 různých tabulek, což může být ohromující:

$ echo ".tables" | osqueryi | wc -l
156
$

Abyste si to usnadnili, můžete začít s těmito tabulkami, abyste získali informace o svém systému Linux:

Tabulka informací o systému

osquery> select * from system_info;

Informace o limitu systému

osquery> select * from ulimit_info;

Soubory otevřené různými procesy

osquery> select * from process_open_files;

Otevření portů v systému

osquery> select * from listening_ports;

Informace o spuštěných procesech

osquery> select * from processes;

Informace o nainstalovaných balíčcích

osquery> select * from rpm_packages;

Přihlašovací údaje uživatele

osquery> select * from last;

Informace protokolu systému

osquery> select * from syslog_events;

Další informace

Osquery je výkonný nástroj, který poskytuje spoustu informací o hostiteli, které lze použít k řešení různých případů použití. Více o Osquery se můžete dozvědět v jeho dokumentaci.


Linux
  1. Dotazujte se na svůj operační systém Linux jako na databázi

  2. Zabezpečení Linuxu:Chraňte své systémy pomocí fail2ban

  3. Zjistěte více o svém systému Linux pomocí inxi

  1. Monitorujte svůj systém Linux ve svém terminálu pomocí procps-ng

  2. Jak zálohovat celý systém Linux pomocí Rsync

  3. Jaký je proces vyřazování hardwaru vašeho serveru Linux z provozu?

  1. Vyzkoušejte Linux na jakémkoli operačním systému s VirtualBoxem

  2. Jak zkontrolovat datum instalace vašeho linuxového operačního systému?

  3. Co je to linuxový kontejner a linuxový hypervizor?