मैं एक बहुत मानक सर्वर अपाचे और PHP चलाने की स्थापना की है। एक ऐप जो मैं चला रहा हूं वह फाइलें बनाता है और ये अपाचे उपयोगकर्ता के स्वामित्व में हैं www-data। SFTP के माध्यम से अपलोड होने वाली फाइलें मेरे अपने उपयोगकर्ता के पास हैं charlesr। सभी फाइलें www-dataसमूह का हिस्सा हैं । मेरी समस्या यह है कि मैं एसएफटीपी के माध्यम से किसी भी फाइल को संशोधित या अधिलेखित नहीं कर सकता हूं www-data, जिसके पास समूह charlesrका हिस्सा होने के बावजूद स्वामित्व है www-data। मैं एक SSH सत्र के माध्यम से कोई समस्या नहीं फ़ाइलों को संशोधित कर सकते हैं।
इसलिए मुझे यकीन नहीं है कि मुझे क्या करना है। मैं www-dataस्वामित्व वाली फ़ाइलों को संशोधित करने के लिए अपने SFTP सत्र की अनुमति कैसे दूं ?
थोड़ी सी पृष्ठभूमि के लिए, ये सर्वर को सेट-अप करते समय मैंने खुद के लिए लिखे नोट्स हैं:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
और फिर मैं अपने आप को समझाता हूं कि SGID बिट सेट करने का क्या मतलब है (यानी समूह के /var/wwwहिस्से में बनाई गई सभी फाइलें www-dataस्वचालित रूप से)।
अद्यतन करें
ऐसा लगता है कि यह समस्या एप्लिकेशन के कारण या, विशेष रूप से, एप्लिकेशन फ्रेमवर्क ( कोहना ) के कारण हुई थी, जो कुछ फाइलों को 0644 (rw-r - r--) को लिखती है; यानी समूह योग्य नहीं। यह, इस तथ्य के साथ युग्मित है कि फाइलें भी स्वामित्व में हैं www-dataइसका मतलब है कि मैं लॉग इन के रूप में एसएफटीपी के माध्यम से फ़ाइलों को संपादित नहीं कर सका charlesr। मुझे यकीन नहीं है कि मैं एसएसएच के माध्यम से फाइलों को संपादित क्यों कर सकता हूं। मेरा अनुमान है कि मैंने सुडो का उपयोग किया होगा।
यहां मैं अनुमतियों की रणनीति का उपयोग करता हूं , जो अब मार्टी फ्राइड की अथक मदद के लिए धन्यवाद है , जिन्होंने मेरी पिछली रणनीति की खामियों को इंगित किया और मुझे लिनक्स अनुमतियों की दुनिया में तब तक मदद करने में मदद की जब तक कि मैंने इसे खत्म नहीं कर दिया। धन्यवाद मार्टी!
अवलोकन
- फाइलों और निर्देशिकाओं के
/var/wwwस्वामित्व में होना चाहिएroot:webmasters - सभी देव
webmastersसमूह के सदस्य होने चाहिए - सभी निर्देशिकाओं को
/var/wwwइसके लिए सेट किया जाना चाहिए:2775याu=rwx,g=rwxs,o=rx(rwxrwx-rx) - सभी फाइलों को इसमें
/var/wwwसेट किया जाना चाहिए:0664याug=rw,o=r(rw-rw-r--)
निम्नलिखित के स्वामित्व में होना चाहिए www-data:webmasters(यानी ये निर्देशिकाएं हैं जिन्हें अपाचे को लिखने में सक्षम होना चाहिए):
- आवेदन / कैश
- आवेदन / लॉग
- अपलोड
- client_helpers / अपलोड
कैसे
/var/wwwआपकी फ़ाइलों को डिफ़ॉल्ट रूप से कहाँ परोसा जाता है, इसकी अनुमति देने के लिए :
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[आदि...]
अब परिवर्तनों को पकड़ लेने के लिए लॉग आउट करें और फिर से लॉग इन करें।
आदेशों का पिछला सेट निम्न कार्य करता है:
- नामक एक नया समूह बनाएं
webmasters; वे सभी उपयोगकर्ता जिन्हें ऐप फ़ाइलों तक लिखने की आवश्यकता है, उन्हें इस समूह में जोड़ा जाएगा। - वर्तमान उपयोगकर्ता (
$USER) कोwebmastersसमूह में जोड़ता है । - के मालिक बदल जाता है
/var/wwwकरने के लिएrootऔर करने के लिए समूहwebmastersसमूह। - में सभी फ़ाइलों के लिए 664 अनुमतियाँ (-rw-rw-r--) जोड़ता है
/var/www। - सभी निर्देशिकाओं में 775 अनुमतियाँ (drwxrwxr-x) जोड़ता है
/var/www। /var/wwwइसमें और सभी निर्देशिकाओं पर SGID बिट सेट करता है; यह अंतिम बिंदु कुछ व्याख्या करता है। ध्यान दें कि आप एक ही काम करने के लिए अपने chmod ओक्टल (जैसे 2644) के सामने 2 भी रख सकते हैं।www-data(अपाचे का उपयोगकर्ता) और आपूर्ति की निर्देशिका के समूह के मालिक को सेट करता हैwebmaster। यह सुनिश्चित करता है कि निर्देशिका अपाचे औरwebmastersसमूह में किसी के द्वारा भी लेखन योग्य है । अन्य सभी निर्देशिकाओं के लिए ऐसा ही करें, जिन्हें लिखने योग्य होने की आवश्यकता है।
/var/wwwबिना लिखे उस समूह में कैसे जोड़ सकता है?