Jika saya:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Maka saya bisa melihatnya di log:
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
tetapi jika saya:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
Saya tidak bisa melihatnya di log:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Pertanyaan saya: Bagaimana saya bisa menyalakan logging untuk perintah dalam "sudo su -"?
OS adalah Ubuntu 12,04 tetapi pertanyaannya adalah secara umum.
PEMBARUAN # 1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
sudo su -
, mereka juga memiliki kemampuan untuk menghapus semua entri log yang dapat Anda buat dari tindakan mereka. Jika Anda ingin kepastian 100% dalam pencatatan Anda, Anda harus membatasisudo
dan melarangsudo su
sepenuhnya.Jawaban:
Karena Anda menggunakan Ubuntu 12.04, lihat kemampuan logging I / O yang diaktifkan melalui opsi
log_input
danlog_output
.IMPLEMENTASI: Versi Sudo setidaknya: 1.7.4p4 dibutuhkan.
/etc/sudoers
modifikasi: Yang perlu Anda lakukan adalah menambahkan dua tag ke semua entri sudo yang diperlukan (di mana "su" ditentukan, baik dengan perintah atau alias). LOG_INPUT dan LOG_OUTPUT.Contoh:
Tambahkan struktur dir log default berikut ke
sudoers
:sumber
Anda
grep
ketika melakukansudo su -
gagal karena Anda tidak menjalankanecho 1234567zz
, Anda menjalankansu -
, yang meluncurkan shell. Shell kemudian menjalankanecho
.Ini disengaja, dan mencatat setiap perintah tunggal akan membanjiri syslog Anda dengan info yang tidak berguna (biasanya ada banyak program yang dijalankan di belakang layar yang biasanya tidak Anda lihat).
Jika Anda mengubah grep
grep 'COMMAND=/bin/su -' *
Anda, Anda akan melihatnya.sudo su -
juga merupakan penggunaan yang tidak bergunasu
.sudo -i
melakukan hal yang sama.sumber
grep 'COMMAND=/bin/su -' *
(atau tanpa wildcard:)grep 'COMMAND=/bin/su -' /var/log/auth.log
?sudo -
) adalah login, dan output Anda diperbarui menunjukkan ini. Itu saja yang kita bicarakan di sini. The perintah lain, sepertiecho
setelah Anda beralih pengguna dengansudo -
, tidak sudo perintah, dan karenanya (sesuai jawaban saya) belum loginauth.log
. Hanya perintah individual yang secara eksplisit diawali dengan yangsudo
akan dicatat. Begitusudo echo
juga yang dicatat, tetapi yang jelasecho
tidak, terlepas dari fakta bahwa Anda telah beralih ke superuser.Dalam meningkatkan kompleksitas, berikut adalah tiga cara mencatat perintah yang dikeluarkan dalam "sudo su -":
Mengenai mana yang cocok, itu benar-benar tergantung pada apa yang ingin Anda capai dengan pencatatan.
1) Sejarah Perintah Bash
Anda ingin mengkonfigurasi facitlity sejarah untuk memastikan menjaga garis yang cukup, tidak menimpa dari sesi yang berbeda, tidak mengabaikan perintah, dan cap waktu yang sesuai. (Lihat variabel HIST * dalam manual bash ). Mudah ditumbangkan dengan mengedit file histori, memanipulasi lingkungan atau menjalankan shell lain.
2) mengeksekusi pembungkus
snoopylogger adalah satu. Tambahkan tanda centang
/etc/profile
bahwa perpustakaan logger ada di peta memori proses (/proc/<pid>/maps
), dan jika tidak, setelLD_PRELOAD
dan mulai ulang (denganexec $SHELL --login "$@"
). Bergantian Anda dapat menambahkan entri ke /etc/ld.so.preload dengan$LIB/snoopy.so
atau jalur yang setara versi 32/64-bit Anda.Meskipun lebih sulit,
LD_PRELOAD
versi variabel lingkungan di atas masih bisa ditumbangkan dengan memanipulasi lingkungan eksekusi sehingga kode snoopy tidak lagi berjalan.Syslog harus dikirim di luar kotak agar isinya dapat dipercaya.
3) auditd
Sedikit lebih mudah dikonfigurasikan daripada wrapper execve, tetapi lebih sulit untuk mengekstrak informasinya. Ini adalah jawaban pertanyaan yang kemungkinan besar Anda tanyakan: "Apakah ada cara untuk mencatat efek apa yang dimiliki pengguna pada sistem setelah mereka mengeluarkan
sudo su -
". Syslog harus dikirim di luar kotak agar isinya dapat dipercaya.Jawaban Serverfault ini tampaknya merupakan konfigurasi yang cukup komprehensif untuk digunakan dengan auditd.
Ada beberapa saran lain untuk pertanyaan serupa di serverfault .
sumber
Karena itulah
sudo
yang melakukan penebangan; itu mencatat perintah sudo. Dalam kasus pertama,sudo echo
dicatat. Dalam kasus kedua,sudo su
dicatat (lihat/var/log/auth.log
).su
adalah "beralih pengguna", secara default ke root. Apa pun yang Anda lakukan setelah itu tidak melewatisudo
. Sama seperti jika Anda login sebagai root; login itu sendiri dicatat, tetapi tidak setiap perintah.sumber
Seperti yang orang lain katakan,
sudo
tidak bisa melakukan ini.Sebaliknya, gunakan
auditd
. Jika Anda ingin mencatat semua yang dilakukan oleh root (termasuk misalnya hal-hal yang dilakukan oleh crontab), gunakan ini:ETA: Perhatikan bahwa mencatat segala sesuatu akan memengaruhi kinerja, jadi Anda mungkin ingin membatasinya sedikit. Lihat
man auditctl
contohnya.Jika Anda hanya ingin login syscalls di mana login asli tidak root, gunakan ini sebagai gantinya:
Log biasanya akan berakhir di /var/log/audit/audit.log. Anda dapat mencarinya dengan
ausearch
.Ada informasi lebih lanjut di halaman manual untuk
auditctl
,audit.rules
danausearch
.sumber
sudo su -
sehingga Anda kembali pada titik awalsudo su -
akan masuk~/.bash_history
jika shell Anda bash.echo 1234567zz
akan masuk/root/.bash_history
jika shell root bash.Penjelasan tentang ini sudah diposting oleh goldilocks.
sumber
Apakah Anda ingin su login karena Anda merasa itu adalah kelemahan keamanan? Sudahkah Anda memikirkan perintah ini?
sudo bash
imho sama buruknya.Jika Anda khawatir tentang apa yang dapat dilakukan orang dengan sudo, maka Anda harus membatasi penggunaannya. Anda dapat membatasi perintah yang dapat mereka jalankan juga. Batasi akses ke / bin / su jika itu membuat Anda khawatir.
sumber
Bagaimana dengan ini:
atau
atau panjang satu liner:
sudo -E menjaga lingkungan PROMPT_COMMAND dijalankan sebelum setiap prompt
sumber
Jika ini membantu, Anda dapat menggunakan opsi "NOEXEC" dari sudoers.
Anda harus mendefinisikannya sebagai
Ini akan mencegah shell lolos dan pengguna tidak akan dapat menggunakan sudo -i atau sudo -s atau sudo su -
Ini memiliki kelemahan, bagaimanapun, shell escape akan dinonaktifkan. untuk mengeksekusi skrip dari dalam skrip juga akan ditolak.
sumber
Jangan membuat ini rumit: Setiap kali
sudo
dipanggil, ia melaporkan fakta ini di beberapa file di/var/log
(pada sistem Andaauth.log
, pada kotak OS X saya itusystem.log
).sudo
melaporkan argumen commandline-nya, tetapi tidak memiliki pengetahuan tentang apa yang mungkin terjadi di dalam perintah interaktif sepertisu
.Ini tidak berarti tidak ada catatan tentang apa yang terjadi dalam subkulit root: Perintah Shell disimpan dalam riwayat shell. Di sistem saya, penyimpanan riwayat root diaktifkan secara default, jadi yang harus saya lakukan adalah mencari
~root/.sh_history
catatan tentang apa yang telah dilakukan (kecuali jika seseorang merusaknya, tentu saja, tetapi mereka juga bisa merusaknya/var/log
).Saya pikir ini adalah solusi terbaik untuk Anda. Jika tidak, pergilah ke kota bersama
auditd
, seperti yang disarankan @Jenny.PS. Jika riwayat root belum diaktifkan, mengaktifkannya tergantung pada shell yang digunakannya. Untuk
bash
, aturHISTORY
danHISTFILESIZE
ke angka yang cukup besar (standarnya adalah 500, kata manual saya). Jika mau, Anda dapat menentukan di mana riwayat disimpan dengan mengaturHISTFILE
ke jalur (default$HOME/.sh_history
)sumber
Anda mungkin ingin membuat skrip sesi Anda menggunakan
script(1)
:Sekarang Anda dapat
grep
(perhatikan bahwa#
konfirmasi sebenarnya direkam dalam/tmp/my_typescript
):Atau, Anda bahkan dapat menonton seluruh sesi lagi dengan
scriptreplay(1)
:File
/tmp/my_typescript.timing
berisi informasi ketika setiap perintah telah dipanggil. Ada alat lebih lanjut sepertittyrec
ataushelr
yang memiliki lebih banyak lonceng dan peluit.sumber