GNU/Linux >> Belajar Linux >  >> Linux

Query sistem operasi Linux Anda seperti database

Linux menawarkan banyak perintah untuk membantu pengguna mengumpulkan informasi tentang sistem operasi host mereka:daftar file atau direktori untuk memeriksa atribut; menanyakan untuk melihat paket apa yang diinstal, proses yang berjalan, dan layanan mulai saat boot; atau belajar tentang perangkat keras sistem.

Setiap perintah menggunakan format outputnya sendiri untuk membuat daftar informasi ini. Anda perlu menggunakan alat seperti grep , sed , dan awk untuk menyaring hasil untuk menemukan informasi spesifik. Selain itu, banyak dari informasi ini yang sering berubah, yang menyebabkan perubahan status sistem.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Akan sangat membantu untuk melihat semua informasi ini diformat seperti output dari kueri SQL database. Bayangkan Anda dapat menanyakan output dari ps dan rpm perintah seolah-olah Anda menanyakan tabel database SQL dengan nama yang mirip.

Untungnya, ada alat yang melakukan hal itu dan banyak lagi:Osquery adalah open source "instrumentasi sistem operasi yang didukung SQL, pemantauan, dan kerangka analitik."

Banyak aplikasi yang menangani keamanan, DevOps, kepatuhan, dan manajemen inventaris (untuk beberapa nama) bergantung pada fungsionalitas inti yang disediakan oleh Osquery.

Instal Osquery

Osquery tersedia untuk Linux, macOS, Windows, dan FreeBSD. Instal versi terbaru untuk sistem operasi Anda dengan mengikuti petunjuk penginstalannya. (Saya akan menggunakan versi 4.7.0 dalam contoh ini.)

Setelah penginstalan, verifikasi berfungsi:

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

Komponen Osquery

Osquery memiliki dua komponen utama:

  • osqueri adalah konsol kueri SQL interaktif. Ini adalah utilitas mandiri yang tidak memerlukan hak pengguna super (kecuali jika Anda menanyakan tabel yang memerlukan tingkat akses tersebut).
  • osqueryd seperti daemon pemantauan untuk host tempat ia diinstal. Daemon ini dapat menjadwalkan kueri untuk dieksekusi secara berkala guna mengumpulkan informasi dari infrastruktur.

Anda dapat menjalankan utilitas osqueri tanpa menjalankan daemon osqueryd. Utilitas lain, osqueryctl , mengontrol memulai, menghentikan, dan memeriksa status daemon.

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

Gunakan perintah interaktif osqueryi

Anda berinteraksi dengan Osquery seperti Anda menggunakan database SQL. Faktanya, osqueryi adalah versi modifikasi dari shell SQLite. Menjalankan osqueryi command memasukkan Anda ke dalam shell interaktif tempat Anda dapat menjalankan perintah khusus untuk Osquery, yang sering kali dimulai dengan . :

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

Untuk keluar dari shell interaktif, jalankan .quit perintah untuk kembali ke shell sistem operasi:

osquery> 
osquery> .quit
$

Cari tahu tabel apa yang tersedia

Seperti disebutkan, Osquery membuat data tersedia sebagai output dari kueri SQL. Informasi dalam database sering disimpan dalam tabel. Tapi bagaimana Anda bisa menanyakan tabel ini jika Anda tidak tahu namanya? Nah, Anda dapat menjalankan .tables perintah untuk membuat daftar semua tabel yang dapat Anda kueri. Jika Anda adalah pengguna lama Linux atau sysadmin, nama tabel akan familiar, karena Anda telah menggunakan perintah sistem operasi untuk mendapatkan informasi ini:

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>

Periksa skema untuk masing-masing tabel

Sekarang setelah Anda mengetahui nama tabel, Anda dapat melihat informasi apa yang disediakan setiap tabel. Sebagai contoh, pilih processes , karena ps perintah cukup sering digunakan untuk mendapatkan informasi ini. Jalankan .schema perintah diikuti dengan nama tabel untuk melihat informasi apa yang disimpan dalam tabel ini. Jika Anda ingin memeriksa hasilnya, Anda dapat dengan cepat menjalankan ps -ef atau ps aux dan bandingkan hasilnya dengan isi tabel:

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>

