Apakah buruk menggunakan sudo dari Jenkins?


11

Saya menggunakan plugin Terbitkan SSH untuk menyebarkan aplikasi saya dari Jenkinske lingkungan yang berbeda. Beberapa pekerjaan penyebaran melakukan persiapan lingkungan dan hal-hal seperti berhenti dan mulai ulang layanan sistem server aplikasi. Beberapa dari perintah itu memerlukan sudo.

Saya hanya ingin tahu apakah itu bisa menjadi praktik keamanan yang buruk untuk meminta sudo dalam publikasi jarak jauh dan mengeksekusi pekerjaan Jenkins. Haruskah kita mengubah kebijakan keamanan pada host target untuk memungkinkan fungsi yang diperlukan dilakukan tanpa sudo?

Jawaban:


6

Tidak, sebenarnya ini adalah praktik keamanan yang sangat baik untuk sudo ketika Anda membutuhkan hak istimewa tingkat yang lebih tinggi. Ini adalah alasan bahwa sebagian besar distribusi melarang login standar dan benar-benar memaksa Anda untuk sudo sutidak hanya mengetik su- mereka ingin mendorong Anda untuk menggunakan sudo untuk manfaat keamanannya. Ada beberapa alasan mengapa:

  • Audit. Ketika Anda sudo, sistem menyimpan catatan siapa yang sudo dan perintah mereka berlari. Ini menambah banyak forensik ketika Anda harus kembali dan mencari tahu apa yang terjadi - untuk menyalahkan, menangkap kegiatan jahat atau hanya untuk tujuan pemecahan masalah (apa yang terjadi tadi malam jam 19:00 sebelum server ini AWOL?)

  • Aturan Sudo. Hanya karena pengguna perlu menjalankan sesuatu dengan hak istimewa yang ditingkatkan tidak berarti mereka harus menjalankan segalanya dengan hak yang ditingkatkan. Menggunakan su atau menambahkan pengguna ke roda memungkinkan pengguna melakukan segalanya . Namun dengan sudo, dimungkinkan untuk menentukan apa yang dapat dan tidak bisa dilakukan pengguna dengan menggunakan Alias ​​Perintah yang memungkinkan penggunaan wildcard, sehingga memungkinkan aturan fleksibel yang memberikan hak istimewa pengguna untuk menggunakan beberapa perintah, tetapi tidak yang lain.

  • Mengeras. Dimungkinkan untuk menonaktifkan root. Seperti pada, untuk semua maksud dan tujuan, itu tidak ada dan hanya berguna / dapat digunakan dalam mode pengguna tunggal - membutuhkan reboot server (dan satu-satunya alasan ini diizinkan adalah untuk pemulihan kata sandi). sudo sutidak lagi berfungsi. Ini dilakukan dengan mengatur shell root ke / bin / nologin. yang merupakan cara terbaik untuk mencegah banyak kerentanan eskalasi root. Ini, tentu saja mengasumsikan bahwa Anda menggunakan peluru di atas dengan benar (dan Anda masih dapat memberikan izin khusus kepada pengguna admin, meskipun ini akan merusak posisi keamanan Anda).

Hal-hal ini, tentu saja, hanya bagian dari model keamanan Anda. Misalnya, kecuali jika Anda tidak memiliki pengguna dengan hak administratif penuh (dan kadang-kadang bahkan kemudian) pengguna Anda mungkin (mungkin dapat) menghapus log dan histori - kecuali jika Anda menggunakan server log dan syslog untuk mengirim log off-box. Maka tidak ada cara untuk mengembalikan kucing itu ke dalam tas. Tentu saja, jika Anda menggunakan struktur direktori autentikasi pusat, maka ini akan berlaku: Jika saya kompromi satu akun, itu dikompromikan pada semua server dalam organisasi - termasuk kemungkinan server log Anda.

Singkatnya, keamanan itu rumit, tetapi sudo adalah alat yang hebat dalam merancang lingkungan yang aman dan lebih banyak orang harus menggunakannya sejauh itu sepenuhnya.


7

Apakah Anda mengizinkan sudoakses jarak jauh atau jarak jauh ke sesuatu yang SUID rootAnda punya permukaan serangan yang cukup mirip. Saya akan tetap sudodalam rantai karena itu memungkinkan Anda membatasi perintah dengan mudah dan memiliki pencatatan yang sangat penting jika Anda perlu mengaudit nanti. sudojuga memiliki sejarah produksi yang jauh lebih lama. Melakukan sesuatu yang lain akan memiliki lebih sedikit sejarah dan perubahan kejutan yang tidak menyenangkan.

Ada beberapa hal lain yang dapat Anda lakukan untuk membuatnya lebih aman:

  • memperketat ssh
  • hanya memungkinkan perintah mulai ulang untuk beberapa pengguna tertentu termasuk satu untuk jenkins
  • hanya izinkan login untuk pengguna tertentu dari semua IP internal atau hanya jenkins dan lompat kotak IP
  • menyimpan log pada kotak jarak jauh sehingga tidak bisa dipermainkan

Sebenarnya, saya baru saja mengonfigurasi pekerjaan SSH saya dan tidak mau menjalankan sudo: "sudo: maaf, Anda harus memiliki tty untuk menjalankan sudo"
amfibi

1
Anda mungkin perlu untuk memberikan sshyang -tpilihan. Atau yakinkan sudo untuk tidak membutuhkannya seperti unix.stackexchange.com/questions/122616/...
chicks

Bagaimana cara saya menyediakan opsi ke SSH ketika sedang dipanggil dari Jenkins?
amfibi

Saya tidak yakin tentang itu. Apakah Anda mencoba mengutak sudo- atik seperti yang diperlihatkan tautan?
anak ayam

1
Saya berhasil mengaktifkan sudo dari Jenkins dengan mengubah sudoers pada host jarak jauh (target SSH) agar tidak memerlukan tty (dikomentari Defaults requiretty)
amfibi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.