Üretim sunucularında yöneticiler tarafından çalıştırılan tüm komutları günlüğe kaydet


70

Yöneticilerin sunuculara kişisel bir kullanıcı adıyla giriş yapıp ardından sudo -iroot olmak için şirket politikasıdır . Çalıştıktan sonra sudo -i, sudo SUDO_USER, asıl kullanıcının kullanıcı adını içeren çevresel bir değişken yaratacaktır .

Aşağıdaki komutları aşağıdaki sözdizimine benzer bir şeyle syslog içindeki TÜM komutları kaydetmenin bir yolu var mı :

${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}

Örnek bir giriş:

Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg

Açıkçası, tam olarak yukarıdaki sözdizimi olmak zorunda değildir, sadece asgari bir kullanıcı (örn. Root), sudo kullanıcısı (örn. Ksoviero) ve çalıştırılan tam komut (örn. Yum) içermelidir. rastgele-pkg yükleyin).

Zaten denedim snoopy, ancak SUDO_USERdeğişkeni içermiyordu .


13
İhtiyacın var auditd.
Michael Hampton


1
Biri lütfen bunu cevap olarak gönderebilir mi? Lütfen kullanıcılar tarafından çalıştırılan tüm komutları kesin olarak nasıl günlüğe kaydedeceğimi de ekleyin. "Auditd'e kısa giriş" faydalı oldu, ancak gerçek komutları kaydetmeyle ilgili hiçbir şey içermiyordu (bildiğim kadarıyla).
Soviero

1
Tamam, oynamaya başladım auditdve çalışmakta olan tüm komutları günlüğe kaydetmeyi öğrenirken, SUDO_USERdeğişkeni (ya da eşdeğer bilgiyi) içermiyor ve dahil etmek için bir yol bulamıyorum. Herhangi bir yardım çok takdir edilecektir!
Soviero

1
Ve şirket ne olacak yapmak yöneticiler tarafından girilen tüm komutların bu kayıtla?
ewwhite

Yanıtlar:


82

Güncelleme : Yorumlarda ve takip sorularında ortaya çıkan 2 şey daha:

  • auditdBu şekilde kullanılması , özellikle sistem komut satırı üzerinden yoğun olarak kullanılıyorsa, günlük hacminizi önemli ölçüde artıracaktır. Günlük tutma politikanızı ayarlayın.
  • AuditdOluşturuldukları ana bilgisayardaki günlükler aynı kutudaki diğer dosyalar kadar güvenlidir. Günlüklerinizi bütünlüğünü korumak için günlüklerinizi ELK veya Graylog gibi uzak bir günlük toplama sunucusuna iletin. Ayrıca, yukarıdaki noktaya ek olarak, eski günlükleri daha agresif bir şekilde silmenize olanak tanır.

Michael Hampton tarafından önerildiği gibi, auditdburadaki iş için doğru araçtır.

Bunu bir Ubuntu 12.10 kurulumunda test ettim, bu nedenle kilometreniz diğer sistemlere göre değişebilir.

  • Yükleyin auditd:

    apt-get install auditd

  • Bu 2 satırı şuraya ekle /etc/audit/audit.rules:

    -bir çıkış, her zaman -F kemer = b64 -F euid = 0 -S yürütme
    -bir çıkış, her zaman -F kemer = b32 -F euid = 0 -S yürütme

Bunlar root ( euid=0) tarafından çalıştırılan tüm komutları izler . Neden iki kural? Sistem execve, hem 32 hem de 64 bit kodunda izlenmelidir.

  • Kayıtlardaki auid=4294967295mesajlardan kurtulmak audit=1için çekirdeğin cmdline'ına ekleyin (düzenleyerek /etc/default/grub)

  • Satırı yerleştir

    session required pam_loginuid.so

