Tüm Bash komutları bir sunucudaki tüm kullanıcılar tarafından nasıl kaydedilir?


21

Küçük şirketimiz, birkaç kişinin SSH erişimine sahip olduğu bir Ubuntu Server 11.10 kullanıyor. Gerçek terminaller bazen de kullanılır. Kullanıcı ve zaman damgasıyla birlikte tüm Bash komutlarının çalışmasını nasıl yerel olarak kaydedebiliriz?

Hiç kimsenin ahlaksız olduğunu ve günlüğe kaydetmekten kaçınmaya aktif olarak çalıştığını varsayabiliriz, ancak yine de kullanıcıların günlük dosyalarına doğrudan yazma erişimi olmamasını tercih ederiz. Eşzamanlı oturumlar doğru ele alınmalıdır.

Yanıtlar:


32

BASH kabukları için, sistem genelinde BASH çalışma zamanı yapılandırma dosyasını düzenleyin:

sudo -e /etc/bash.bashrc

Bu dosyanın sonuna ekle:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

"Local6" için günlük kaydını yeni bir dosyayla ayarla:

sudo -e /etc/rsyslog.d/bash.conf

Ve içeriği ...

local6.*    /var/log/commands.log

Rsyslog'u yeniden başlat:

sudo service rsyslog restart

Çıkış Yap. Giriş yap.

Ancak günlük rotasyonunu unuttum:

sudo -e /etc/logrotate.d/rsyslog

Aynı şekilde döndürmek için günlük dosyalarının bir listesi var ...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Bu nedenle, yeni bash komutları günlük dosyasını bu listeye ekleyin:

/var/log/commands.log

Kayıt etmek.


Cevabına eklediğim günlük rotasyonunu unuttum.

1
Bu şekilde çalışır, ancak çevresinde bir yöntem icat edebilirim (belki de csh, .bash_logout ile). Sabacon'un acct çözümü ile giderdim. Bunlar mükemmel okumalardı: linuxjournal.com/article/6144 ve beginlinux.com/blog/2010/01/…

2
PROMPT_COMMANDBash olmayan bir kabuğa basitçe sıfırlayarak veya ayarlayarak veya kullanıcı tarafından kolayca devre dışı bırakılabileceğine inanıyorum .
Stefan Lasiewski

1
@Benubird, 8 tanesi yerel0-local7: en.wikipedia.org/wiki/Syslog olan birkaç önceden ayarlanmış tesis seviyesi var gibi gözüküyor . 0, acil durum anlamına gelir, 7 hata ayıklama anlamına gelir ve 6, yalnızca 7 normal utangaç mesaj olan utangaçtır.
munchybunch

1
@yukashima silinirse kütükler büyük dosyalar haline gelebildiğinden, kütüklerin döndürülmesi ve kütüklerin küçük tutulması için eskilerin silinmesi anlamına gelir ...
Badr Elmers

4

Bir süreç muhasebe sistemi bu konuda, özellikle lastcomm ve ac komutlarını sağlayan hesap paketi yardımcı olabilir.

Ac komutları kullanıcıların bağlantı süresi hakkındaki istatistikleri saat cinsinden yazdırır. Bu, kullanıcının sisteme, SSH veya seri terminal yoluyla veya konsoldayken uzaktan bağlanma süresidir.

Lastcomm komutu, daha önce yürütülen komutlarla ilgili bilgileri görüntüler. En yeni girişler listenin başında verilmiştir. Ayrıca, görüntülenen her işlem için kullanılan toplam CPU süresidir.

Yararlı olabilecek eski bir eğitim burada:

http://www.linuxjournal.com/article/6144?page=0,1

Son ve benzeri diğer muhasebe komutları bu eğiticide bulunabilir:

http://www.techrepublic.com/article/system-accounting-in-linux/1053377


lastcomm bir komut günlüğü olarak oldukça anlamsız. Yalnızca çalıştırılan yürütülebilir dosyayı kaydeder. Hiçbir argüman, anahtar veya yol kaydedilmez.
Phil_1984_

3

Snoopy kullanabilirsiniz .

Snoopy logger amacınıza uygun olabilir. Kaçınılmaz bir kayıt çözümü değildir, kendi eylemlerini takip etmeyi tercih eden gayretli yöneticiler için faydalı bir araçtır.

Açıklama: Ben meraklıyım.


Lütfen cevap olarak kurma ve kullanma hakkında talimatlar sağlayın.
muru

1
Ayrıntılı kurulum talimatları şu anda ana snoopy kaynağı olan snoopy github sayfasında bulunmaktadır: github.com/a2o/snoopy . Birincil konum tasarım tarafından sağlandığı ve diğerleri olmadığından, başka yerlerde kurulum talimatları sağlıyorum. BTW Benioku daha yapılandırılmış olması için güncellendi.
Bostjan Skufca

1
Belki bu yüzden. Ancak, bunu kullanmak için gereken adımların bir özeti olmadan, bu sadece bağlantı içeren bir cevaptır ve silinmesi muhtemeldir.
muru

1
Alternatif ve uygulanabilir bir çözüme işaretçi oldum. Bu sitenin amacı bu değilse, elbette hesabımla birlikte silinmesi gerekir.
Bostjan Skufca

2
@BostjanSkufca rahatsız edilmenize gerek yok. Sadece en azından makul bir şekilde kendi kendine yeten cevapları olan bir Stack Exchange olayı. Adım eklemeye şiddetle karşı çıkıyorsanız, dileğiniz budur. Benim oyum kaldı. Birisi muhtemelen onu oylayacak.
muru

3

Yama veya özel bir çalıştırılabilir araç kullanmadan tüm bash komutlarını / yerleşiklerini bir metin dosyasına veya syslog sunucusuna kaydetmek için burada bir komut dosyası bulabilirsiniz .

Dağıtımı çok kolaydır, çünkü bash'ın başlatılması sırasında bir kez çağrılması gereken basit bir kabuk betiğidir .

Ücretsizdir ve umarım ihtiyaçlarınızı karşılar.


1
Bu iyi bir cevaptır, ancak blogunuzu bağlamak yerine adımları ve komut dosyasını yanıtın gövdesine eklemeniz tercih edilir. Lütfen bunu eklemek için cevabınızı düzenler misiniz?
Tom Brossman

2
Site şu anda kullanılamıyor
Gaia

0

Geçmiş dosyasını geçersiz kılmayan birden fazla oturuma bakmak için "shopt -s histappend" dosyasını bir Bash başlangıç ​​dosyasına koymak zorunda kalacaksınız. Ayrıca aynı soruyla ilgili bu soruya bakın .


0

Bunu deneyin (yukarıdaki çözümler bash 4.3 ile% 100 çalışmayacak):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

bu işlem günlük kaydı yapar ve bash geçmişi dosyası için kullanılan zaman damgalarının kaydedilmesini önler. tuzak gereklidir, çünkü bash, strg + c tuşlarına birkaç kez bastıktan sonra sinyalleri "subjob" a gönderir (bash 4.3 ile test edilmiştir). bu, geçerli kullanıcının oturumunu kapatmaya zorlar (örneğin, sudo ile giriş yaptı).


0

Ayrıca acct yüklemeyi deneyebilirsiniz. Acct, Linux sisteminizde neler yapıldığı konusunda ayrıntılı bir denetim izi tutar.

sudo apt-get install acct
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.