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?
Jawaban:
Jangan mengubah kepemilikan apa pun menjadi www-data kecuali Anda ingin php dapat mengedit konten file / folder itu
Terlepas dari apa pun yang Anda lakukan: folder perlu membaca dan mengeksekusi izin bagi pengguna untuk menemukan file; file perlu izin baca agar pengguna dapat membacanya. Jika Anda mendapatkan kesalahan izin saat mengubah sesuatu - Anda telah berhasil menghapus izin yang diperlukan secara mendasar ini.
Jika Anda tidak menulis file apa pun melalui aplikasi php Anda, Anda dapat meninggalkan file yang Anda miliki: Anda. Dalam keadaan ini, izin dunia (xx4 / 5) adalah yang berlaku.
Jika Anda meninggalkan file seperti yang Anda miliki: Anda memiliki hak akses file 644 (file) yang artinya adalah Anda hanya dapat mengedit file situs web - www-data bukan Anda - sehingga file tidak dapat diedit.
Jika Anda ingin membatasi akses ke apache + Anda dan memblokir semua akses lainnya
chown -R you:www-data *
. Dengan izin file 640 dan izin folder 750 yang dapat Anda edit, www-data dapat membaca - karena dengan demikian apache membaca izin grup (x4 / 5x).Membatasi minimum jalur Anda mengizinkan apache / php untuk menulis ke - apakah ada tmp dir kebutuhan aplikasi untuk menulis ke - memungkinkan untuk menulis ke folder yang hanya - dan untuk setiap lokasi yang dapat ditulis jika mungkin membuat yakin itu luar yang mendokumentasikan root atau mengambil langkah-langkah untuk memastikan jalur yang dapat ditulis ini tidak dapat diakses web.
Perhatikan bahwa "Anda" seharusnya tidak menjadi root. Mengizinkan akses ssh langsung sebagai root adalah indikator penyimpangan keamanan lainnya (seperti tidak melarang login kata sandi), tapi itu sejumlah pertanyaan tersendiri.
sumber
Ini tidak benar, Anda tidak harus menetapkan
rwx
untuk 'lain'. Anda harus mengubah pemilik dan / atau grup folder / file tertentu yang Anda coba lindungi. Misalnya:Sekarang hanya anggota grup yang
www-data
dapat membaca/var/www/cwd.com
. Dan hanya Anda (cwd) yang bisa menulisnya. Jika Anda ingin mengizinkan aplikasi Anda (melalui Apache) untuk menulis / memodifikasi file di direktori itu juga Anda chmod ke 770.Saya pikir ini mencakup semua masalah Anda, saya tidak melihat alasan untuk mengubah apache pengguna berjalan di bawah.
sumber