यहां ज्यादातर जवाब सुरक्षा को ध्यान में रखकर नहीं लिखे गए हैं। यह महसूस करना अच्छा है कि sudo
हर बार दौड़ना बहुत बुद्धिमानी नहीं है। यदि आप एक टाइपो बनाते हैं (उदाहरण के लिए एक गलत स्थान पर एकल सफेद स्थान: sudo rm -rf / var/www/dir
निष्पादित न करें! ), तो आप अपने सिस्टम को कचरा कर सकते हैं।
नोट: Apache 2.4.7 / Ubuntu 14.04 के साथ शुरू, तदनुसार इस उत्तर में आदेशों /var/www
को /var/www/html
समायोजित करने के लिए ले जाया गया है।
देख:
बुरे विचार:
chmod 777
(sagarchalise) - यह आपके सिस्टम के उपयोग के साथ किसी को भी निर्देशिका और फाइलों में लिख सकते हैं और इस तरह घुसपैठिया के तहत किसी भी कोड को निष्पादित करने के लिए अनुमति देता है की अनुमति देता है www-data
उपयोगकर्ता
chgrp -R www-data $HOME
(सिल) - यह www-data
होम डायरेक्टरी में किसी भी फाइल को पढ़ने या लिखने की अनुमति देता है। यह कम से कम लिवर विशेषाधिकार नियम को ध्यान में नहीं रख रहा है
chown -R $USER:$USER /var/www
(kv1dr) - जब तक कि दुनिया ने अनुमतियों को नहीं पढ़ा है /var/www
, तब तक चलने वाला वेबसर्वर www-data
फाइलों को नहीं पढ़ सकेगा। यदि फ़ाइल सार्वजनिक-सुलभ सादे HTML दस्तावेज़ है, तो यह एक समस्या नहीं हो सकती है यदि दुनिया फ़ाइल को पढ़ सकती है। लेकिन अगर फ़ाइल एक PHP फ़ाइल है जिसमें पासवर्ड है, तो यह है।
नोट : नीचे दिए गए समाधानों में, मैंने लिखित www-data
विशेषाधिकार दिए हैं। हालाँकि, /usr/share/doc/base-passwd/users-and-groups.txt.gz
बताता है:
www-डेटा
कुछ वेब सर्वर www-data के रूप में चलते हैं। वेब सामग्री इस उपयोगकर्ता के स्वामित्व में नहीं होनी चाहिए, या एक समझौता किया हुआ वेब सर्वर एक वेब साइट को फिर से लिखने में सक्षम होगा। वेब सर्वर द्वारा लिखित डेटा www-data के स्वामित्व में होगा।
जहां संभव हो, समूह को लेखन अनुमति न दें www-data
। www-data
केवल फ़ाइलों को पढ़ने में सक्षम होने की आवश्यकता है ताकि वेबसर्वर इसे सेवा दे सके। एकमात्र ऐसा मामला जहां www-data
लेखन अनुमतियों की आवश्यकता होती है, वह है निर्देशिकाओं के लिए अपलोड करना और अन्य स्थानों पर जिन्हें लिखा जाना चाहिए।
समाधान 1
अपने आप को www-data
समूह में जोड़ें और /var/www
निर्देशिका पर सेटगिड बिट सेट करें जैसे कि सभी नई बनाई गई फाइलें इस समूह को भी विरासत में मिलती हैं ।
sudo gpasswd -a "$USER" www-data
पहले बनाई गई फ़ाइलों को ठीक करें (मान लें कि आप केवल उपयोगकर्ता हैं /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(यहां तक कि सुरक्षित: उपयोग 640
या 2750
मैन्युअल रूप से chmod g+w file-or-dir
जो वेबसर्वर द्वारा लिखने योग्य होना चाहिए)
समाधान २
अपने घर निर्देशिका के लिए प्रत्येक परियोजना के लिए एक सिम्लिंक बनाएं। कहते हैं कि आपकी परियोजना यहां स्थित है ~/projects/foo
और आप चाहते हैं कि यह स्थित हो /var/www/foo
, चलाएं:
sudo ln -sT ~/projects/foo /var/www/foo
यदि आपके होम डायरेक्टरी में other
सुरक्षा कारणों के लिए सेट (डिसेंड) नहीं है , तो इसके समूह को बदल दें www-data
, लेकिन निष्पादित बिट को केवल सेट करें (कोई पढ़ें / लिखें नहीं)। ~/projects
फ़ोल्डर के लिए भी ऐसा ही करें क्योंकि इसमें www के अलावा अन्य प्रोजेक्ट भी हो सकते हैं। ( sudo
यदि आपको पहले अपने उपयोगकर्ता को www-data
समूह में जोड़ा है तो आपको इसकी आवश्यकता नहीं है ।)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
करने के लिए समूह सेट www-data
पर ~/projects/foo
और वेब सर्वर पढ़ सकते हैं और फ़ाइलों और फ़ाइलों + निर्देशिकाओं को लिखने और निर्देशिका में उतर करने की अनुमति:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
यहां तक कि सुरक्षित: 640 और 2750 का डिफ़ॉल्ट रूप से और मैन्युअल रूप से chmod फ़ाइलों और निर्देशिकाओं का उपयोग करें जो वेबसर्वर उपयोगकर्ता द्वारा लिखने योग्य होने की आवश्यकता है। सेटगिट बिट को केवल तभी जोड़ा जाना चाहिए जब आप चाहते हैं ~/projects/foo
कि समूह द्वारा हर नई बनाई गई फ़ाइल सुलभ हो।
अब से, आप अपनी साइट पर पहुँच सकते हैं http://localhost/foo
और अपनी परियोजना फ़ाइलों को संपादित कर सकते हैं ~/projects/foo
।
यह सभी देखें