Meskipun pertanyaan ini diajukan oleh seorang individu yang ingin merekam sesi sendiri, kasus penggunaan alternatif mungkin adalah administrator sistem yang ingin melacak apa yang dilakukan berbagai pengguna.
Saya khawatir menjalankan script
di dalam sistem bashrc
mungkin tidak cocok jika pengguna mesin enggan untuk membuat rekaman sesi mereka.
Pengguna yang ingin tetap penyamaran dapat mem-bypass logging dengan meminta sshd untuk membuka shell yang berbeda (mis. zsh
) Atau menjalankan bash --rcfile ___
untuk mencegah /etc/bash.bashrc
agar tidak dimuat.
Pendekatan alternatif
Panduan ini dari 2008 ( diarsipkan ) menggunakan metode berbeda untuk memaksa script
dijalankan ketika pengguna masuk dengan ssh, yang mengharuskan pengguna untuk masuk dengan kunci publik / pribadi.
Ini dilakukan dengan menambahkan skrip ke file pengguna .ssh/authorized_keys
, di depan kunci:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
The log-session
( diarsipkan ) Script kemudian memutuskan apakah atau tidak untuk menjalankan /usr/bin/script
log sesi pengguna ini.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Untuk mencegah pengguna menghapus perintah yang ditambahkan, administrator perlu mengasumsikan kepemilikan authorized_keys
file pengguna .
chown root:root ~user/.ssh/authorized_keys
Sayangnya, ini berarti pengguna tidak dapat menambahkan kunci tambahan sendiri, atau yang lebih penting mencabut kunci yang ada jika dikompromikan, yang jauh dari ideal.
Peringatan
Biasanya konfigurasi default sshd memungkinkan pengguna untuk melakukan SFTP melalui login ssh mereka. Ini menawarkan cara bagi pengguna untuk mengedit file tanpa perubahan yang dicatat. Jika administrator tidak ingin pengguna dapat melakukan itu, maka ia harus mengaktifkan beberapa pencatatan untuk SFTP, atau menonaktifkan layanan. Meskipun demikian, pengguna masih dapat membuat perubahan yang tidak terlihat pada file dengan menjalankan sesuatu seperti ini di terminal mereka:
curl "http://users.own.server/server/new_data" > existing_file
Dimungkinkan untuk memantau perubahan seperti itu dengan menggunakan sistem file copy-on-write yang mencatat semua riwayat file.
Tetapi trik serupa akan memungkinkan pengguna untuk menjalankan perintah tanpa harus dicatat:
curl "http://users.own.server/server/secret_commands_824" | sh
Saya tidak tahu solusi mudah untuk itu. Kemungkinannya mungkin:
- Log semua data jaringan (dan uraikan nanti).
- Log semua panggilan sistem.
Hal semacam ini dimungkinkan dengan auditd .
Tapi bagaimanapun juga ...
Tidak mungkin bahwa sesi pengguna logging menyediakan keamanan nyata untuk administrator. Secara default, pengguna hanya dapat memanipulasi file mereka sendiri, dan tidak dapat membahayakan sistem. Jika pengguna jahat berhasil meningkatkan hak istimewa, maka ia dapat menonaktifkan pencatatan dan penghapusan log (kecuali jika administrator telah mengonfigurasi log untuk disimpan di mesin yang terpisah, dengan cara tambahan saja).
Administrator yang secara otomatis mencatat sesi pengguna mungkin harus memberi tahu pengguna bahwa ini sedang dilakukan . Di beberapa yurisdiksi, bentuk pengumpulan data ini mungkin melanggar undang-undang data atau privasi . Dan paling tidak, akan menghormati pengguna untuk membuat mereka sadar.
Kemungkinan besar administrator akan tertarik untuk mencatat sesi sudo
pengguna. Itu mungkin bisa ditangani dalam jawaban yang berbeda, atau memang pertanyaan yang berbeda.
exec
di awal baris. itu harus memulaiscript -f
di PID shell yang sama.