Kapan saya harus membuat akun pengguna baru untuk menjalankan perangkat lunak di server?

14

Secara umum, kapan kita harus membuat akun pengguna baru untuk menjalankan perangkat lunak yang menghadap internet di server?

Misalnya, saya menggunakan server Debian bersama (mis. Via Dreamhost) dan saya ingin menjalankan beberapa situs web menggunakan WordPress, beberapa menggunakan Redmine, beberapa menggunakan Ruby on Rails, mungkin beberapa menggunakan Django, dan saya ingin melayani Mercurial repositori juga.

Pada server Dreamhost dan banyak server set-up serupa lainnya, ini semua bisa dilakukan di bawah satu akun pengguna , tapi saya bisa melihat beberapa kelemahan untuk pendekatan itu:

  • .Bashrc yang lebih panjang
  • Jika satu akun itu dikompromikan, demikian juga semua situs yang berjalan di bawahnya.

Di sisi lain, memiliki banyak akun pengguna dapat menjadi sedikit sulit untuk dilacak, terutama jika beberapa dari mereka memiliki persyaratan yang identik dalam hal perangkat lunak yang diinstal. Misalnya, memiliki satu akun untuk setiap situs web yang menjalankan WordPress mungkin berlebihan.

Apa praktik terbaik? Apakah ini hanya masalah mengurangi jumlah situs yang dihosting (atau repositori yang dihosting, dll) per akun pengguna secara proporsional ke tingkat paranoia seseorang?

Silakan kirim pendapat Anda tentang ini, berikan alasan Anda untuk itu.

Juga, jika Anda memiliki alasan untuk berpikir bahwa pendekatan yang diambil pada server pribadi atau VPS harus berbeda dari pendekatan yang diambil pada server bersama, tolong jelaskan apa itu dan, sekali lagi, alasan Anda untuk mereka.

sampablokuper
sumber

Jawaban:

11

Saya umumnya penggemar "Satu pengguna untuk apa pun yang membuka soket mendengarkan di jaringan" - Satu untuk Apache, satu untuk Mail, satu untuk DNS, dll.

