अपाचे का कहना है कि जब यह होता है तो DocumentRoot मौजूद नहीं है


12

मैंने निम्न वर्चुअल होस्ट बनाने के लिए Webmin का उपयोग किया है:

<VirtualHost *:80>
        DocumentRoot "/var/www/whatever"
        ServerName whatever.ourdomain
        <Directory "/var/www/whatever">
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>

और अपाचे को रीस्टार्ट करते समय मुझे मिलता है

Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist

बात यह है, निर्देशिका बिल्कुल मौजूद नहीं है। मैं इसे ठीक से देख रहा हूं। pwdमुझे दिखाता है कि यह मेरी वर्तमान निर्देशिका है, आदि यह सही वर्तनी के लिए कठिन नहीं है। मुझे httpd लॉग में कोई अन्य त्रुटि या चेतावनी नहीं मिल सकती है। अपाचे: अपाचे निर्देशिका और सभी उपनिर्देशिका / फाइलों का मालिक है। यहां कोई सहानुभूति या कुछ भी शामिल नहीं है। मुझे क्या याद आ रहा है या मुझे यह निर्धारित करने के लिए और क्या देखना चाहिए?

ओएस सेंटोस 6.0 है


Apache उपयोगकर्ता के लिए su और देखें कि क्या यह एक्सेस कर सकता है DocumentRoot, जो आपको वेब सर्वर को देखने के बारे में कुछ जानकारी दे सकता है। तुम भी रास्ते में अन्य निर्देशिकाओं की जाँच करना चाहते हो सकता है, हालांकि अगर यह वास्तव में /var/www/उन के तहत एक समस्या नहीं होनी चाहिए
voretaq7

जवाबों:


8

पहली बात जो मेरे दिमाग में आई, क्या अपाचे को उस डायरेक्टरी को एक्सेस करने की अनुमति है?

इसके अलावा, यह: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist


1
जैसा कि मैंने कहा, हाँ निर्देशिका स्वामित्व में है apache:apache, हालाँकि मैंने उस लिंक का अनुसरण किया है (जो किसी कारण से SO पर है?) और वास्तव में SELinux समस्या थी। SELinux अधिक समस्याओं का कारण बनता है कि यह अच्छा imo करता है।
जेक विल्सन

selinux पहली बार में परेशान कर रहा है, लेकिन यदि आप एक्सेस को प्रबंधित करने के लिए कमांड जानते हैं, तो यह वास्तव में चुनौतीपूर्ण नहीं है। एक बार उपयोग करने के बाद यह एक अच्छा उपकरण है।
रिलिंडो

मेरे पास एक ही मुद्दा था (एक सिम्लिंक पर मौजूद नहीं है), और setenforce 0इसे ठीक किया जा रहा है, लेकिन अनुमतियों को देखते हुए ls-laZ, सिमिलिंक के पास अन्य फ़ाइलों के रूप में एक ही अनुमतियाँ हैं, जो कि chmod के अलावा उपयोग कर सकते हैं। फ़ाइलें हैं rr-r - r--, और सिंलिंक lrwxrwxrwx है। क्या इसका कारण यह हो सकता है कि यह सेटेनफोर्स 1 के साथ काम नहीं करता है?
TMH

जब आप पहली बार इसके आदी हो रहे हैं तो @JakeWilson SELinux बल्कि निराशा होती है। जितना अधिक आप इसका उपयोग करना सीखेंगे, मैं वादा करता हूँ कि आप इसकी और अधिक सराहना करेंगे।
स्पेंसर विलियम्स

16

यहाँ SELinux केस का एक ट्यूटोरियल तरीका है:

पता करें कि क्या SELinux सक्रिय है:

 $ sestatus
 SELinux status:                 enabled
 SELinuxfs mount:                /selinux
 Current mode:                   enforcing
 Mode from config file:          enforcing
 Policy version:                 24
 Policy from config file:        targeted

यदि हां, तो कुछ तुलनात्मक जाँच से मदद मिल सकती है। उदाहरण के लिए, एक सर्वर पर एक डिफ़ॉल्ट डॉक्यूमेंट है /var/www/html, लेकिन हम इसे कहीं और चाहते हैं /path/to/document/root

यदि SELinux सक्रिय रूप से संसाधन के साथ खिलवाड़ नहीं कर रहा है, ls -dZतो निर्देशिका में कुछ इस तरह दिखाई देगा:

$ ls -dZ /path/to/document/root
? /path/to/document/root/

दूसरी ओर, यदि SELinux संदर्भों को लागू किया जाता है, तो ls -dZयह अधिक दिखता है:

$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root

अगर हम एक वर्किंग डॉक्यूमेंट की तुलना करें, तो यह कुछ इस तरह दिखाई देगा:

$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

