Her linux komutu bir günlük sunucusuna nasıl kaydedilir


13

Yazılan her komutun bir günlük sunucusuna gitmesini istiyorum. Tüm günlükleri günlük sunucusuna gönderecek olan sistem günlüğü zaten yapılandırılmıştır.

Bunu yapmak için her türlü yöntemle ilgileniyorum. Ben sahtekar kullanıcılar ve güvenlik hakkında bazı tartışmalar beklenir ama ilk birincil amacı oturumları oturum almak için basitçe. Tüm oturumlar ssh üzerindedir ancak konsol bağlantı komutları da günlüğe kaydedilmelidir. Bunun herhangi bir kabuk için olmasını istiyorum ama birincil olan bash. (Yine, haydut bir kullanıcının kendi kabuğunu oluşturabileceğini biliyorum ...)

Yanıtlar:


29

Soruna bu şekilde yaklaşmıyorsunuz. Bir kullanıcıya kabuk erişimi verdiğinizde, kullanıcının uygun izinlere sahip olduğu her şeyi yapmasını emredersiniz. Komut günlüğünü unutun, herhangi bir Unix sisteminde komut yürütmenin çok fazla yolu vardır.

Örneğin, kullanıcı bir posta istemcisi başlatabilir ( pineörneğin, kaydedilen tek komut , burada VI'yı başlatan "Oluştur" u seçer ve VI'dan istediği komutu başlatır :!cmd. Bu komut hiçbir yere kaydedilmez ve sistem açısından bakıldığında VI tarafından grep veya sort gibi çağrılan herhangi bir yardımcı uygulama gibidir. Kabuk tarafından kaydedilen tek komut şuydu pine.

Görünüşe göre aslında istediğiniz şeye denetim denir . Denetim alt sistemini etkinleştirin ve nelerin günlüğe kaydedileceğini denetlemek için denetim paketindeki auditctlkomutu ve auditdarka plan programını kullanın . Daha fazla bilgi auditctl (8) kılavuz sayfasındadır.

Her işlem örneğinin günlüğe kaydedilmesinin de uygun olmayabileceğini unutmayın. Örneğin, ./configurebir yazılım paketi için basit (otomatik araçlar kullanılarak oluşturulmuş) binlerce işlem örneği oluşturmak için dikkate değerdir. Bu, denetim günlüğünü o kadar fazla sesle dolduracak ki, daha sonra analiz etmek çok zorlaşacaktır.


13

acctPaketi yükleyin (paket adı dağıtım hesaplamasına göre değişir, işlem muhasebesi olarak da bilinir) ve kullanın lastcomm <username>:

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Ayrıca tty veya komut adına göre de arama yapabilirsiniz. Her zamanki gibi man lastcommdaha fazla bilgi için.


11

Biraz C programlama yapmak istiyorsanız, bunu yürütme, syslog günlükleri ve daha sonra gerçek execys syscall içeren kitaplığı dlopen bir kütüphane yazarak yapabilirsiniz. Daha sonra / etc / ortamında LD_PRELOAD ayarını yaptığınız kitaplığın yoluna ayarlayın.

Buraya bir döngü girme konusunda dikkatli olmak istersiniz, bu nedenle yalnızca belirli ikili dosyaların exec'larını günlüğe kaydetmek veya diğerlerinin (syslog gibi) günlüğe kaydedilmesini engellemek isteyebilirsiniz.


Aslında, bu oldukça faydalı. Yürütme sarıcı ilk arama snoopy ( sourceforge.net/projects/snoopylogger ) getirir . Biraz ayrıntılı olmasına rağmen aradığım şeye yakın görünüyor. Test ettikten sonra, bunu bir üretim ortamına koymak için yönetim onayına ihtiyacım olacağını görüyorum. (Tüm hain tiplerine bir uyarı)
Leo

@Leo Sürüm 2.0.0 Snoopy, ./configure yaparken özel günlük biçimi belirtimini desteklediğinden, fazla ayrıntı artık bir sorun olmamalıdır. Açıklama: Snoopy sürdürücü burada.
Bostjan Skufca

7

Eğer böyle bir şey arıyorsanız gibi bana Sesler rootsh ( man sayfası ). Kılavuz sayfasını alıntılamak için:

Rootsh, tüm yankılanmış tuş vuruşlarını ve terminal çıkışını bir dosyaya ve / veya sistem günlüğüne kaydeden kabuklar için bir sarıcıdır.

İsme rağmen, bu herhangi bir kullanıcı için kullanılabilir.


2

Muhtemelen kullanıcıların önem verdiğiniz komutları çalıştırmak için sudo (veya benzeri) kullanmalarını ve bir düzeyde kullanıcılara güvenmelerini sağlamanız daha iyi olur. Bir şeyleri "tamamen kontrol etmeye" yaklaştıkça, yaptıklarını takip etmek zorlaşır. Son zamanlarda bunun gibi araçlara bakıyorum, örneğin. Çoğunlukla böyle bir şeyi değerli kılmak için yeterli kullanıcı ve makineniz varsa yönetilmesi zor olan günlükler oluştururlar. :)

Üreteceğiniz tüm bilgileri göz önünde bulundurun. Ne kadar önemsiyorsun? Muhtemelen çok az - yani çoğunlukla değersiz günlükler üretiyorsunuz. Aslında önem verdiğiniz şeyleri denetlemek, başkalarının önerdiği gibi, muhtemelen sizi daha iyi bir son duruma götürür.


1

Bash, 4.1'den beri sistem günlüğü desteği ile derlenebilir.

Kusursuz değildir (bunun için süreç muhasebesi daha iyi olabilir), ancak çoğunlukla kullanıcı etkileşimi; ses daha yönetilebilir olmalıdır ve anormal bir şey olduğundan şüpheleniyorsanız daha ayrıntılı bir şeye geçebilirsiniz.

Bununla birlikte, bu çok müdahaleci ve kullanıcı olarak bunu yapmaya başlamadan önce çok özel bir gizlilik uyarısı beklerdim.


0

Ayrıca oturum günlüğü yapacak sudosh ( http://sudosh.sourceforge.net ) var. Bir kullanıcı için veya sudo üzerinden tanımlı bir kabuk olarak çalıştırma seçeneğiniz vardır. Her oturum için zamanlamaları da izler, böylece oturumu tekrar oynatabilir ve izleyebilirsiniz (oturumları düzenleme ve ne dahil değil).

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.