Ini (seperti yang terakhir saya dengar) masih Praktek Terbaik Saat Ini, dan alasan di balik ini adalah paranoia sederhana dan sederhana: Layanan ini terpapar ke Internet Buruk Besar, jika seseorang menemukan kerentanan dan mengeksploitasinya sebelum saya memiliki kesempatan untuk menambal perangkat lunak setidaknya saya membatasi mereka ke satu akun pengguna, dengan hanya hak istimewa yang diperlukan untuk menjalankan layanan tunggal yang bertanggung jawab untuk itu.
Secara umum saya menganggap tingkat isolasi ini cukup untuk melindungi sistem, meskipun setiap aplikasi adalah pulau kerentanan (misalnya jika seseorang memasang plugin WordPress yang rentan, semua hal yang dapat diakses oleh Apache (yaitu semua situs web) rentan secara efektif dalam hal terjadi kompromi.

Versi tambahan dari argumen itu dapat dibuat untuk mem-sandbox situs web Shared Hosting klien dengan konfigurasi dan pengguna Apache sendiri (Anda tidak harus menginstal tumpukan web lengkap untuk setiap situs, hanya konfigurasi apache terpisah yang menentukan pengguna yang berbeda ), kerugiannya adalah bahwa setiap situs sekarang menjalankan banyak proses Apache, jadi penggunaan RAM Anda hanya naik secara substansial, dan hal-hal yang dapat dibaca dunia masih rentan jika ada instance / pengguna Apache tunggal dikompromikan.

Memperluas lebih lanjut argumen untuk menempatkan setiap Apache di chroot (atau penjara jika Anda menggunakan sistem BSD) dapat dibuat untuk keamanan yang lebih tinggi, tetapi sekarang Anda sedang berbicara tentang ruang disk tambahan karena setiap chroot / penjara akan membutuhkan semua perangkat lunak yang diperlukan untuk jalankan situs yang dikandungnya (dan kebutuhan untuk memperbarui perangkat lunak ini untuk setiap situs alih-alih hanya satu salinan master di server ketika tambalan keluar), ditambah persyaratan RAM seperti ketika Anda memiliki contoh pengguna / apache terpisah.
Ini memitigasi semuanya kecuali bug OS / Kernel yang memungkinkan pengguna keluar dari chroot (yang menjadi argumen untuk menjalankan setiap situs pada server fisik yang terpisah - yang kemudian menjadi argumen untuk memisahkan situs ke dalam vlan / subnet yang berbeda, dll.)


Seperti halnya semua risiko, Anda tidak dapat menghilangkannya: Anda hanya dapat menguranginya hingga tingkat yang dapat diterima berdasarkan potensi bahaya / biaya kompromi, kemungkinan kompromi, dan biaya setiap tingkat mitigasi.
Untuk uang saya, untuk lingkungan hosting bersama yang tidak penting dan tidak E-Commerce, dasar "Satu pengguna untuk Apache, satu untuk DNS, satu untuk surat, dll." jaring pengaman sudah cukup. Jika ada kebutuhan untuk keamanan di luar level itu, pengguna Anda harus serius mempertimbangkan perangkat keras mereka sendiri.

voretaq7
sumber
1
Ada juga modul untuk Apache (mod_su I think?) Yang memungkinkan Apache mengubah pengguna yang berjalan di bawahnya secara dinamis berdasarkan permintaan yang masuk; di lingkungan hosting bersama, Anda akan mengaturnya untuk berubah menjadi pengguna yang memiliki situs yang sedang diakses. Ini memberikan pengelompokan jenis pelanggaran yang paling umum (injeksi kode, dll.) Sehingga hanya satu pengguna yang mis. Memasang plugin WordPress yang buruk yang terpengaruh olehnya. Ini juga menawarkan beberapa perlindungan terhadap pelanggaran penuh proses Apache itu sendiri, dan terhadap serangan eskalasi hak istimewa, tetapi memang itu bukan tujuan sebenarnya.
Kromey
@Romey, saya tidak dapat menemukan banyak informasi tentang mod_su. Apakah maksud Anda mod_suexec ?
sampablokuper
1
@sampablokuper Yup, itu orangnya, maaf atas informasi yang salah.
Kromey
1
@Kromey masalah utamanya mod_suexecadalah "Permintaan Non-CGI masih diproses dengan pengguna yang ditentukan dalam direktif Pengguna" - jadi jika PHP adalah modul, ia masih berjalan sebagai pengguna apache "utama". Ini adalah solusi yang bagus jika semua yang Anda jalankan adalah CGI.
voretaq7
@voretaq Ah, saya tidak mengetahui batasan itu. Meski begitu, bisa berguna di beberapa lingkungan, tetapi itu memang membuatnya kurang berlaku daripada yang saya pikirkan sebelumnya.
Kromey
6

Secara umum yang saya lakukan adalah memiliki satu pengguna untuk layanan eksternal yang tidak diizinkan untuk masuk ("tidak ada" misalnya), dan satu akun yang diizinkan masuk dan su atau sudo. Pastikan nama pengguna Anda berbeda dan tidak mudah ditebak.

Saya tidak melihat ada satu pengguna per layanan yang diperlukan kecuali Anda menjalankan lingkungan hosting bersama di mana setiap pelanggan memiliki login. Jika Anda secara realistis melihat diri Anda sebagai target peretasan yang sangat menarik, Anda dapat mengisolasi sebanyak mungkin. Namun, kecuali Anda melakukan sesuatu yang sangat kontroversial atau meng-hosting data keuangan Anda tidak benar-benar menarik target.

Kyle
sumber
+1 tingkat pemisahan harus sesuai dengan situasi yang dihadapi - dan biasanya begitu Anda mendapatkan "data yang sangat kontroversial" atau "Anda akan menginginkan tingkat pemisahan mesin sialan saya sendiri :-)
voretaq7