login ( /etc/pam.d/{login,kdm,sshd}) ile ilişkili tüm PAM yapılandırma dosyalarında , ancak suveya ile ilgili dosyalarda değil sudo. Bu sağlayacaktır auditdçağıran kullanıcının almak için uidçağrılırken doğru sudoya su.

  • Sisteminizi şimdi yeniden başlatın.

  • Giriş yapıp bazı komutları çalıştıralım:

    $ id -u
    1000
    $ sudo ls /
    bin önyükleme veri dev vb ev initrd.img initrd.img.old lib lib32 lib64 kayıp + bulundu medya mnt opt ​​proc kök çalıştırma sbin çizik selinux srv sys tmp usr var vmlinuz vmlinuz.old
    $ sudo su -
    # ls / etc
    [...]

Bu, şunun gibi bir şey üretecektir /var/log/audit/auditd.log:

----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.239:576): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.239:576): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.239:576):  cwd="/home/user"
type=EXECVE msg=audit(1359968226.239:576): argc=2 a0="ls" a1="/"
type=SYSCALL msg=audit(1359968226.239:576): arch=c000003e syscall=59 success=yes exit=0 a0=10cfc48 a1=10d07c8 a2=10d5750 a3=7fff2eb2d1f0 items=2 ppid=26569 pid=26570 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)
----
time->Mon Feb  4 09:57:06 2013
type=PATH msg=audit(1359968226.231:575): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968226.231:575): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968226.231:575):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968226.231:575): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968226.231:575): argc=3 a0="sudo" a1="ls" a2="/"
type=SYSCALL msg=audit(1359968226.231:575): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26569 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.523:578): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.523:578): item=0 name="/bin/su" inode=44 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.523:578):  cwd="/home/user"
type=EXECVE msg=audit(1359968229.523:578): argc=2 a0="su" a1="-"
type=SYSCALL msg=audit(1359968229.523:578): arch=c000003e syscall=59 success=yes exit=0 a0=1ceec48 a1=1cef7c8 a2=1cf4750 a3=7fff083bd920 items=2 ppid=26611 pid=26612 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="su" exe="/bin/su" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.519:577): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.519:577): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.519:577):  cwd="/home/user"
type=BPRM_FCAPS msg=audit(1359968229.519:577): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff
type=EXECVE msg=audit(1359968229.519:577): argc=3 a0="sudo" a1="su" a2="-"
type=SYSCALL msg=audit(1359968229.519:577): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26611 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null)
----
time->Mon Feb  4 09:57:09 2013
type=PATH msg=audit(1359968229.543:585): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968229.543:585): item=0 name="/bin/bash" inode=6941 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968229.543:585):  cwd="/root"
type=EXECVE msg=audit(1359968229.543:585): argc=1 a0="-su"
type=SYSCALL msg=audit(1359968229.543:585): arch=c000003e syscall=59 success=yes exit=0 a0=13695a0 a1=7fffce08a3e0 a2=135a030 a3=7fffce08c200 items=2 ppid=26612 pid=26622 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/bin/bash" key=(null)
----
time->Mon Feb  4 09:57:11 2013
type=PATH msg=audit(1359968231.663:594): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1359968231.663:594): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1359968231.663:594):  cwd="/root"
type=EXECVE msg=audit(1359968231.663:594): argc=3 a0="ls" a1="--color=auto" a2="/etc"
type=SYSCALL msg=audit(1359968231.663:594): arch=c000003e syscall=59 success=yes exit=0 a0=7fff8c709950 a1=7f91a12149d8 a2=1194c50 a3=7fff8c709510 items=2 ppid=26622 pid=26661 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null)

auidSütunun içerdiği çağıran kullanıcının uidEğer bu kullanıcı tarafından çalıştırılan komutlar için filtre olanak sağlar,

 ausearch -ua 1000

Bu, kullanıcının root olarak çalıştırdığı komutları bile listeler.

Kaynaklar:


+50 Bu cevap en kapsamlı gibi gözükse de, oldukça karmaşık hale geldiği için biraz hayal kırıklığına uğradım. Katkınız için teşekkürler.
Grassroot

Bu değişikliklerin birisinin günlük hacmini /var/log/audit/audit.log 'a yükseltebileceği konusunda uyarılmalıdır. Bu dosyaya log hacmim iki execve satırını audit.rules'e ekledikten sonra iki katına çıktı
JDS

10

Sudo'nun tüm sudo komutlarını syslog'da günlüğe kaydettiğini unutmayın, bu nedenle tüm özel kullanıcılar bir kök kabuk elde etmek için sadece sudo değil, aynı zamanda:

sudo command p1 p2 ... pn

Bununla ilgili ya da düşündüğüm herhangi bir yaklaşımla ilgili sorun, rootkullanıcı olarak, bir kullanıcının herhangi bir özel kayıt türünden kaçmasını önlemenin oldukça zor olmasıdır. Dolayısıyla denediğiniz her şey <% 100 olacak. Söyleyeceğim için üzgünüm.

Eğitim, dokümantasyon, uygulama ve her şeyden önce güven gerekli.


3
Anladığım kadarıyla hiçbir şeyin mükemmel olmayacağını biliyorum ama asla sizin tanımladığınız gibi çalışmasını sağlayamayacağız. Bunlar bahsettiğimiz sistem yöneticileri;)
Soviero

3
Doğru değil .... şahsen çalıştığım en az iki çok büyük şirketten oluşan çok sayıda sistem yöneticisinden oluşan bu politika çok yerinde! Yine, eğitim ve uygulama ile çalışır.
mdpc

2
MDPC% 100 doğrudur. Bu tam olarak sudo komutunun anlamı. Yüzlerce ana makineli on sistemli bir dükkandayım ve her şey için bireysel sudo komutları kullanıyoruz - su yoluyla kök salmayı yasaklayan belirli bir politika var. Yönetici işlemlerinin uygun şekilde denetlendiğinden emin olmanın tek makul yolu.
Jeff Albert,

4
-1 Eğitim asla yapmaz. Sysadmins'inizin müşterilerinden sadece biri olduğunuz dış kaynaklı bir dünyada yaşıyoruz.
Grassroot

6

Bir zamanlar aynı sorunla karşılaştım ve hızlı ve kirli bir çözüm bulmak zorundaydım - her sudo kullanıcısı komutu çalıştırdıktan sonra kendi geçmiş dosyalarına sahip olacaktı. sudo -i

İçinde /root/.bashrcşu satırı ekledim -

 export HISTFILE=/root/.bash_history-$SUDO_USER
 export HISTTIMEFORMAT="%F %T "

Bu nedenle, kök kökündeki her kullanıcının bir geçmiş dosyası olacaktır. Ash_history-username.

Diğer yöntem -

Aşağıdaki kodu /root/.bashrcekleyin ve bildirim seviyesinin ayarlandığı yerde, büyük olasılıkla / var / log / messages, kullanıcı adı, sudo-user ve komutu log dosyasına ekleyin.

function log2syslog
{
   declare COMMAND
   COMMAND=$(fc -ln -0)
   logger -p local1.notice -t bash -i -- "${USER}:${SUDO_USER}:${COMMAND}"
}
trap log2syslog DEBUG

Kredi için - http://backdrift.org/logging-bash-history-to-syslog-using-traps


Güzel bir yaklaşım, tam olarak ne istenmedi. Bir denetçi veya benzeri bir çözüm görmek isterim.
oturak

Tamam tuzak yöntemine güvenmek için güncellendi.
Daniel T.

3
Ve meşru kullanıcılar için bu işe yarıyor. Bu hesap çatlamıştı Ama eğer kraker hızla çalıştırarak bash geçmişini devre dışı olabilir /bin/sh, unset HISTFILEya da /bin/bash --norc.
Stefan Lasiewski

