Ini adalah Pertanyaan Canonical tentang Mengamankan tumpukan LAMP
Apa pedoman mutlak untuk mengamankan server LAMP?
Ini adalah Pertanyaan Canonical tentang Mengamankan tumpukan LAMP
Apa pedoman mutlak untuk mengamankan server LAMP?
Jawaban:
Jawaban David adalah dasar yang baik dari prinsip-prinsip umum pengerasan server. Seperti yang ditunjukkan David, ini adalah pertanyaan besar. Teknik khusus yang Anda ambil bisa sangat bergantung pada lingkungan Anda dan bagaimana server Anda akan digunakan. Peringatan, ini dapat mengambil banyak pekerjaan di lingkungan pengujian untuk membangun dan menyelesaikannya dengan benar. Diikuti oleh banyak pekerjaan untuk diintegrasikan ke dalam lingkungan produksi Anda, dan yang lebih penting, proses bisnis.
Namun, pertama-tama periksa untuk melihat apakah organisasi Anda memiliki kebijakan pengerasan, karena mungkin itu yang paling relevan secara langsung. Jika tidak, tergantung pada peran Anda, ini mungkin waktu yang tepat untuk membangunnya. Saya juga merekomendasikan menangani setiap komponen secara terpisah dari bawah ke atas.
L
Ada banyak panduan bagus yang tersedia untuk membantu Anda. Daftar ini mungkin atau mungkin tidak membantu Anda tergantung pada distribusi Anda.
Apache A bisa menyenangkan untuk diamankan. Saya merasa lebih mudah untuk mengeraskan OS dan mempertahankan kegunaan daripada Apache atau PHP.
Huruf M
P
Ini berjalan langsung ke seluruh gagasan Praktik Pemrograman Aman, yang merupakan disiplin sendiri. SANS dan OWASP memiliki jumlah informasi yang konyol tentang masalah ini, jadi saya tidak akan mencoba untuk mereplikasi di sini. Saya akan fokus pada konfigurasi runtime dan membiarkan pengembang Anda khawatir tentang sisanya. Terkadang 'P' dalam LAMP mengacu pada Perl, tetapi biasanya PHP. Saya mengasumsikan yang terakhir.
Anda telah mengajukan pertanyaan yang, sejujurnya, layak untuk beberapa buku tentang topik ini. Tetapi ada beberapa pedoman dasar umum yang berfungsi dengan baik:
Semoga ini bisa membantu Anda memulai.
Berikut ini adalah daftar periksa yang bagus yang ingin saya mulai.
Menambah apa yang disarankan David, semakin modular instalasi Anda, maksud saya membatasi akses ke pengguna / grup tertentu yang dibuat khusus untuk satu tugas dan membatasi cakupannya, semakin aman tumpukan LAMP Anda: Contohnya adalah memiliki pengguna Apache untuk file / folder Apache dengan izin yang ditetapkan dan tidak dalam kelompok apa pun yang dapat mengakses file / folder sistem yang kritis. Pengguna yang dapat mengakses tabel MySql yang dikaitkan dengan situs web Anda yang akan Anda layani dan hanya tabel itu. Selain itu, Anda dapat membatasi akses mereka untuk memberikan jumlah akses minimum dari panggilan PHP. Juga, pastikan bahwa nama pengguna MySQL yang digunakan / diekspos melalui file PHP bukan nama pengguna atau kata sandi yang sama yang digunakan untuk pengguna lain.
Apa artinya ini: jika salah satu pengguna apache atau pengguna MySql dikompromikan, mereka tidak dapat melakukan kerusakan apa pun di luar ruang lingkup folder apache memiliki akses ke (dalam kasus pengguna apache) dan di luar tabel ( s) / database (dalam kasus pengguna untuk database MySQL).
Jika entah bagaimana pengguna MySQL dikompromikan, mereka tidak bisa, misalnya, mengakses database dan menjatuhkan semua database dari MySQL dan merusak semua data Anda. Mereka MUNGKIN dalam keadaan tertentu dapat menjatuhkan tabel atau memasukkan informasi dalam beberapa tabel dalam database yang terisolasi, itulah sebabnya penting untuk hanya memberikan akses tabel di mana itu benar-benar diperlukan dan hanya memberikan izin yang diperlukan ... jika Anda tidak t perlu memiliki hak istimewa drop table atau memperbarui hak istimewa, maka jangan berikan kepada pengguna tersebut.
Juga, jika karena alasan tertentu nama pengguna dan kata sandi akun administratif Anda ditemukan untuk MySQL, jika Anda menggunakan nama pengguna yang berbeda dari nama pengguna mana pun di sistem Anda, mereka harus terlebih dahulu memecah keamanan sistem Anda sebelum masuk ke database Anda untuk melakukan kerusakan. Hal yang sama berlaku untuk pengguna apache dan akses ke file.
Waktu contoh! Saya akan memberikan contoh sistem untuk menyederhanakan ide.
katakanlah Anda memiliki pengguna di sistem Anda (root harus dinonaktifkan untuk keamanan melalui sesuatu seperti umod -l atau passwd -l, dll.): john, barney, terence, dan lisa.
Anda dapat membuat pengguna di MySQL dengan nama bigbird (pastikan Anda menggunakan kata sandi hash). Bigbird hanya memiliki hak pilih tertentu dan memperbarui hak istimewa, tetapi tidak menjatuhkan atau membuat, dan tentu saja tidak . Selain itu, Anda membuat pengguna MySQL administratif lainnya dengan nama garfield untuk mengerjakan database MySQL dan Anda menghapus pengguna root dari database MySQL sehingga tidak dapat dikompromikan. garfield telah dikabulkan . hak istimewa di seluruh MySQL (secara efektif, ini hanya mengganti nama root).
sekarang, Anda membuat grup apache atau pengguna dan kami akan menyebutnya apweb2. Appweb2 bukan anggota grup lain, dan semua file / folder untuk apache disimpan di / home / apweb2 /. Setiap host virtual akan memiliki subfolder sendiri dan masing-masing host ini akan memiliki set dokumen root diatur ke subfolder itu. Symlinks akan dinonaktifkan agar tidak secara tidak sengaja memberikan akses ke seluruh sistem.
Juga, Anda dapat membatasi akses ssh hanya untuk pengguna tertentu (atau grup tertentu, saya suka menempatkan mereka di grup ssh, dan menjadikan satu-satunya hal yang dapat menggunakan ssh).
Anda juga dapat memilih pengguna mana yang memiliki hak sudo untuk membatasi hal-hal lebih jauh. Langkah lain yang dapat Anda lakukan lebih lanjut adalah membuat pengguna ssh mana pun tidak dapat melakukan sudo, Anda dapat membuat pengguna khusus yang dapat menggunakan sudo yang tidak dapat menggunakan ssh, sehingga begitu Anda ssh, Anda harus masuk ke pengguna lain untuk memiliki akses ke sudo.
Jadi, dengan memodulasi setiap segmen, jika ada yang dikompromikan, seluruh tumpukan tidak akan dikompromikan dan Anda dapat memperbaiki masalah 1 alih-alih harus memulai dari awal lagi dari awal.
Saya menemukan dokumen ini dari SANS.org sangat membantu http://www.sans.org/score/checklists/linuxchecklist.pdf
Saat ini, jangan abaikan virtualisasi kontainer, yaitu Docker, systemd-nspawn, dan mekanisme virtualisasi kontainer tempat mereka dibangun (ruang nama, grup). Menggunakan virtualisasi wadah memungkinkan Anda untuk mengisolasi proses, misalnya, jika salah satu layanan terganggu, penyerang tidak akan mendapatkan akses ke layanan lain.
Dalam kasus LAMP, dimungkinkan untuk menggunakan, misalnya, empat kontainer Docker dengan SSH-server, Apache, MySQL, PHP-FPM / Python / Perl / dll.