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.