अपाचे सिम्लिंक का पालन नहीं करेगा (403 निषिद्ध)


90

मुझे उबंटू पर अपाचे स्थापित करने में कुछ परेशानी हो रही है। मैं इस गाइड का पालन ​​कर रहा हूं ।

# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built:   Feb 22 2011 18:33:02

मेरी सार्वजनिक निर्देशिका, / var / www, सफलतापूर्वक PHP पेजों की सेवा कर सकती है और उस पर अमल कर सकती हैं। हालांकि, मैं / var / www में एक सिम्लिंक बनाना चाहता हूं जो मेरे होम फ़ोल्डर में एक निर्देशिका को इंगित करता है और वहां पृष्ठों की सेवा करता है।

[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

जब मैं ब्राउज़र पर पहुंचने / उसके बारे में प्रयास करता हूं, तो मुझे मिल जाता है

Forbidden

You don't have permission to access /about on this server.

जहाँ तक मुझे पता है, मैंने उन फ़ाइलों के लिए पर्याप्त विशेषाधिकार दिए हैं जिनकी मैं सेवा करना चाहता हूँ:

[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

मुझे FollowSymLinks विकल्प के बारे में पता है, और मुझे विश्वास है कि यह मेरे / etc / apache2 / साइट्स-सक्षम / 000-डिफ़ॉल्ट फ़ाइल में सेट है:

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>

कोई भी विचार जो मुझे याद आ रहा है?

जवाबों:


126

जाँच करें कि अपाचे ने अधिकारों के लिए निष्पादित किया है /root, /root/siteऔर /root/site/about

Daud:

chmod o+x /root /root/site /root/site/about

8
बहुत बहुत धन्यवाद ... मुझे महसूस नहीं हुआ कि मूल निर्देशिकाओं को भी क्रियान्वित किया जाना था।
टिम

39
वैसे, मैं यह नहीं बता रहा हूँ कि यह काम नहीं करेगा, लेकिन सामान्य रूप से, ओ + एक्स को / रूट पर देना एक अच्छा विचार नहीं है;)
मिकाल रेज़मिएनिकी

11
मिशाल सही है। मैंने पाया कि मैं ACLs का उपयोग कर सकता हूं (मैक में, कम से कम):, chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/aboutजो उन अनुमतियों को केवल अपाचे ऐप (_www) के लिए देता है, जो "अन्य" की तुलना में थोड़ा सुरक्षित है।
जेम्स एस

1
मैक ओएस (10.9.4) पर मेरे ~ / डॉक्यूमेंट्स का कोई निष्पादन अधिकार नहीं था और मेरे पास एक git रेपो था जहां यह आपकी साइट फ़ाइलों की मेजबानी करेगा। ~ / दस्तावेजों पर chmod o + x को प्रदान करते हुए चाल चली! धन्यवाद!
एरनानी जोपरट

1
अंत में जवाब मिला! धन्यवाद।
व्हेन

21

403 त्रुटि एक एन्क्रिप्टेड फ़ाइल सिस्टम के कारण भी हो सकती है, उदाहरण के लिए एक एन्क्रिप्टेड होम फ़ोल्डर के लिए एक सिमलिंक ।

यदि आपका सिमिलिंक एन्क्रिप्टेड फ़ोल्डर में इंगित करता है, तो Apache उपयोगकर्ता (जैसे www-data) सामग्री तक नहीं पहुंच सकता है, भले ही एपाचे और फ़ाइल / फ़ोल्डर अनुमतियाँ सही तरीके से सेट की गई हों। Www-डेटा उपयोगकर्ता की पहुंच को इस तरह के कॉल के साथ परीक्षण किया जा सकता है:

sudo -u www-data ls -l /var/www/html/<your symlink>/

इसके लिए वर्कअराउंड / समाधान हैं, उदाहरण के लिए www-data उपयोगकर्ता को अपने निजी समूह में जोड़ना (वेब उपयोगकर्ता के लिए एन्क्रिप्टेड डेटा को उजागर करता है) या एक अनएन्क्रिप्टेड rsynced फ़ोल्डर (शायद बल्कि सुरक्षित) स्थापित करके। मैं खुद के लिए विकास के दौरान एक rsync समाधान के लिए जाना होगा।

/ubuntu/633625/public-folder-in-an-encrypted-home-directory

मेरे उद्देश्यों के लिए एक सुविधाजनक उपकरण lsyncd है । यह मुझे अपने एन्क्रिप्टेड होम फ़ोल्डर में सीधे काम करने की अनुमति देता है और अपाचे वेब पेज में लगभग तुरंत परिवर्तन देखने में सक्षम होता है। फ़ाइल सिस्टम में परिवर्तन द्वारा सिंक्रनाइज़ेशन को ट्रिगर किया जाता है, जिसे rsync कहा जाता है। जैसा कि मैं केवल छोटे वेब पेज और स्क्रिप्ट पर काम कर रहा हूं, सिंकिंग बहुत तेज है। मैंने rsync शुरू होने से पहले 1 सेकंड की छोटी देरी का उपयोग करने का फैसला किया, भले ही 0 सेकंड की देरी सेट करना संभव हो ।

Lsyncd स्थापित करना (Ubuntu में):

sudo apt-get install lsyncd

पृष्ठभूमि सेवा शुरू करना:

lsyncd -delay 1 -rsync /home/<me>/<work folder>/ /var/www/html/<web folder>/

3
sudo -u www-data ...अगर वहाँ एक अनुमतियों की समस्या है की जाँच करने के लिए एक शानदार तरीका है! ध्यान दें कि उपयोगकर्ता आपके डिस्ट्रो के आधार पर www-data, Apache, या कुछ और हो सकता है।
मकासबर्ग

अंत में, अर्घ! मैं पहले से ही अपनी सबसे बुनियादी क्षमताओं पर संदेह कर रहा था!
कलाबलिक

यह करने के लिए घंटे खो दिया है और यह अंत में एन्क्रिप्शन था!
म्योल

15

मुझे एक समान समस्या हो रही थी जिसे मैं अपने नए सर्वर पर लंबे समय तक हल नहीं कर सकता था। Palacsint के जवाब के अलावा, एक अच्छा सवाल यह है कि क्या आप Apache 2.4 का उपयोग कर रहे हैं? Apache 2.4 में उपरोक्त कॉन्फ़िगरेशन का उपयोग करते समय काम न करने वाली अनुमतियों को सेट करने के लिए एक अलग तंत्र है, इसलिए मैंने इस ब्लॉग पोस्ट में बताए गए समाधान का उपयोग किया ।

मूल रूप से, मुझे जो करने की ज़रूरत थी वह मेरी कॉन्फ़िगर फ़ाइल को यहाँ से परिवर्तित कर दिया गया था:

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all

</Directory>

सेवा:

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

ध्यान दें कि ऑर्डर और अनुमति रेखाओं को किस तरह से प्रतिस्थापित किया गया है, सभी की आवश्यकता है


ध्यान दें कि ऑर्डर / अनुमति / अस्वीकार आदेश अभी भी अधिकांश कंप्यूटरों पर उपलब्ध हैं। नए संस्करणों में, इसे access_compatमॉड्यूल में लागू किया गया है। यदि वह मॉड्यूल सक्षम है, तो पहला भाग अपेक्षित रूप से काम करने की संभावना नहीं है। यदि यह नहीं है, तो Apache2 को शुरू करने का प्रयास त्रुटियों के साथ विफल होना चाहिए।
एलेक्सिस विलके

कौन सा विन्यास? /etc/httpd/conf/httpd.confअपने सिस्टम पर मौजूद नहीं है, और यह भी, निर्देशिका /etc/httpd/मौजूद नहीं है।
एरोन फ्रेंके

@AaronFranke क्या आपके पास अपाचे स्थापित हैं? यहां हो सकता है:
/etc/apache2/httpd.conf/etc/apache2/apache2.conf/etc/httpd/httpd.conf/etc/httpd.conf/httpd.conf

हां मेरे पास अपाचे स्थापित है, और मैं उबंटू पर हूं। /etc/apache2/apache2.confमेरे लिए मौजूद है।
एरोन फ्रेंके

7

इस प्रश्न से संबंधित, मुझे अभी पता चला है कि मेरी विस्टा मुझे 403 क्यों दे रही थी।

मैंने इस सवाल पर सभी संभावनाओं का परीक्षण किया था और अन्य बिना भाग्य के। यह लगभग मुझे पागल कर देता है।

मैं एक सर्वर की स्थापना कर रहा हूँ जिसमें सीलिंट्रानो के समान सिमिलिंक के माध्यम से तैनाती मौजूद है और जब मैंने DocRoot फ़ोल्डर (जो कि वर्तमान रिलीज़ फ़ोल्डर का सिम्लिंक है) को एक्सेस करने का प्रयास किया तो इसने मुझे 403 दिया।

मेरा व्रत है:

DocumentRoot /var/www/site.com/html
<Directory /var/www/site.com/html>
        AllowOverride All
        Options +FollowSymLinks
        Require all granted
</Directory>

और मेरी मुख्य httpd.conf फ़ाइल थी (डिफ़ॉल्ट अपाचे 2.4 स्थापित):

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes -FollowSymLinks -Includes
(...)

यह पता चला है कि मुख्य विकल्प परिभाषा मेरे vhosts क्षेत्र (मेरे लिए है कि काउंटर सहज ज्ञान युक्त) पर पूर्वता ले रहा था। इसलिए मैंने इसे बदल दिया है:

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes +FollowSymLinks -Includes
(...)

और यूरेका! (MAIN httpd.conf फ़ाइल में FollowSymLinks से पहले प्लस चिन्ह पर ध्यान दें। आशा है कि यह कुछ अन्य खोई हुई आत्मा की मदद करेगा।


2.4 अपाचे में, आपका समाधान कॉन्फ़िगरेशन को अमान्य कर देगा और httpd शुरू करने में विफल हो जाएगा, क्योंकि आप एकल विकल्प लाइन में '+' और '-' को जोड़ नहीं सकते हैं।
डेस्टो

हां, यह तब भी था, जब मैंने फ़ाइल में "पहले" एक डॉक्यूमेंटरूट घोषित किया था, यह बाल अनुभाग (क्या?)
रोवरडपैक

2

एक और तरीका है कि प्रतीकात्मक लिंक आपको विफल कर सकते हैं, जैसा कि मैंने अपनी स्थिति में खोजा था। यदि आपके पास सर्वर के रूप में एक SELinux सिस्टम है और प्रतीकात्मक लिंक NFS-माउंटेड फ़ोल्डर (अन्य फाइल सिस्टम समान लक्षणों को उत्पन्न httpdकर सकते हैं ) की ओर इशारा करते हैं, तो गलत संदर्भ देख सकते हैं और लक्ष्य फ़ोल्डर की सामग्री को परोसने से इंकार कर सकते हैं।

मेरे मामले में SELinux संदर्भ /var/www/html(जिसे आप प्राप्त कर सकते हैं ls -Z) है unconfined_u:object_r:httpd_sys_content_t:s0। प्रतीकात्मक लिंक में /var/www/htmlएक ही संदर्भ होगा, लेकिन उनके लक्ष्य का संदर्भ, एनएफएस-माउंटेड फ़ोल्डर होने के नाते, हैं system_u:object_r:nfs_t:s0

समाधान विकल्प (जैसे ) में जोड़ना fscontext=unconfined_u:object_r:httpd_sys_content_t:s0है । अप्रासंगिक है और एनएफएस द्वारा खारिज कर दिया जाता है। मैंने खुद कोशिश नहीं की ।mount# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>rootcontextdefcontextcontext


2

पहले selinux को निष्क्रिय करें (vim / etc / selinux / config)

vim /etc/httpd/conf/httpd.conf सहानुभूति और निर्देशिका अनुक्रमित के लिए निम्नलिखित पंक्तियों को संपादित करें:

documentroot /var/www/html
<directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
</directory>

यदि .htaccess फ़ाइल है तो AllowOverride सभी


क्या होगा यदि मेरे पास /etc/httpd/मेरे सिस्टम पर फ़ोल्डर नहीं है ?
एरोन फ्रेंके


1

अनुमतियों को बदलने के अलावा, जैसा कि अन्य उत्तरों ने संकेत दिया है, मुझे इसे प्रभावी करने के लिए अपाचे को फिर से शुरू करना पड़ा:

sudo service apache2 restart

0

फिर भी एक और सूक्ष्म नुकसान, अगर आपको जरूरत है AllowOverride All:

कहीं न कहीं FS पेड़ में गहरी, एक पुराने .htaccessहोने

    Options Indexes

के बजाय

    Options +Indexes

क्या यह FollowSymLinksसर्वर कॉन्फ़िगरेशन में सेट को गैर-अक्षम रूप से अक्षम करने के लिए लिया गया था , और यहां एक रहस्यमय 403 का कारण था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.