Komut satırı bağımsız değişkenleri de dahil olmak üzere yürütülen tüm komutları günlüğe kaydetmenin kolay bir yolu var mı?


11

Nasıl rrdtoolalır yolun yanlış olup olmadığını görmek için belirli bir örnek günlüğü bulmak için çalışıyorum .

Ben çalıştırılabilir parametreleri günlüğü bir kabuk komut dosyası sarmak olabilir biliyorum, ama bunu izlemek için belki daha belirli bir / proc / pid / exe görür bir dosya sistemi geri arama izlemek için çekirdeğe özgü bir yol olup olmadığını merak ediyordum verilen bir ikili ile eşleşir mi?


auditdProgramın yanı sıra komut satırı argümanlarını kaydetmenin bir yolu var mı ? serverfault.com/questions/765179/…
Neil

Yanıtlar:


16

Evet, bir çekirdek tesis var: denetim alt sistemi. auditdDaemon günlüğü yapar ve komut auditctlgünlüğü kurallarını kurar. Tüm filtrelemeleri, belirli bir filtreyle tüm sistem çağrılarına kaydedebilirsiniz. Yürütülen tüm komutları ve bağımsız değişkenlerini günlüğe kaydetmek istiyorsanız, execvesistem çağrısını günlüğe kaydedin:

auditctl -a exit,always -S execve

Belirli bir programın çağrılmasını özel olarak izlemek için, yürütülebilir programa bir filtre ekleyin:

auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool

Günlükler /var/log/audit.log, veya dağıtımınızın nereye koyduğunu gösterir. Denetim alt sistemini kontrol etmek için kök olmanız gerekir.

Araştırmayı tamamladıktan sonra, bir günlük kaydı kuralını silmek -dyerine ile aynı komut satırını kullanın -aveya auditctl -Dtüm denetim kurallarını silmek için çalıştırın .

Hata ayıklama amacıyla, programı bir sarıcı komut dosyasıyla değiştirmek, ortam, üst işlem hakkındaki bilgiler vb. Gibi şeyleri günlüğe kaydetme konusunda daha fazla esneklik sağlar.


Neden -F path=/ust/bin/rrdtool? rrdtoolİlgili yazılımın bile nasıl olduğunu anlamıyorum .
Graeme

@Graeme Soruda açıklanan sorun bir çağrının izlenmesiydi rrdtool. Tüm programların çağrılarını kaydetmek istiyorsanız, -F path=…bölümü bırakın (elbette çok sayıda günlük alırsınız).
Gilles 'SO- kötü olmayı kes'

Doğru ... sorunun ilk satırı. Teşekkürler.
Graeme

Bu harika, ancak yapılandırmayı başlangıç ​​durumuna nasıl sıfırlarım? Aksi takdirde, günlüğü yeni ve yeni başlatılan komutlarla doldurmaya devam eder ... yoksa bu auditctlkomut yalnızca yeniden başlatılana kadar etkili olur mu?
Ruslan

@Ruslan auditctlSadece yeniden başlatılıncaya kadar hayatta kalır, ama bu yine de iyi bir nokta, cevabımı yeniden başlatmadan bunları kaldırmayla ilgili talimatlar ekledim.
Gilles 'SO- kötü olmayı bırak'

6

Snoopy kullanabilirsiniz .

Snoopy, çekirdek işbirliğine ihtiyaç duymadığı için daha hafif bir çözümdür. Gereken tek şey, yolun belirtildiği snoopy kütüphanesini önceden yükleyen dinamik yükleyici (dl) /etc/ld.so.preload.

Açıklama: Şu anda snoopy bakımcısıyım.


Yalnızca belirli bir kabuktan doğrudan veya dolaylı olarak oluşturulan komutlar için günlük kaydı yapmak mümkün müdür?
rv

Sorunuzu anladığımdan emin değilim - kabuk (bash, tire, zsh vb.) Olarak kullanılan özel bir program olarak "kabuk" mu demek istediniz, yoksa sadece belirli bir PTY'yi kaydetmek mi istiyorsunuz? Snoopy filtreleme çerçevesi sağlar, ancak şu anda yalnızca birkaç temel filtre uygulanmaktadır, liste için buraya bakın: bağlantı . Başkaları için geçerli olabilecek somut bir kullanıcı tabanınız varsa, lütfen özellik isteğinde açıklayın ve oh, btw, yamalar açıktır :)
Bostjan Skufca

Sadece belirli bir PTY demek istedim.
rv

PTY ATM'si için özel bir filtre yoktur. Ancak, etkinliğin gerçekleştiği PTY de dahil olmak üzere her şeyi günlüğe kaydetmek için snoopy'yi kullanabilir ve ardından filtreleme syslog arka plan programınızda yapabilirsiniz. Hangisini kullandığınızı bilmiyorum, ancak syslog-ng (örneğin) normal veya pozitif regex eşleştirmesi yapabilir.
Bostjan Skufca

Tabii, teşekkürler! Araç ve yaklaşım genel olarak oldukça kullanışlıdır. İhtiyacım olanı elde etmek için kolayca filtreleme yapabilirim.
rv

2

Linux çekirdeği "denetim" alt sistemi ihtiyacınız olanı yapabilir.

örneğin, bu komutları çalıştırırsanız:

auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve

Ardından her yürütme olayı günlüğe kaydedilir ve bununla ilgili birçok bilgi sağlanır.

örneğin bu benim koştuğum çıktı tail /var/log/audit/audit.log

exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64):  cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67

Görülebilecek bazı ilginç değerler var; "uid" sıfır olsa bile "auid", giriş kimliğim 500'dür (çünkü altında çalışıyorum su). Bu nedenle, kullanıcı hesapları değiştirmiş olsa da suveya sudoyine de "denetim kimliğini" takip edebiliriz

Şimdi bu auditctlkomutlar yeniden başlatıldığında kaybolacak. Bunları bir yapılandırma dosyasına koyabilirsiniz (örneğin, /etc/audit/rules.d/dizinde, CentOS 7'de). Tam konum işletim sistemi sürümünüze bağlı olacaktır. auditctlManuel sayfa burada yardımcı olmalıdır.

Yine de ... bu çok sayıda günlük iletisinin oluşturulmasına neden olur . Diskte yeterli boş alan olduğundan emin olun!

Gerekirse kurallar belirli bir kullanıcı veya belirli bir komutla sınırlandırılabilir.

Ve ayrıca dikkat edin; bir kullanıcı parolayı komut yürütmesine (örneğin mysql --user=username --password=passwd) koyarsa, bu günlüğe kaydedilir.

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.