Linux'ta kullanıcım tarafından oluşturulan yürütülebilir dosyaları nasıl izleyebilirim?


11

Linux'u kullanarak, tüm komut satırı (uygulamada, kendi kullanıcı olarak yapılan her exec * ()) dahil olmak üzere, adımda yürütülen yürütülebilir dosyaları izlemek istiyorum. Kontrol etmediğim bir programın, bir görevi yerine getirmek için, geçtiğim programı yürütmesi gerekiyor, ancak bunu yaptığından ve hangi seçenekleri kullandığından emin olmak istiyorum. Kontrol etmediğim program sinsi ve görev için yürütmesi gereken programın adına bağlı olarak davranışı değiştiriyor gibi görünüyor, bu yüzden bilgileri günlüğe kaydedecek ve gerçekleri çağıracak bir kabuk betiğine geçemiyorum programı.

Tam komut satırı da dahil olmak üzere Linux üzerinde sistemimde kullanıcı olarak yaptığım tüm exec * () işlemlerinden haberdar olmam mümkün müdür? psBir döngüde çalışma yetersizliği. Doğrudan üzerinde çalıştığım ve root erişimi gerektirmeyen sistemde yapmayı tercih ederim, ancak gerekirse root erişimine sahip olduğum bir sistemi oluşturabilir, programları yükleyebilir ve orada araştırabilirim.

Ubuntu 12.4 LTS Kullanımı.


Burada gerçek bir Ubuntu sorusundan daha çok Unix / Linux sorusu olduğu için Ask Ubuntu yerine soruyorum.
Pierre Lebeaupin

1
Program ne kadar sinsi? Hata ayıklayıcıları algılamaya veya atlamaya çalışıyor mu? Dinamik olarak bağlantılı mı? Çok sinsi ise, kökünüzde bir sanal makine kullanmanız gerekebilir. (Bu özellikle sinsi olmayan bir program için bile en basit strateji olabilir.)
Gilles 'SO- kötü olmayı bırak'

@Gilles Bu gerçekten bir olasılık, bir sanal makine deneyeceğim, sonra çalışılabilir olduğu ortaya çıkarsa soruyu güncelleyeceğim.
Pierre Lebeaupin

Not: cevabın verdiği program adı ve argümanlarını gerçekten istiyormuş gibi görünüyorsunuz audit, ancak kabuktaki bir 'tüm komut satırı', yönlendirme / genişletme ve envvar ayarlarını kullanarak alt işlemleri de etkileyebilir, ayrıca ikame / genişletme, önemsiz alıntı içerir ve boşlukları ve kontrol yapılarını doa && dobve bunları elde edemezsiniz.
dave_thompson_085

Yanıtlar:


10

Olayları auditdkaydetmek için yapılandırmanız gerekir execve. RHEL5 ile ilgili örnek:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]#

Kemer uyarısını görmezden geliyorum ve önemli değil ama isterseniz -F arch=b64ya -F arch=b32da ayarlamak için kullanabilirsiniz .

Yukarıdakilerin sonucu:

[root@ditirlns01 ~]# ls /tmp/whatever
ls: /tmp/whatever: No such file or directory
[root@ditirlns01 ~]# grep whatever /var/log/audit/audit.log
type=EXECVE msg=audit(1386797915.232:5527206): argc=3 a0="ls" a1="--color=tty" a2="/tmp/whatever"
type=EXECVE msg=audit(1386797927.133:5527241): argc=3 a0="grep" a1="whatever" a2="/var/log/audit/audit.log"
[root@ditirlns01 ~]#

Açıkçası hızlı ve kirli ama bunu yapmanın temelleri bu. Tam olarak yapmanız gereken şey büyük olasılıkla tam olarak ne yapmaya çalıştığınıza bağlıdır. Komuttaki çeşitli filtreleri kullanarak denetim akışını azaltabilirsiniz, auditctlancak bu bilgilerin hiçbirini bilmiyorum, bu yüzden ne ekleyeceğimi bilmiyorum. Daha spesifik bir şeye ihtiyacınız varsa, ya man sayfasını kontrol etmenizi ya da bu cevaba bir yorum göndermenizi öneririm ve biraz daha güncelleyeceğim.

