Saya menggunakan Webmin untuk membuat Host Virtual berikut:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
Dan ketika me-restart Apache saya dapatkan
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
Masalahnya, direktori itu TIDAK ADA. Saya menatapnya. pwd
menunjukkan kepada saya bahwa itu adalah direktori saya saat ini, dll. Tidak sulit untuk mengejanya dengan benar. Saya tidak dapat menemukan kesalahan atau peringatan lain di log httpd. apache: apache memiliki direktori dan semua subdirektori / file. Tidak ada symlink atau apapun yang terlibat di sini. Apa yang saya lewatkan atau apa lagi yang harus saya perhatikan untuk mengetahui mengapa ini terjadi?
OS adalah CentOS 6.0
apache-2.2
centos
Jake Wilson
sumber
sumber
DocumentRoot
, yang mungkin memberi Anda beberapa wawasan tentang apa yang dilihat server web. Anda mungkin juga ingin memeriksa direktori lain di sepanjang jalan, meskipun jika itu benar-benar di bawah/var/www/
itu seharusnya tidak menjadi masalahJawaban:
Hal pertama yang muncul di pikiran saya adalah apakah Apache memiliki izin untuk mengakses direktori itu?
Juga, ini: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
sumber
apache:apache
, namun saya mengikuti tautan itu (yang ada di SO untuk beberapa alasan?) Dan memang SELinux adalah masalahnya. SELinux menyebabkan lebih banyak masalah yang tidak baik imo.setenforce 0
memperbaikinya, tetapi melihat izinls-laZ
, symlink memiliki izin yang sama dengan file lain yang dapat diakses, selain dari chmod. File-file tersebut adalah -rw-r - r--, dan symlinknya adalah lrwxrwxrwx. Mungkinkah itu alasannya tidak bekerja dengan setenforce 1?Berikut ini adalah pendekatan tutorial untuk kasus SELinux:
Cari tahu apakah SELinux aktif:
Jika demikian, beberapa pemeriksaan komparatif mungkin membantu. Misalnya, server memiliki DocumentRoot default di
/var/www/html
, tetapi kami menginginkannya di tempat lain seperti/path/to/document/root
.Jika SELinux tidak secara aktif mengacaukan sumber daya,
ls -dZ
pada direktori akan muncul sesuatu seperti:Di sisi lain, jika konteks SELinux diterapkan,
ls -dZ
lebih mirip:Jika kita dibandingkan dengan DocumentRoot yang berfungsi, itu akan terlihat seperti:
The
_r
dan_t
berhubungan dengan-r
(--role
dan-t
(--type
) argumen untukchcon
Berikut ini adalah cut-down halaman manual.:Pada tebakan pertama, yang berikut ini sepertinya berhasil, tetapi mungkin tidak.
Jika server web masih tidak dapat melihat DocumentRoot, perhatikan bahwa konteks sangat penting untuk kembali ke root:
Pada titik ini, server web dapat melihat direktori.
Ya, saya belajar dengan cara yang sulit malam ini.
CATATAN: Penggunaan chcon secara konseptual memiliki kelemahan per dokumentasi RedHat ( 5.6.1. Perubahan Sementara: chcon ) yang menyatakan:
Gunakan semanage dan restorecon untuk membuat perubahan yang lebih permanen. Contoh singkat:
Sehubungan dengan restorecon , perhatikan bahwa -F diperlukan untuk mempengaruhi seluruh konteks (yaitu pengguna dan tipe). Juga, -R berarti melakukan perubahan secara rekursif. Argumen -v atau -p dapat menunjukkan kemajuan baik secara verbose atau singkat. Gunakan -FRnv untuk melihat apa yang akan terjadi tanpa benar-benar membuat perubahan.
Setelah semanage digunakan dengan cara ini, dimungkinkan untuk melihat perubahan keamanan lokal dengan perintah seperti:
Output dari ekspor semanage dapat disimpan dan digunakan oleh impor semanage untuk membuatnya lebih mudah untuk menerapkan satu set perubahan ke berbagai sistem.
CATATAN: Jawaban ini memberikan konteks tipe paling dasar untuk situs. Keamanan bisa jauh lebih terperinci. Misalnya, lihat daftar jenis yang dapat diterapkan ke halaman server web dengan perintah seperti:
CATATAN: Utilitas seperti semanage dan seinfo mungkin tidak diinstal secara default. Setidaknya pada beberapa distribusi, paket-paket yang diperlukan dapat dinamai seperti ini:
sumber
Kedengarannya seperti SELinux. Saya akan menyarankan Anda bekerja dengannya. Lihat di direktori / var / log / audit untuk mengonfirmasi.
Kasus yang lebih buruk, Anda selalu dapat mematikan selinux, seperti disebutkan sebelumnya, tetapi saya sarankan Anda bekerja dengannya. Sebagai contoh, jika saya membuat direktori untuk digunakan dengan Apache, itu tidak akan memiliki konteks yang tepat, seperti disebutkan di sini.
Jadi jika itu terjadi, saya hanya menerapkan konteks dari direktori lain, yang dalam hal ini adalah html:
sumber
Gunakan perintah ini di root untuk mengubah konteks keamanan "httpd_sys_content_t" yang memungkinkan Apache untuk mengeksekusi.
Gunakan
ls -dZ /var/www/whatever
untuk melihat detail peran keamanansumber