3

Bazı kuruluşlar aslında denetçilerin kullanımını yasaklamaktadır, çünkü bu kaynak yoğundur ve hizmet reddi saldırıları için bir fırsat doğurabilir.

Çözümlerden biri, en son Korn kabuğunu (ksh-93, ayrıntılar için http://kornshell.com/ adresine bakınız) kök olarak yürütülen tüm komutları uzak syslog sunucusuna kaydetmek ve ardından acil durumlar haricinde politika gerektirmek üzere yapılandırmaktır. Durumlarda, sysadmins kişisel hesaplarla oturum açar ve gelişmiş Korn kabuğunu sudo ile çalıştırır. Günlüklerin incelenmesi, bir yöneticinin izlerini örtmek için onaylanan kabuktan başka bir kabuk fırlattığını algılayabilir ve SA gerektiğinde eğitilebilir.


3

Sudo, etkin oturumlar günlüğe kaydedildiğinde sudoreplay adlı bir şeye sahiptir ve daha sonra tekrar oynatılabilir, daha sonra scriptkomutla tekrarlanabilecek olan bir terminal oturumu yazı tipini yapan komutla benzer şekilde çalışır scriptreplay.


2

2.0.0 sürümünden beri snoopy isteğe bağlı çevresel değişkenleri kaydedebilir.

Bununla birlikte, son katkılar, tty'nin günlüğe kaydetme sahibinin "Bu komutu kim, root olarak uyguladı?" Sorusuna oldukça etkili ve zarif bir cevap olduğunu belirtti.

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


Lütfen basit bir bağlantı yerine, OP'nin gereksinimlerine göre nasıl ayarlanacağına dair talimatlar verin. Teşekkürler.
Andrea Lazzarotto

1
-1. Bu sadece snoopy için bir fiş. Açıklamayı takip ettiniz, ancak hala yayınınızdaki soruyu cevaplamadınız; Sadece projene bağlandın.
Duncan X Simpson

1

Şu ana kadarki cevapların hiçbirinde yanlış olan bir şey olmadığı için, ancak sudooturum açmanın syslogtatmin edici olduğuna karar verirseniz, bir kırışıklık önerebilir miyim: bunu ağ üzerinden uzaktan denetim ana bilgisayarına kaydedin.

Bu, “şimdi kök oldum, kötücülüğümün izini günlüklerden kaldırabilirim” sorununu çözüyor. Şimdi yerel kutuda kök olabilirsiniz, ancak bu günlük paketini ağdan geri arayamazsınız ve (muhtemelen) uzaktan denetim ana bilgisayarında kök ayrıcalıklarınız yoktur.

Bunu yıllardır yönettiğim bazı ağlarla yapıyorum ve bunun iki tane daha sinyal avantajı var:

Öncelikle, ağ üzerinde olayların daha kolay korelasyonuna izin veren tüm slogları kontrol etmek için gidilecek bir yer var, ve " junoNFS sunucusunun herayanıt vermediğinden şikayet ederken , kimsenin şikayet etmemesi gibi bir şey var." Aynı şey aynı anda mı? Eğer öyleyse, heraproblem olması muhtemeldir, hadi ne kaydettiğini görelim; eğer değilse, junoağ bağlantısı daha şüpheli ise, junoo zaman başka ne giriş yaptığını görelim . "

İkinci olarak, syslog günlüğü rotasyonu daha kolay hale gelir: yerel ana bilgisayarlardaki günlüklerin kopyalarını birkaç günden fazla tutmazsınız, ancak denetim sunucusunun büyük miktarda disk alanı olduğundan emin olursunuz ve tüm syslog'larını birkaç yıl boyunca orada tutarsınız. Ayrıca, örneğin, adli denetim amacıyla bunları WORM ortamına yazmak istiyorsanız, yalnızca bir WORM sürücüsü satın almanız yeterlidir.

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.