Umarım bu sizi doğru yöne itmeye yardımcı olur.

DÜZENLE:

Sorunuz belirli bir kullanıcıya bakmayı içerdiğinden size şunu gösterebilirim:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F euid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

Yukarıdakilerin aynısı, ancak yalnızca execveetkin kullanıcı kimliğiyle çalışan biri tarafından 16777216günlüğe kaydedilir. Kullanıcının loginuiddeğerini belirtmeniz gerekiyorsa (sistemde başlangıçta kime giriş yaptıklarını), ardından filtrelemeniz gerekir auid:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

AUID / loginuid filtreleri, örneğin kullanıcı bir suveya sudoroot atacaksa yararlı olacaktır . Bu durumda kök olarak çalışan bir çok şey olacaktır, ancak yalnızca söz konusu kullanıcı tarafından başlatılan şeylerle ilgileniyorsunuz. auditctlHer iki göre filtreleme yapabilirsiniz böylece de size yığın filtreleri sağlar euidve auid:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216 -F euid=0
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]# ls /tmp/nashly -ltar
ls: /tmp/nashly: No such file or directory
[root@ditirlns01 ~]# grep nashly /var/log/audit/audit.log
type=EXECVE msg=audit(1386798635.199:5529285): argc=4 a0="ls" a1="--color=tty" a2="/tmp/nashly" a3="-ltar"
type=EXECVE msg=audit(1386798646.048:5529286): argc=3 a0="grep" a1="nashly" a2="/var/log/audit/audit.log"

1
“Kök erişimim olmadığını unutmayın”. (Aksi takdirde bu iyi bir yanıt olacaktır.)
Gilles'in 'SO- kötü olmayı bırak'

Lanet olsun ... çok yakın ...
Bratchley

Teşekkürler, işe yaradı. Ben apt-get ile auditctl kurmak zorunda olduğunu eklemeliyim, Ubuntu önceden yüklü değildi.
Pierre Lebeaupin

Teşekkürler. Güzel örnekler. Ancak çıkış kodunu denetim günlüğünden çıkarmanın bir yolu var mı?
Kaos

0

Basit bir şey istediniz. Ben bir örnek yaptım mplayerama sanırım diğer durumlara uyarlanabilir:

#! /bin/sh
# This executable must be used instead of /usr/bin/mplayer
# do not forget the chmod +x filename...
LOG=/tmp/mplayer.log
echo "$@" >> $LOG
if [ -n "$1" ] && [ -f "$1" ] ; then
        filename="$1"
        echo "$(date "+%F %T") $(basename "$filename")" \
        | tee -a "$(dirname "$filename")/mplayer.log"  >> $LOG
fi
/usr/bin/mplayer "$@"

Gördüğünüz gibi çok basit: Bir dosya olduğu için ilk argümanı ayrıştırır, merkezi dosyaya bir günlük yapılır $LOGve bir dosyaya (her zaman mplayer.logaynı dizinde aynı ada sahip olan) birleştirilir .

Böylece, kullanıcı her dizinde okuduğu en son filmi alabilir.


Q özellikle bir betiğin değiştirilmesinin işe yaramayacağını söyledi.
dave_thompson_085

Mümkün, ama bu durumum için daha iyi uyuyor: Güvenlik sorunum yok ve çalıştırdığım senaryoyu seçebilirim. Göründüğü kadar inanılmaz, bu en basit en basit çözümü olsa da, belki de sadece birileri sadece ineklere gitmemekle ilgilenecek. Önceki çözümün daha güvenli olduğunu itiraf ediyorum!
MUY Belçika
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.