मैं एक बहुत मानक सर्वर अपाचे और 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 webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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
बिना लिखे उस समूह में कैसे जोड़ सकता है?