Apakah mungkin untuk 'menyembunyikan' suatu proses dari daftar `ps` atau` top` di Linux

10

Pertama, saya berasumsi bahwa jika ini mungkin perlu dilakukan sebagai root (atau sebagai pengguna yang berbagi UID root dari 0).

Bagaimana proses diluncurkan agar tidak muncul di a ps auxatau ps efatau topdaftar jika perintah dijalankan oleh non-root?

Apakah ini mungkin?

Distribusi yang biasanya saya jalankan adalah RHEL / CentOS dan Ubuntu - jadi jika ada jawaban khusus untuk distro, itu juga oke.

warren
sumber
warren: Pernah menemukan solusi untuk ini?
Chris
@ Chris - tidak ... @ jawaban fianchetto tampaknya menjadi satu-satunya rute, dan itu lebih banyak pekerjaan daripada yang saya lakukan: - |
warren
Saya akan melakukan proyek ini dan akan melaporkan kembali dengan apa pun yang saya tentukan.
Chris

Jawaban:

5

Nah, Anda punya beberapa opsi di sini. Mengambil jalan keluar yang mudah adalah dengan menukar ps dan program teratas dengan versi modifikasi yang menyembunyikan apa yang ingin Anda sembunyikan.

Alternatifnya adalah dengan menjalankan kode Anda yang tertanam dalam proses yang ada, atau menulis skrip pembungkus di sekitar kode Anda dengan nama yang tidak berbahaya.

Di beberapa versi PS, Anda dapat memodifikasinya dengan mengubah argv [], tetapi tidak yakin apakah itu berfungsi untuk top, dan tidak yakin apakah itu berfungsi di linux (Terutama konvensi BSD).

Itu semua tergantung, pada apa yang ingin Anda capai dengan melakukan ini?

fianchetto
sumber
tujuan saya di sini adalah untuk proses yang dihasilkan oleh root agar tidak terlihat oleh semua pengguna (mungkin daemon yang berhubungan dengan keamanan atau serupa)
warren
@flanchetto Jadi, apakah Anda mengatakan jika saya memiliki program yang sudah berjalan dan nanti menjalankan perintah-perintah dengan kata sandi di dalamnya dalam proses yang sama bahwa kata sandi akan diberikan dengan aman? mis. jalankan python myScript.pydan semua subprocess.Popenperintah (yang mungkin atau mungkin tidak mengandung kata sandi) tidak ditampilkan, asalkan prosesnya sama?
Brōtsyorfuzthrāx
Bagaimanapun, itu tidak berhasil (saya hanya mencobanya dan melihat kata sandi). Jadi, saya berasumsi Anda berarti sesuatu yang lain. Jangan ragu untuk menjelaskan. :)
Brōtsyorfuzthrāx
13

Menurut tambalan kernel http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , Anda dapat menggunakan opsi hidepid untuk sistem file proc:

hidepid = 0 (default) berarti perilaku lama - siapa pun dapat membaca semua file yang dapat dibaca / proc / PID / *.

hidepid = 1 berarti pengguna tidak dapat mengakses direktori / proc // apa pun, tetapi milik mereka sendiri. File sensitif seperti cmdline, sched *, status sekarang dilindungi terhadap pengguna lain. Karena pemeriksaan izin dilakukan dalam proc_pid_permission () dan izin file tidak tersentuh, program yang mengharapkan mode file tertentu tidak bingung.

hidepid = 2 berarti hidepid = 1 ditambah semua / proc / PID / tidak akan terlihat oleh pengguna lain. Itu tidak berarti bahwa ia menyembunyikan apakah suatu proses ada (dapat dipelajari dengan cara lain, misalnya dengan membunuh -0 $ PID), tetapi menyembunyikan proses 'euid dan egid. Ini mengkompilasi tugas penyusup untuk mengumpulkan info tentang proses yang sedang berjalan, apakah beberapa daemon berjalan dengan hak yang lebih tinggi, apakah pengguna lain menjalankan beberapa program sensitif, apakah pengguna lain menjalankan program apa pun, dll.

gid = XXX mendefinisikan grup yang akan dapat mengumpulkan info semua proses (seperti dalam mode hidepid = 0). Grup ini harus digunakan alih-alih menempatkan pengguna nonroot dalam file sudoers atau sesuatu. Namun, pengguna yang tidak dipercaya (seperti daemon, dll.) Yang tidak seharusnya memantau tugas-tugas di seluruh sistem tidak boleh ditambahkan ke grup.

Anda tidak dapat mengontrol visibilitas pada tingkat proses namun Anda dapat memastikan bahwa pengguna Anda hanya dapat melihat proses mereka sendiri.

Jika Anda memiliki versi kernel lebih besar dari 3,3 Anda dapat mencoba dengan perintah berikut:

 
mount /proc -o remount,hidepid=2

uha
sumber
Bisakah Anda membatasi hidepid=2hal itu sehingga hanya memengaruhi pengguna tertentu (atau jadi membuat daftar putih pengguna tertentu)?
Brōtsyorfuzthrāx
Bagus sekali! Masalah saya adalah bahwa saya terhubung ke server menggunakan skrip cron dan setiap pengguna dapat melihat kredensial menggunakan "htop" (misalnya). Pengaturan ke "hidepid = 2" pengguna tidak dapat melihat proses yang diluncurkan oleh pengguna lain yang saya cari. Mengapa tidak diatur secara default?
lepe
@ Lepe mungkin karena alasan warisan. Akan mematahkan ini dan itu dan karena itu tidak dapat (belum) digunakan di mana-mana.
Florian Wendelborn
OP meminta pid tidak terlihat secara keseluruhan, bukan hanya untuk pengguna lain ...?
phil294
Apakah ada cara untuk menyembunyikan proses yang dibuat oleh pengguna tertentu saja? misalnya. root?
Avery235
-2

gunakan perintah F di atas dan perintah n, misalnya untuk mengkonfigurasi apa yang ingin Anda lihat. gunakan perintah W untuk menulis konfigurasi yang Anda suka ~ / .toprc - use? untuk melihat perintah teratas. Ini dapat memecahkan masalah Anda dengan cepat - itu terjadi pada saya. Dengan F saya dapat menambah / menghapus bidang yang ingin saya lihat, sedangkan di f dapat menggunakan s untuk mengatur jenis, lalu q untuk kembali ke tampilan. lalu n untuk mengatur berapa banyak proses yang ingin saya lihat dan W untuk menyimpan ke .toprc

JamesD
sumber
Itu hanya menyembunyikan sesuatu dalam pandangan saya
warren