Bir süreci Linux'ta `ps` ya da` top` listesinden 'gizlemek' mümkün müdür?


10

İlk olarak, eğer mümkünse kök (veya kök UID'sini 0 paylaşan bir kullanıcı) olarak yapılması gerektiğini varsayıyorum.

Nasıl bir süreç bu gösterilmesini kalmaması başlatılabilir ps auxya ps efya topkomut dışı root tarafından çalıştırılırsa listeleme?

Bu mümkün mü?

Genelde çalıştırdığım dağıtımlar RHEL / CentOS ve Ubuntu'dur - bu nedenle, distro-spesifik bir cevap varsa, bu da iyidir.


warren: Buna bir çözüm buldunuz mu?
Chris

@Chris - hayır ... @ fianchetto'nun cevabı tek rota gibi görünüyor ve bu benim rahat bir girişim olduğumdan çok daha fazla iş: - |
warren

Bu projeyi üstleneceğim ve belirlediğim her şeyi rapor edeceğim.
Chris

Yanıtlar:


5

Burada birkaç seçeneğiniz var. Kolay çıkış yolu, gizlemek istediğiniz şeyi gizleyen değiştirilmiş sürümlerle ps ve en iyi programları değiştirmek olacaktır.

Alternatif olarak, kodunuzu mevcut bir sürece gömülü olarak çalıştırmak veya kodunuzun etrafına zararsız bir adla bir sarmalayıcı komut dosyası yazmak olabilir.

PS'nin bazı sürümlerinde, argv [] öğesini değiştirerek değiştirebilirsiniz, ancak bunun üstte işe yarayıp yaramadığından emin değil ve linux'da çalışıp çalışmadığından emin değilsiniz (Bu çoğunlukla BSD kuralıdır).

Her şey, bunu yaparak tam olarak neyi başarmak istediğinize bağlıdır?


buradaki amacım, kök tarafından oluşturulan işlemlerin tüm kullanıcılar tarafından görülememesidir (belki güvenlikle ilgili cinler veya benzeri)
warren

@flanchetto Peki, zaten çalışmakta olan bir programım varsa ve daha sonra parolanın güvenli bir şekilde verileceği aynı işlemde bir parola içeren bir komut satırı komutu çalıştırdığını söylüyor musunuz? örn. run python myScript.pyve tüm subprocess.Popenkomutlar (şifreler içerebilir veya içermeyebilir), aynı işlem olduğu sürece gösterilmez mi?
Brōtsyorfuzthrāx

Her neyse, bu çalışmıyor (sadece denedim ve şifreyi gördüm). Yani, başka bir şey ifade ettiğini varsayıyorum. Açıklığa kavuşturmaktan çekinmeyin. :)
Brōtsyorfuzthrāx

13

Çekirdek düzeltme ekine http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 göre , proc dosya sistemi için hidepid seçeneğini kullanabilirsiniz:

hidepid = 0 (varsayılan) eski davranış anlamına gelir - herkes dünya tarafından okunabilir / proc / PID / * dosyalarını okuyabilir.

hidepid = 1, kullanıcıların herhangi bir / proc // dizinine erişemeyebileceği, ancak kendi dizinlerine erişebileceği anlamına gelir. Cmdline, sched *, status gibi hassas dosyalar artık diğer kullanıcılara karşı korunmaktadır. Proc_pid_permission () 'de izin denetimi yapıldığından ve dosyaların izinlerine dokunulmadığından, belirli dosyaların modlarını bekleyen programlar karıştırılmaz.

hidepid = 2, hidepid = 1 artı all / proc / PID / öğesinin diğer kullanıcılar tarafından görülemeyeceği anlamına gelir. Bu, bir sürecin var olup olmadığını gizlediği anlamına gelmez (başka yollarla, örneğin kill -0 $ PID ile öğrenilebilir), ancak sürecin euid ve egid'i gizlediği anlamına gelmez. Davetsiz misafirin çalışan süreçler, bazı arka plan programının yükseltilmiş ayrıcalıklarla çalışıp çalışmadığı, başka bir kullanıcının hassas bir program çalıştırıp çalıştırmadığı, diğer kullanıcıların herhangi bir program çalıştırıp çalıştırmadığı hakkında bilgi toplama görevini derler.

gid = XXX, tüm işlemlerin bilgilerini toplayabilecek bir grup tanımlar (hidepid = 0 modunda olduğu gibi). Kök olmayan kullanıcıyı sudoers dosyasına falan koymak yerine bu grup kullanılmalıdır. Ancak, tüm sistemdeki görevleri izlememesi gereken güvenilmeyen kullanıcılar (arka plan gibi), gruba eklenmemelidir.

Görünürlüğü işlem düzeyinde kontrol edemezsiniz, ancak kullanıcılarınızın yalnızca kendi işlemlerini görebilmelerini sağlayabilirsiniz.

Çekirdek sürümünüz 3.3'ten büyükse, aşağıdaki komutla deneyebilirsiniz:

 
mount /proc -o remount,hidepid=2


Bir hidepid=2şeyi yalnızca belirli kullanıcıları etkileyecek şekilde sınırlandırabilir misiniz (veya belirli kullanıcıları beyaz listeye ekler)?
Brōtsyorfuzthrāx

Harika çalışıyor! Benim sorunum bir cron komut dosyası kullanarak bir sunucuya bağlanma ve herhangi bir kullanıcı "htop" (örneğin) kullanarak kimlik bilgilerini görmek mümkün oldu. "Hidepid = 2" kullanıcı olarak ayarlamak, aradığım şey olan diğer kullanıcılar tarafından başlatılan işlemleri göremez. Neden varsayılan olarak ayarlanmamış?
lepe

@ lepe muhtemelen eski nedenlerden dolayı. Bu ve bu kırmak ve bu nedenle (henüz) her yerde kullanılamaz.
Florian Wendelborn

OP sadece diğer kullanıcılara değil, genel olarak görünmez olmasını istedi ...?
phil294

Yalnızca belirli kullanıcılar tarafından oluşturulan işlemleri gizlemenin bir yolu var mı? Örneğin. root?
Avery235

-2

üstte F komutunu ve n görmek istediğinizi yapılandırmak için n komutunu kullanın. ~ / .toprc - use? üst komutları görmek için. Bu, sorununuzu hızlı bir şekilde çözebilir - benim için yaptı. F ile görmek istediğim alanları ekleyebilir / kaldırabilirim, f'de sıralamayı ayarlamak için s tuşunu, sonra da ekrana geri dönmek için q tuşunu kullanabilirsiniz. sonra n görmek istediğiniz işlemleri ayarlamak için ve W .toprc kaydetmek için


Bu sadece benim görüşüme göre bir şey gizler
warren
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.