GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui kemampuan linux apa yang dibutuhkan suatu proses untuk bekerja?

Metode lain, yang saya temukan beberapa waktu lalu di posting blog ini oleh Brendan Gregg adalah menggunakan kemampuan pelacak - mampu .

Di bawah ini adalah contoh keluaran:

$ sudo /usr/share/bcc/tools/capable
TIME      UID    PID    COMM             CAP  NAME                 AUDIT
11:31:54  0      2467   capable          21   CAP_SYS_ADMIN        1
11:31:54  0      2467   capable          21   CAP_SYS_ADMIN        1
11:31:59  1000   2468   ls               1    CAP_DAC_OVERRIDE     1
11:31:59  1000   2468   ls               2    CAP_DAC_READ_SEARCH  1
11:32:02  0      1421   timesync         25   CAP_SYS_TIME         1
11:32:05  1000   2469   sudo             7    CAP_SETUID           1
11:32:05  0      2469   sudo             6    CAP_SETGID           1

Ini memiliki keuntungan signifikan dari pemeriksaan kemampuan perekaman yang dilakukan oleh kernel untuk proses tertentu. Ini memungkinkan untuk membuat profil aplikasi terhadap kemampuan yang sebenarnya diperlukan, mis. untuk mempersempit hak istimewa dan menjalankannya sebagai pengguna yang tidak memiliki hak istimewa.

Sementara pscap memungkinkan untuk membuat daftar yang efektif kapabilitas semua proses yang berjalan, ia tidak menawarkan metode yang andal untuk memeriksa kapabilitas mana yang sebenarnya dibutuhkan oleh proses, karena:

  • Suatu proses mungkin memiliki kapabilitas X dalam set yang diizinkan dan hanya menaikkannya ke set efektif untuk waktu singkat untuk melakukan operasi istimewa.
  • Suatu proses dapat dimulai dengan rangkaian kemampuan yang lebih luas, melakukan inisialisasi yang memerlukan hak istimewa yang lebih tinggi, dan menghentikan beberapa (atau semua) kemampuan (mis. ping membuka soket mentah).
  • Ini hanya berfungsi untuk proses yang sudah berjalan dengan cara berbasis kemampuan. Bagaimana jika Anda harus menentukan set kemampuan minimal yang diperlukan untuk aplikasi yang baru Anda kembangkan?
  • Itu tidak memungkinkan untuk mengkorelasikan pemeriksaan hak istimewa yang dibuat untuk aplikasi dengan operasi yang dilakukannya, dengan kemampuan Anda mendapatkan stempel waktu untuk pemeriksaan tunggal.

Sumber untuk mampu tersedia di github. Petunjuk penginstalan untuk BCC (termasuk mampu ) tersedia di sini. Untuk keterangan lebih lanjut, silakan merujuk ke posting blog yang disebutkan di awal, harap perhatikan juga bahwa yang mampu membutuhkan kernel 4.4+, alternatif untuk kernel lama juga tersedia di posting blog.

Catatan:Saya bukan penulisnya, saya juga tidak berafiliasi dengan pengembang alat dengan cara apa pun. Saya hanya ingin membawanya ke audiens yang lebih luas, karena saya secara pribadi telah menggunakannya untuk mengembangkan profil kemampuan untuk aplikasi pemantauan kompleks yang sebelumnya memerlukan hak akses root penuh untuk dijalankan, dan menemukan bahwa pelacak ini sangat membantu.


Ternyata lebih mudah dari yang diharapkan. Instal libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) dan gunakan pscap .

Di Ubuntu 16.04, dapat diinstal dengan:

sudo apt-get install libcap-ng-utils

Contoh kutipan keluaran:

ppid  pid   name        command           capabilities
1     468   root        systemd-journal   chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1     480   root        lvmetad           full
1     492   root        systemd-udevd     full
1     1040  root        rpc.idmapd        full
1     1062  root        rpc.gssd          full
1     1184  messagebus  dbus-daemon       audit_write +
1     1209  root        NetworkManager    dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write

Berdasarkan pembaruan libcap2 terbaru

1:(Opsi pendek):getpcaps

Deskripsi:

Dari sini:

getpcaps menampilkan kemampuan pada proses yang ditunjukkan oleh nilai pid yang diberikan pada baris perintah.

Contoh:

$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i

2:(Opsi yang sedikit lebih panjang):/proc status dan capsh

Deskripsi:

proc adalah proses informasi pseudo-filesystem atau dengan kata lain - direktori tempat Anda dapat melihat informasi tentang semua proses.

Tentang capsh:

Dukungan dan penggunaan kemampuan Linux dapat dieksplorasi dan dibatasi dengan alat ini. Alat ini menyediakan pembungkus praktis untuk beberapa jenis pengujian kemampuan dan pembuatan lingkungan.
Ini juga menyediakan beberapa fitur debug yang berguna untuk meringkas status kemampuan.

Contoh:

$ cat /proc/<PID>/status | grep Cap

Dan Anda akan mendapatkan (pada sebagian besar sistem):

CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000  (Ambient capabilities set)

Gunakan capsh utilitas untuk mendekode dari angka heksadesimal ke dalam nama kemampuan:

capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap

(*) Anda dapat mengunduh capsh dengan:sudo apt-get install git libpcap-dev .


Linux
  1. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  2. Linux – Bagaimana Cara Mengetahui Hard Disk Apa yang Ada di Sistem?

  3. Linux – Bagaimana Cara Mengetahui Namespace Dari Proses Tertentu?

  1. Bagaimana cara mengetahui proses apa yang mengunci file di Linux?

  2. Linux:cari tahu proses apa yang menggunakan semua RAM?

  3. Apa perintah untuk menemukan prioritas proses di Linux?

  1. Cara Mengetahui Daftar Semua Port Terbuka di Linux

  2. Versi Linux Apa yang Saya Jalankan? Inilah Cara Mengetahuinya

  3. Bagaimana saya bisa mengetahui hard disk apa yang terpasang pada kotak Linux?