Saya memiliki server git yang menjalankan ssh dan setiap pengguna memiliki akun unix di sistem.
Mengingat bahwa dua pengguna memiliki akses ke repo, bagaimana saya bisa memastikan pengguna mana yang melakukan komit, karena nama pengguna dan email komit diajukan dan dikendalikan oleh klien git.
Saya khawatir bahwa pengguna mungkin mencoba menyamar sebagai orang lain, meskipun mereka memiliki hak otorisasi yang sama.
Jawaban:
Jika Anda begitu khawatir tentang itu, ada beberapa cara untuk mengatasi masalah ini.
sumber
.git/hooks/update.sample
untuk inspirasi. Tolong @ beri tahu saya jika Anda mengajukan pertanyaan tentang ini di SO, itu akan menarik bagi saya jugaSaya 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 terlihatdan mengubahnya menjadi
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.
Hal-hal penting yang perlu diperhatikan di sini adalah dua kali lipat
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.Jadi sekarang Anda tahu informasi berikut:
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()
ataucreat()
, 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.sumber
Satu-satunya pendekatan teknis yang dapat Anda lakukan adalah mempercayai identitas koneksi ssh. Anda kemudian dapat memastikan bahwa setiap pengguna hanya mendorong komit yang dibuatnya dengan memvalidasi committer dari setiap komit yang didorong baru.
Agar ini dapat diandalkan, Anda hampir pasti tidak ingin memberikan pengguna Anda akses shell tidak terbatas ke kotak tempat repositori berada; Anda ingin memastikan penggunaan sesuatu seperti
git-shell
hanya sebaliknya pembatasannya mudah diatasi.Namun, para pengguna masih dapat menyamar sebagai penulis. Anda dapat membatasi ini juga, tetapi ini akan kehilangan alur kerja umum seperti memetik dan memurnikan kembali ceri dan bahkan mungkin bercabang (tergantung pada implementasi kait Anda) sehingga Anda mungkin tidak ingin melakukan ini.
Pada titik tertentu, sampai batas tertentu, Anda perlu mempercayai pengembang Anda.
sumber
Banyak daemon ssh membuat entri
/var/log/audit.log
atau sesuatu yang serupa ketika koneksi ssh diterima. Referensi silang log ini dengan commit-log harus memberi Anda gambaran tentang pengguna ssh mana yang digunakan untuk mengeluarkan komit. Ini adalah langkah audit, yang akan digunakan setelah fakta untuk verifikasi.Sebenarnya menegakkan pengguna ssh yang benar untuk pengguna git yang tepat adalah untuk salah satu jawaban lain di sini.
sumber
Jika semua pengguna memiliki akun shell dengan akses tulis ke repositori, Anda tidak akan dapat membuat log audit yang dapat dipercaya: mereka masih bisa memodifikasi repositori tanpa menulis ke log, dan mereka dapat menulis apa pun yang mereka inginkan ke log.
Untuk dapat mempercayai log audit, Anda harus mencegah akses tulis tingkat file langsung ke repositori, alih-alih menggunakan sesuatu seperti gitolite (yang berjalan di akunnya sendiri) untuk memediasi akses ke repositori.
sumber