Ini adalah kebijakan perusahaan untuk admin untuk masuk ke server melalui nama pengguna pribadi, dan kemudian jalankan sudo -i
untuk menjadi root. Saat berjalan sudo -i
, sudo akan membuat variabel lingkungan bernama SUDO_USER
, yang berisi nama pengguna pengguna asli.
Apakah ada cara untuk mencatat SEMUA perintah dalam syslog dengan sesuatu yang mirip dengan sintaks berikut:
${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Contoh entri adalah:
Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Jelas itu tidak harus persis sintaks di atas, hanya harus menyertakan minimal pengguna nyata (mis. Root), pengguna sudo (mis. Ksoviero), dan perintah lengkap yang dijalankan (mis. Yum instal acak-pkg).
Saya sudah mencoba snoopy
, tetapi tidak termasuk SUDO_USER
variabel.
auditd
.auditd
, dan walaupun saya sudah mencatat semua perintah yang sedang dijalankan, itu tidak termasukSUDO_USER
variabel (atau informasi yang setara), dan saya tidak bisa menemukan cara untuk memasukkannya. Bantuan apa pun akan sangat dihargai!Jawaban:
Pembaruan : 2 hal lagi yang muncul di komentar dan pertanyaan lanjutan:
auditd
cara ini akan secara dramatis meningkatkan volume log Anda, terutama jika sistem ini banyak digunakan melalui commandline. Sesuaikan kebijakan penyimpanan log Anda.Auditd
log pada host tempat mereka dibuat sama amannya dengan file lain pada kotak yang sama. Teruskan log Anda ke server pengumpulan log jarak jauh seperti ELK atau Graylog untuk menjaga integritas log Anda. Plus, menambahkan ke titik di atas, memungkinkan untuk lebih agresif menghapus log lama.Seperti yang disarankan oleh Michael Hampton,
auditd
adalah alat yang tepat untuk pekerjaan di sini.Saya menguji ini pada instalasi Ubuntu 12.10, jadi jarak tempuh Anda mungkin berbeda pada sistem lain.
Pasang
auditd
:apt-get install auditd
Tambahkan 2 baris ini ke
/etc/audit/audit.rules
:Ini akan melacak semua perintah yang dijalankan oleh root (
euid=0
). Mengapa ada dua aturan? Theexecve
syscall harus dilacak di kedua 32 dan 64 bit kode.Untuk menghilangkan
auid=4294967295
pesan dalam log, tambahkanaudit=1
ke cmdline kernel (dengan mengedit/etc/default/grub
)Tempatkan garis
session required pam_loginuid.so
di semua file konfigurasi PAM yang relevan dengan login (
/etc/pam.d/{login,kdm,sshd}
), tetapi tidak dalam file yang relevan dengansu
atausudo
. Ini akan memungkinkanauditd
pengguna mendapatkan panggilanuid
dengan benar saat meneleponsudo
atausu
.Mulai ulang sistem Anda sekarang.
Mari masuk dan menjalankan beberapa perintah:
Ini akan menghasilkan sesuatu seperti ini di
/var/log/audit/auditd.log
:The
auid
kolom berisi panggilan penggunauid
, yang memungkinkan Anda menyaring untuk perintah dijalankan oleh pengguna ini denganIni bahkan akan mencantumkan perintah yang dijalankan pengguna sebagai root.
Sumber:
sumber
Ingat bahwa sudo sendiri mencatat semua perintah sudo di syslog, jadi semua pengguna prived harus dididik untuk tidak hanya sudo untuk mendapatkan shell root tetapi untuk:
Masalah dengan ini atau pendekatan apa pun yang saya pikirkan adalah bahwa sebagai
root
pengguna, cukup sulit untuk mencegah pengguna menghindari jenis logging tertentu. Jadi apapun yang Anda coba akan <100% saya minta maaf untuk mengatakan.Pendidikan, dokumentasi, penegakan, dan di atas semua kepercayaan itulah yang diperlukan.
sumber
Saya pernah dihadapkan dengan masalah yang sama dan harus datang dengan solusi cepat dan kotor - setiap pengguna sudo akan memiliki file sejarah mereka sendiri setelah mereka menjalankan perintah
sudo -i
Di
/root/.bashrc
saya menambahkan baris berikut -Jadi setiap pengguna yang sudo untuk di-rooting akan memiliki file histori .bash_history-username.
Metode lain -
Tambahkan kode berikut ke
/root/.bashrc
dan itu akan menambahkan nama pengguna, pengguna-sudo, dan perintah ke file log, di mana tingkat pemberitahuan diatur, kemungkinan besar / var / log / pesan.Kredit untuk - http://backdrift.org/logging-bash-history-to-syslog-using-traps
sumber
/bin/sh
,unset HISTFILE
atau/bin/bash --norc
.Sejumlah perusahaan sebenarnya melarang penggunaan auditd karena padat sumber daya dan dapat menghasilkan peluang untuk penolakan serangan layanan.
Salah satu solusinya adalah mengonfigurasi shell Korn terbaru (ksh-93, lihat http://kornshell.com/ untuk detailnya) untuk mencatat semua perintah yang dijalankan sebagai root ke server syslog jarak jauh, dan kemudian mensyaratkan oleh kebijakan itu, kecuali dalam keadaan darurat. situasi, sysadmin masuk dengan akun pribadi dan jalankan cangkang Korn yang disempurnakan melalui sudo. Pemeriksaan log dapat mendeteksi ketika admin meluncurkan shell lain dari shell yang disetujui untuk menutupi jejak mereka, dan SA kemudian dapat dididik sesuai kebutuhan.
sumber
Sudo memiliki sesuatu yang disebut sudoreplay ketika sesi yang diaktifkan dicatat dan dapat diputar ulang nanti, berfungsi sama seperti
script
perintah yang membuat naskah sesi terminal yang kemudian dapat diputar ulang denganscriptreplay
perintah.sumber
Bukan berarti ada yang salah dengan jawaban lain sejauh ini, tetapi jika Anda memutuskan bahwa
sudo
logging melaluisyslog
memuaskan, bolehkah saya menyarankan kerutan: log melalui jaringan ke host audit jarak jauh.Itu mengatasi masalah "sekarang saya telah menjadi root, saya dapat menghapus jejak kesalahan saya dari log". Anda sekarang dapat melakukan root pada kotak lokal, tetapi Anda tidak dapat memanggil paket log itu kembali dari jaringan, dan Anda (mungkin) tidak memiliki hak akses root pada host audit jarak jauh.
Saya telah melakukan ini dengan beberapa jaringan yang saya kelola selama bertahun-tahun, dan ia memiliki dua keunggulan sinyal lainnya:
Pertama, ada satu tempat di jaringan untuk memeriksa semua syslog, yang memungkinkan korelasi insiden yang jauh lebih mudah, dan begitu juga toko serba ada untuk penyelidikan seperti "Ketika
juno
mengeluh bahwa server NFShera
tidak merespons, apakah ada orang lain yang mengeluh tentang hal yang sama pada saat yang sama? Jika demikian,hera
kemungkinan akan menjadi masalah, mari kita lihat apa yang dia login; jika tidak,juno
koneksi jaringan lebih mencurigakan, mari kita lihat apa lagi yangjuno
login pada waktu itu. "Kedua, rotasi log syslog menjadi lebih mudah: Anda tidak menyimpan salinan log di host lokal selama lebih dari beberapa hari, tetapi Anda memastikan server audit memiliki ruang disk yang sangat besar, dan menyimpan semua syslog di sana selama beberapa tahun. Plus, jika Anda ingin menulisnya ke media WORM untuk keperluan audit forensik misalnya, Anda hanya perlu membeli satu drive WORM.
sumber
Karena versi 2.0.0 snoopy dapat mencatat variabel lingkungan sewenang-wenang.
Namun, kontribusi baru-baru ini menunjukkan bahwa pemilik logging dari tty adalah jawaban yang cukup efektif dan elegan untuk pertanyaan "Siapa yang menjalankan perintah itu, sebagai root?".
Pengungkapan: Saya pengelola snoopy.
sumber