Untuk mengembalikan poinnya, gunakan perintah berikut untuk melihat skema paket RPM dan bandingkan informasinya dengan rpm -qa dan rpm -qi perintah sistem operasi:

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>

Anda mempelajari lebih lanjut di dokumentasi tabel Osquery.

Gunakan perintah PRAGMA

Jika informasi skema terlalu samar untuk Anda, ada cara lain untuk mencetak informasi tabel dalam format tabel yang verbose:PRAGMA memerintah. Misalnya, saya akan menggunakan PRAGMA untuk melihat informasi untuk rpm_packages tabel dalam format yang bagus:

osquery> PRAGMA table_info(rpm_packages);

Salah satu manfaat dari informasi tabular ini adalah Anda dapat fokus pada bidang yang ingin Anda kueri dan melihat jenis informasi yang disediakannya:

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>

Jalankan kueri pertama Anda

Sekarang setelah Anda memiliki semua informasi yang diperlukan dari tabel, skema, dan item untuk kueri, jalankan kueri SQL pertama Anda untuk melihat informasi. Kueri di bawah ini mengembalikan pengguna yang ada di sistem dan ID pengguna masing-masing, ID grup, direktori home, dan shell default. Pengguna Linux bisa mendapatkan informasi ini dengan melihat isi dari /etc/passwd file dan melakukan beberapa grep , sed , dan awk sihir.

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>

Jalankan kueri tanpa memasuki mode interaktif

Bagaimana jika Anda ingin menjalankan kueri tanpa memasuki mode interaktif osqueri? Ini bisa sangat berguna jika Anda menulis skrip shell di sekitarnya. Dalam hal ini, Anda dapat echo kueri SQL dan menyalurkannya ke osqueri langsung dari shell 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 |      |
+-----+-----+----------------+----------------+------+
$

Pelajari layanan apa yang dimulai saat booting

Osquery juga dapat mengembalikan semua layanan yang diatur untuk memulai saat boot. Misalnya, untuk menanyakan startup_items tabel dan dapatkan nama, status, dan jalur dari lima layanan pertama yang berjalan saat startup:

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>

Cari informasi ELF untuk biner

Bayangkan Anda ingin mengetahui detail lebih lanjut tentang ls biner. Biasanya, Anda akan melakukannya dengan readelf -h perintah diikuti oleh ls jalan komando. Anda dapat menanyakan elf_info tabel dengan Osquery dan dapatkan informasi yang sama:

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>

Sekarang Anda telah merasakan bagaimana menggunakan osqueri untuk mencari informasi yang menarik bagi Anda. Namun, informasi ini disimpan di sejumlah besar tabel; satu sistem yang saya tanyakan memiliki 156 tabel yang berbeda, yang bisa sangat banyak:

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

Untuk mempermudah, Anda dapat memulai dengan tabel berikut untuk mendapatkan informasi tentang sistem Linux Anda:

Tabel informasi sistem

osquery> select * from system_info;

Informasi batas sistem

osquery> select * from ulimit_info;

File dibuka dengan berbagai proses

osquery> select * from process_open_files;

Membuka port pada sistem

osquery> select * from listening_ports;

Menjalankan informasi proses

osquery> select * from processes;

Informasi paket yang diinstal

osquery> select * from rpm_packages;

Informasi login pengguna

osquery> select * from last;

Informasi log sistem

osquery> select * from syslog_events;

Pelajari lebih lanjut

Osquery adalah alat yang ampuh yang menyediakan banyak informasi host yang dapat digunakan untuk menyelesaikan berbagai kasus penggunaan. Anda dapat mempelajari lebih lanjut tentang Osquery dengan membaca dokumentasinya.


Linux
  1. Pantau sistem Linux Anda di terminal Anda dengan procps-ng

  2. Query sistem operasi Linux Anda seperti database

  3. Apa itu wadah Linux dan hypervisor Linux?

  1. Cara Mencadangkan Seluruh Sistem Linux Anda Menggunakan Rsync

  2. Keamanan Linux:Lindungi sistem Anda dengan fail2ban

  3. Apa proses penonaktifan perangkat keras server Linux Anda?

  1. Coba Linux di sistem operasi apa pun dengan VirtualBox

  2. Pelajari lebih lanjut tentang sistem Linux Anda dengan inxi

  3. Bagaimana cara memeriksa tanggal instalasi sistem operasi linux Anda?