Saya mendapatkan instalasi CentOS 6 baru, yang memiliki symlink di root dokumen ke file pengembangan saya:
[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root 0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/
Httpd.conf saya memiliki ini:
<Directory "/">
Options All
AllowOverride None
Order allow,deny
Allow from all
</directory>
Target tautan simbolis memiliki izin yang memungkinkan apache membaca apa pun yang diinginkan:
[root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app
Saya juga telah mencoba menonaktifkan SELinux dengan mengubah /etc/selinux/conf
:
SELINUX=disabled
Namun apa pun yang saya lakukan, ketika seseorang mencoba membuka tautan itu http://localhost/refresh-app/
, saya mendapatkan halaman kesalahan 403 DILARANG dan ini ditulis dalam /var/log/httpd/error_log
:
Symbolic link not allowed or link target not accessible
Mengapa Apache tidak dapat mengakses target symlink?
centos
permissions
apache-httpd
Billy ONeal
sumber
sumber
Jawaban:
Menemukan masalah. Ternyata, Apache ingin akses ke bukan hanya direktori saya melayani,
/home/billy/refresh-app/
tetapi juga setiap direktori di atas itu, yaitu/home/billy/
,/home
, dan/
. (Saya tidak tahu mengapa ... memberi seseorang akses ke subdirektori seharusnya tidak mengharuskan pemberian izin untuk semua yang ada di atas subdirektori itu ....)Saya kira itu sedang mencari
.htaccess
atau sesuatu, atau mungkin * nix menjadi aneh tentang bagaimana ia memperlakukan izin untuk transversal direktori.sumber
/
... cukup banyak) Sistem dengan ACL biasanya memiliki opsi transversal direktori terpisah. Anda akan berpikir setelah 30 tahun sejak Unix dirancang, dan ketersediaan luas sistem ACL, bahwa ACL akan menjadi standar. : sigh:Saya memiliki masalah serupa di mana saya memiliki konfigurasi berikut yang digunakan untuk bekerja dengan Ubuntu 10, tetapi berhenti bekerja dengan Ubuntu 14 (Apache 2.4):
Beralih ke masalah ini diurutkan (meskipun pengguna server web tidak dapat langsung mengakses symlink)
Dari apa yang saya tahu itu hanya
-SymLinksIfOwnerMatch
pengaturan dan ada hubungannya dengan perubahan di Apache 2.4 tapi saya belum mencoba meneliti penyebab pastinya.Saya juga berpikir itu bisa karena
openbase_dir
pembatasan dalam PHP tapi bukan itu.sumber
Kesalahan ini juga dapat disebabkan jika Anda menautkan ke folder terenkripsi.
sumber
Tampaknya "FollowSymLinks" adalah opsi yang Anda butuhkan di httpd.conf. Ini dijelaskan di sini . Sepertinya Anda mungkin memerlukan aturan di htdocs juga ... tapi itu opsi yang Anda butuhkan.
sumber
Options All
-FollowSymLinks
sudah ditentukan.Anda mungkin juga ingin memeriksa apakah selinux diberlakukan atau tidak. Di RedHat / Fedora, jalankan ini:
Jika jawabannya 'Menegakkan', Anda mungkin ingin mengeksekusi
dan coba lagi url di browser Anda.
Perhatikan bahwa saya tidak mengatakan bahwa menonaktifkan selinux adalah cara terbaik untuk menyelesaikan masalah ini, tetapi mungkin membantu untuk mengidentifikasi penyebabnya.
sumber
Buat file .htaccess dengan ini melakukan trik untuk saya (letakkan di dir sebelum symlink).
sumber
/var/www
tautan simbolik ke tautan simbolik menengah lainnya. Jika Anda harus menggunakan tautan simbolis, buatlah tautan simbolis secara LANGSUNG ke tujuan Anda.bahwa apa yang menyelesaikan masalah saya setelah mengizinkan semua izin dan mengizinkan followymlink "Dalam kasus FollowSymLinks secara khusus, HARUS berada di dalam struktur Direktori ketika dalam file .conf. Dari manual Apache saat ini
jawab dari sini
sumber
Solusi saya adalah membuat folder bersama untuk semua repositori yang bernama
/home/repo
.Kemudian symlink dari rumah saya sendiri seperti:
ln -s /home/repo ~/Code
jadi~/Code/www.xxxx.com/public
tunjuk ke/home/repo/www.xxxx.com/public
dan juga tautan ke
/var/www/html
titik root web apache ke/home/repo/www.xxxx.com/public
Ditemukan di sini: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide
Dengan beberapa symlink + grup pengguna akrobat Anda dapat memiliki banyak pengguna / versi yang digunakan.
sumber
@Billey ONeil @Flion Saya tidak bisa menjawab sejalan (hitung rep rendah)
Inilah yang harus saya lakukan:
( note: alias ll = 'ls $ LS_OPTIONS -lh')
Sekarang lihat setiap direktori di tautan sumber
/ home / direktori DATA adalah biang keladinya.
Perbaiki dengan ini:
Cara mengatasinya langsung - tidak perlu memulai kembali apache
sumber
Anda mungkin juga menyesuaikan pengaturan SELinux Anda, dan setenforce mungkin tidak berada di jalur Anda. Jadi coba ini:
dan untuk membuat ini tetap ada di antara reboot
sumber