Saya mengalami masalah saat menyiapkan Apache di Ubuntu. Saya telah mengikuti panduan ini .
# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built: Feb 22 2011 18:33:02
Direktori publik saya, / var / www, berhasil menyajikan dan menjalankan halaman PHP yang ditempatkan di dalamnya. Namun, saya ingin membuat symlink di / var / www yang mengarah ke direktori di folder home saya dan melayani halaman di sana.
[root /var/www]# ll
total 36
drwxr-xr-x 3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about
Saat saya mencoba mengakses / tentang di browser, saya mengerti
Forbidden
You don't have permission to access /about on this server.
Sejauh yang saya tahu, saya memberikan hak istimewa yang cukup untuk file yang ingin saya layani:
[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume
Saya mengetahui opsi FollowSymLinks, dan saya yakin ini disetel di file / etc / apache2 / sites-enabled / 000-default saya:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Tahu apa yang bisa saya lewatkan?
chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/about
yang memberikan izin tersebut hanya ke aplikasi apache (_www), yang sedikit lebih aman daripada "lainnya".Kesalahan 403 juga dapat disebabkan oleh sistem file terenkripsi, misalnya symlink ke folder rumah terenkripsi .
Jika symlink Anda mengarah ke folder terenkripsi, pengguna apache (mis. Www-data) tidak dapat mengakses konten, meskipun izin apache dan file / folder diatur dengan benar. Akses pengguna www-data dapat diuji dengan panggilan seperti ini:
Ada solusi / solusi untuk ini, misalnya menambahkan data-www pengguna ke grup pribadi Anda (mengekspos data terenkripsi ke pengguna web) atau dengan membuat folder rsynced yang tidak terenkripsi (mungkin agak aman). Saya sendiri mungkin akan mencari solusi rsync selama pengembangan.
/ubuntu/633625/public-folder-in-an-encrypted-home-directory
Alat yang nyaman untuk tujuan saya adalah lsyncd . Ini memungkinkan saya untuk bekerja langsung di folder utama terenkripsi saya dan dapat melihat perubahan hampir secara instan di halaman web apache. Sinkronisasi dipicu oleh perubahan dalam sistem file, memanggil rsync. Karena saya hanya mengerjakan halaman web dan skrip yang agak kecil, sinkronisasi berjalan sangat cepat. Saya memutuskan untuk menggunakan jeda singkat 1 detik sebelum rsync dimulai, meskipun dimungkinkan untuk menyetel jeda 0 detik .
Menginstal lsyncd (di Ubuntu):
Memulai layanan latar belakang:
sumber
sudo -u www-data ...
adalah cara terbaik untuk memeriksa apakah ada masalah perizinan! Perhatikan bahwa pengguna dapat berupa www-data, apache, atau yang lainnya tergantung pada distro Anda.Saya mengalami masalah serupa yang tidak dapat saya selesaikan untuk waktu yang lama di server baru saya. Selain jawaban palacsint, pertanyaan yang bagus untuk ditanyakan adalah: apakah Anda menggunakan Apache 2.4? Di Apache 2.4 ada mekanisme berbeda untuk pengaturan izin yang tidak berfungsi ketika dilakukan dengan menggunakan konfigurasi di atas, jadi saya menggunakan solusi yang dijelaskan dalam posting blog ini .
Pada dasarnya, yang perlu saya lakukan adalah mengonversi file konfigurasi saya dari:
untuk:
Perhatikan bagaimana baris Urutan dan izinkan telah diganti dengan Memerlukan semua yang diberikan
sumber
access_compat
modul. Jika modul itu diaktifkan, bagian pertama kemungkinan tidak akan berfungsi seperti yang diharapkan. Jika tidak ada, mencoba menjalankan Apache2 akan gagal dengan kesalahan./etc/httpd/conf/httpd.conf
ada di sistem saya, dan juga, direktori/etc/httpd/
tersebut tidak ada./etc/apache2/apache2.conf
ada untuk saya.Terkait dengan pertanyaan ini, saya baru tahu mengapa vhost saya memberi saya 403 itu.
Saya telah menguji SEMUA kemungkinan pada pertanyaan ini dan lainnya tanpa keberuntungan. Ini hampir membuatku gila.
Saya menyiapkan server dengan peluncuran rilis yang mirip dengan Capistrano melalui symlinks dan ketika saya mencoba mengakses folder DocRoot (yang sekarang menjadi symlink ke folder rilis saat ini) itu memberi saya 403.
Vhost saya adalah:
dan file httpd.conf utama saya adalah (default Apache 2.4 install):
Ternyata definisi Opsi utama lebih diutamakan daripada vhosts fiel saya (bagi saya itu kontra intuitif). Jadi saya telah mengubahnya menjadi:
dan Eureka! (perhatikan tanda plus sebelum FollowSymLinks di file httpd.conf UTAMA. Semoga ini membantu beberapa jiwa yang hilang lainnya.
sumber
Ada cara lain yang membuat tautan simbolis gagal, seperti yang saya temukan dalam situasi saya. Jika Anda memiliki sistem SELinux sebagai server dan tautan simbolik mengarah ke folder yang dipasang di NFS (sistem file lain mungkin menghasilkan gejala yang sama),
httpd
mungkin melihat konteks yang salah dan menolak untuk menyajikan konten folder target.Dalam kasus saya, konteks SELinux
/var/www/html
(yang dapat Anda perolehls -Z
) adalahunconfined_u:object_r:httpd_sys_content_t:s0
. Tautan simbolis di/var/www/html
akan memiliki konteks yang sama, tetapi konteks target mereka, menjadi folder yang dipasang di NFS, adalahsystem_u:object_r:nfs_t:s0
.Solusinya adalah dengan menambahkan
fscontext=unconfined_u:object_r:httpd_sys_content_t:s0
kemount
pilihan (misalnya# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>
).rootcontext
tidak relevan dandefcontext
ditolak oleh NFS. Saya tidak mencobacontext
sendiri.sumber
Pertama nonaktifkan selinux (vim / etc / selinux / config)
vim /etc/httpd/conf/httpd.conf edit baris berikut untuk symlink dan pengindeksan direktori:
Jika file .htaccess maka AllowOverride all
sumber
/etc/httpd/
folder di sistem saya?Bagi siapa pun yang mengalami masalah setelah memutakhirkan ke 14.04 /ubuntu/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04 karena root diubah sebelum memutakhirkan = / var / www setelah peningkatan = / var / www / html
sumber
Selain mengubah izin seperti yang ditunjukkan oleh jawaban lain, saya harus memulai ulang apache agar dapat diterapkan:
sumber
Namun kesalahan kecil lainnya, jika Anda membutuhkan
AllowOverride All
:Di suatu tempat jauh di dalam pohon fs, tua
.htaccess
memilikiOptions Indexes
dari pada
Options +Indexes
hanya itu yang diperlukan untuk menonaktifkan
FollowSymLinks
set di konfigurasi server dengan santai, dan menyebabkan 403 misterius di sini.sumber
Dengan opsi FollowSymLinks diaktifkan:
Anda membutuhkan semua direktori di symlink agar dapat dieksekusi oleh pengguna yang digunakan httpd.
jadi untuk kasus penggunaan umum ini:
Anda dapat memeriksa izin pemilik dengan namei :
Dalam kasus saya,
to
direktori hanya dapat dieksekusi untuk pengguna saya:Aktifkan eksekusi oleh orang lain, selesaikan:
Lihat direktori yang tidak dapat dieksekusi mungkin berbeda, atau Anda perlu memengaruhi grup, bukan yang lain, yang bergantung pada kasus Anda.
sumber