Saya melihat dua cara bagus untuk mendapatkan informasi semacam ini. Salah satunya adalah dengan meningkatkan logging dari sshd itu sendiri, dan yang lainnya dengan melakukan pemantauan yang lebih dalam dari repositori git pada disk. Karena tidak ada satu pun yang memberi Anda informasi yang Anda inginkan, Anda mungkin ingin melakukan keduanya dan mengkorelasikan data log menggunakan mesin analisis log eksternal atau sesuai permintaan menggunakan mata manusia dan cap waktu.
Modifikasi sshd
Secara default, seperti yang Anda lihat, Anda dapat melihat ketika pengguna masuk, dan dari mana, menggunakan log otentikasi ssh. Yang ingin Anda lakukan adalah mengubah level saat Anda keluar dari sshd. Jadi edit /etc/ssh/sshd_config
dan temukan garis yang terlihat
#LogLevel INFO
dan mengubahnya menjadi
LogLevel VERBOSE
kemudian restart layanan sshd. Ini meningkatkan level logging sshd sebanyak 1 langkah, yang memberikan lebih banyak informasi. Lihat potongan log ini dari akses jarak jauh saya setelah melakukan perubahan itu.
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
Hal-hal penting yang perlu diperhatikan di sini adalah dua kali lipat
- Kami melihat sidik jari kunci publik yang digunakan untuk mengotentikasi saya
- Kami melihat stempel waktu logout saya
Menggunakan default LogLevel (INFO) sshd tidak mencatat kedua item tersebut. Mendapatkan sidik jari kunci adalah satu langkah ekstra. Anda harus memproses authorized_keys
file yang sesuai dengan ssh-keygen.
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
Jadi sekarang Anda tahu informasi berikut:
- Nama pengguna yang masuk
- Waktu pengguna itu masuk
- Kunci publik mana yang digunakan untuk otentikasi
- Waktu pengguna itu logout
Sekarang kita memiliki cara untuk mengaitkan tindakan pengguna pada waktu tertentu, dengan asumsi kedua pengguna tidak masuk pada saat yang sama, kita dapat mulai melihat perubahan yang dilakukan pada repositori.
Pemantauan Direktori dengan Auditd
Seperti yang dikatakan sysadmin1138, ini bisa menjadi kasus penggunaan yang sangat baik untuk subsistem auditd. Jika Anda tidak menggunakan distro berbasis RedHat mungkin ada analog, tetapi Anda harus menemukannya. Konfigurasi untuk auditd cukup intens dan memiliki sejumlah opsi konfigurasi yang redonkulous. Untuk mendapatkan gagasan tentang beberapa opsi, silakan lihat pertanyaan ini di situs saudara kami untuk Profesional Keamanan Informasi .
Minimal, saya akan merekomendasikan pengaturan apa yang disebut "jam tangan" pada direktori pada disk yang berisi repositori git Anda. Apa yang dilakukan adalah menginstruksikan modul kernel untuk melaporkan upaya untuk melakukan panggilan akses file, seperti open()
atau creat()
, pada file menangani menunjuk ke file atau direktori yang kami daftarkan.
Berikut contoh konfigurasi yang akan melakukan ini, dan hanya ini. Jadi berhati-hatilah untuk membaca, dan memahami, keberadaan Anda /etc/audit/audit.rules
untuk mengintegrasikan perubahan dengan tepat.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2