Saya hanya memutar kotak Ubuntu 11.10 dan kemudian berlari apt-get install apache2 php5
untuk menginstal apache2 dan PHP 5 pada kotak. Sekarang berfungsi sebagai "server web" dan memuat "Berhasil!" halaman. Sekarang saya mencoba untuk memperketat keamanan dan saya memiliki pertanyaan berikut tentang server web linux:
- Siapa yang seharusnya menjalankan apache?
- Grup apa yang harus diikuti oleh pengguna ini?
- Paket apa yang dapat membuat PHP (dan Apache?) Berjalan sebagai pemilik file? (seperti pada host web bersama) Haruskah saya menggunakan paket ini? Apakah mudah / layak untuk dipertahankan pada sistem yang kecil?
- Apa yang seharusnya menjadi izin default untuk file dan folder yang dilayani ke web dengan menjalankan apache
www-data
? Untuk apache / php berjalan sebagai pengguna?
Saya telah melakukan hal-hal berikut dalam pemeriksaan pengaturan default:
Struktur File
Ketika saya cd /
dan melakukan ls -al
daftar konten, saya melihat /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Jika saya cd
masuk var
dan ls -al
saya melihat:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Akhirnya, di dalam /var/www
saya melihat:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Takeaway utama saya adalah sejauh ini semua file ini milik root:root
, file memiliki izin 644, dan direktori memiliki izin 755.
Izin Apache
Jika saya membuat file sebagai root /var/www/test.php
dengan konten:
<?php echo shell_exec('whoami');
dan memuat file itu ke browser yang diceritakannya kepada saya www-data
, yang sama seperti di /etc/apache2/envvars
file:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Jika saya melakukannya ps aux | grep -i apache
saya melihat yang berikut:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Jadi siapa yang menjalankan apache? Sepertinya mungkin proses pertama adalah sebagai root
, mungkin dari /etc/init.d/apache
skrip ketika sistem dimulai, dan yang lainnya muncul www-data
dari yang pertama. Apakah itu benar?
Selanjutnya, jika saya mengetik groups www-data
maka saya melihat www-data : www-data
- jadi sepertinya hanya berada di www-data
grup. Saya kira ini adalah praktik standar juga.
Hosting dan Keamanan Bersama
Jadi, jika saya memahami sesuatu dengan benar, jika apache berjalan www-data
dan saya ingin apache dapat membaca direktori, x
bit tersebut harus diatur untuk kelompok dunia (lainnya) ( o+x
), dan itu juga perlu disetel pada semua induk direktori sepanjang jalan hingga rantai ( www
, var
). Dan jika saya ingin apache dapat membaca dari suatu file, maka o+r
bit tersebut perlu diatur.
Sayangnya saya percaya ini memperkenalkan celah keamanan untuk beberapa aplikasi dan / atau banyak pengguna di kotak linux yang sama: Semua file web harus dapat dibaca dunia, dan karena itu mereka juga dapat diakses oleh aplikasi lain dan pengguna lain pada sistem. Jika satu aplikasi yang diinstal pada sistem memiliki kerentanan keamanan yang memungkinkan input pengguna mentah dan tidak divalidasi, yang kemudian dieksekusi oleh PHP, penyerang jarak jauh kemudian dapat menelusuri semua file lain di sistem web yang dapat dibaca dunia. Demikian juga, jika kotak memiliki beberapa pengguna, dan seorang pengguna mengetahui jalur file web pengguna lain, ia kemudian dapat membaca konten file (dan melihat hal-hal sensitif seperti string koneksi database, dll).
Saya pernah mendengar tentang dua paket, suphp
dan phpsuexec
kesepakatan itu memungkinkan file pengguna dilayani "seperti mereka" pada sistem bersama. Salah satu keunggulan dari ini adalah memungkinkan aplikasi web (seperti Wordpress) untuk membuat dan memodifikasi file - sangat membantu untuk menambah tema, plugin, dan meningkatkan perangkat lunak. Tentu saja mungkin lebih aman untuk melakukan hal-hal ini secara manual, tetapi bisakah kompromi dibuat dengan salah satu paket yang disebutkan di atas? Atau mungkin dengan menggunakan chown
untuk membuat grup direktori wordpress milik www-data
dan mengatur bit sticky pada grup ( g+s
)?
Saya hanya menggunakan ini sebagai pengguna akhir dari perusahaan hosting web, jadi saya tidak tahu seluk beluknya, dan apakah mereka bahkan masuk akal untuk menginstal pada sistem kecil, atau jika ada beberapa lainnya Langkah-langkah keamanan yang harus saya gunakan sebagai gantinya, tetapi saya pikir saya akan menyebutkannya di sini karena sepertinya merupakan salah satu cara yang mungkin untuk mengatasi beberapa masalah saya.
Kembali ke Pertanyaan
- Siapa yang seharusnya menjalankan apache?
- Grup apa yang harus diikuti oleh pengguna ini?
- Paket apa yang dapat membuat PHP (dan Apache?) Berjalan sebagai pemilik file? (seperti pada host web bersama) Haruskah saya menggunakan paket ini? Apakah mudah / layak untuk dipertahankan pada sistem yang kecil?
- Apa yang seharusnya menjadi izin default untuk file dan folder yang dilayani ke web dengan menjalankan apache
www-data
? Untuk apache / php berjalan sebagai pengguna?