_rऔर _tसे संबंधित -r( --roleऔर -t( --type) के लिए तर्क chconयहाँ एक कट नीचे आदमी पृष्ठ है।:

NAME
   chcon - change file security context

SYNOPSIS
   chcon [OPTION]... CONTEXT FILE...
   chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
   chcon [OPTION]... --reference=RFILE FILE...

DESCRIPTION
   Change the security context of each FILE to CONTEXT.  With --reference,
   change the security context of each FILE to that of RFILE.

   --reference=RFILE
          use RFILE's security context rather than  specifying a CONTEXT value

   -R, --recursive
          operate on files and directories recursively

पहले अनुमान में, निम्नलिखित काम करने के लिए लग सकता है, लेकिन नहीं हो सकता है।

$ sudo chcon -R -t httpd_sys_content_t /path/to/document/root

यदि वेब सर्वर अभी भी DocumentRoot नहीं देख सकता है, तो ध्यान दें कि संदर्भ सभी रूट पर वापस मायने रखता है:

$ sudo chcon -R -t httpd_sys_content_t /path/to/document
$ sudo chcon -R -t httpd_sys_content_t /path/to
$ sudo chcon -R -t httpd_sys_content_t /path

इस बिंदु पर, वेब सर्वर निर्देशिका देख सकता है।

हां, मैंने आज रात कठिन तरीका सीखा है।

नोट: कॉन्कॉन के उपयोग की अवधारणा प्रति रेडहैट प्रलेखन में एक नकारात्मक पहलू है ( 5.6.1। अस्थायी परिवर्तन: chcon ) जो इस प्रकार है:

The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.

अधिक स्थायी परिवर्तन करने के लिए सीमेन और रिस्टोरॉन का उपयोग करें । एक संक्षिप्त उदाहरण:

 $ sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
     "/path/to/document/root(/.*)?"
 $ sudo restorecon -FR /path/to/document/root

रिस्टोरॉन के संबंध में , ध्यान दें कि -F को पूरे संदर्भ (यानी उपयोगकर्ता और प्रकार) को प्रभावित करना आवश्यक है। इसके अलावा, -R का मतलब है कि पुनरावर्ती रूप से परिवर्तन करना। तर्क -v या -p किसी क्रिया या छद्म फैशन में प्रगति दिखा सकता है। उपयोग -Fnnv यह देखने के लिए कि वास्तव में कोई बदलाव किए बिना क्या होगा।

एक बार वीर्यपात का उपयोग इस तरह से करने के बाद, स्थानीय सुरक्षा परिवर्तन जैसे कमांड के साथ देखना संभव है:

$ sudo semanage export

विभिन्न प्रणालियों में परिवर्तन का एक सेट लागू करने के लिए आसान बनाने के लिए वीर्य आयात द्वारा सीमनेज एक्सपोर्ट के आउटपुट को बचाया और उपयोग किया जा सकता है ।

नोट: यह उत्तर किसी साइट के लिए सबसे बुनियादी प्रकार का संदर्भ प्रदान करता है। सुरक्षा बहुत अधिक दानेदार हो सकती है। उदाहरण के लिए, उन प्रकारों की एक सूची देखें जो वेब सर्वर पृष्ठों पर कमांड के साथ लागू हो सकते हैं जैसे:

$ seinfo -t | grep http

नोट: जैसे उपयोगिताएँ semanage और seinfo डिफ़ॉल्ट रूप से स्थापित नहीं किया जा सकता। कम से कम कुछ वितरणों पर, आवश्यक पैकेजों को कुछ इस तरह नामित किया जा सकता है:

policycoreutils-python
setools-console

विस्तृत, काम करता है और बहुत समय बचाता है - धन्यवाद!
नॉर्थब्रिज

6

ऐसा लगता है कि SELinux.I आपको इसके साथ काम करने का सुझाव देगा। पुष्टि करने के लिए / var / लॉग / ऑडिट निर्देशिका में देखें।

इससे भी बदतर मामला, आप हमेशा सेलिनक्स को बंद कर सकते हैं, जैसा कि पहले उल्लेख किया गया है, लेकिन मेरा सुझाव है कि आप इसके बजाय इसके साथ काम करते हैं। उदाहरण के लिए, यदि मैं अपाचे के साथ उपयोग के लिए एक निर्देशिका बनाने वाला था, तो इसका सही संदर्भ नहीं होगा, जैसा कि यहां उल्लेख किया गया है।

[root@amp23140 www]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 whatever

इसलिए यदि ऐसा होता है, तो मैं संदर्भ को किसी अन्य निर्देशिका से लागू करता हूं, जो इस मामले में html है:

[root@amp23140 www]# chcon whatever --reference=html
[root@amp23140 www]# ls -lZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 whatever

0

"Httpd_sys_content_t" के सुरक्षा संदर्भ को बदलने के लिए रूट में इस कमांड का उपयोग करें जो अपाचे को निष्पादित करने की अनुमति देता है।

chcon -R -h -t httpd_sys_content_t /var/www/whatever

ls -dZ /var/www/whateverविवरण सुरक्षा भूमिकाओं को देखने के लिए उपयोग करें

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