SFTP अनुमति www-data के स्वामित्व वाली फ़ाइलों पर अस्वीकृत


23

मैं एक बहुत मानक सर्वर अपाचे और 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आपकी फ़ाइलों को डिफ़ॉल्ट रूप से कहाँ परोसा जाता है, इसकी अनुमति देने के लिए :

  1. sudo addgroup webmasters
  2. sudo adduser $USER webmasters
  3. sudo chown -R root:webmasters /var/www
  4. sudo find /var/www -type f -exec chmod 664 {} \;
  5. sudo find /var/www -type d -exec chmod 775 {} \;
  6. sudo find /var/www -type d -exec chmod g+s {} \;
  7. sudo chown -R www-data:webmasters application/cache/ [आदि...]

अब परिवर्तनों को पकड़ लेने के लिए लॉग आउट करें और फिर से लॉग इन करें।

आदेशों का पिछला सेट निम्न कार्य करता है:

  1. नामक एक नया समूह बनाएं webmasters; वे सभी उपयोगकर्ता जिन्हें ऐप फ़ाइलों तक लिखने की आवश्यकता है, उन्हें इस समूह में जोड़ा जाएगा।
  2. वर्तमान उपयोगकर्ता ( $USER) को webmastersसमूह में जोड़ता है ।
  3. के मालिक बदल जाता है /var/wwwकरने के लिए rootऔर करने के लिए समूह webmastersसमूह।
  4. में सभी फ़ाइलों के लिए 664 अनुमतियाँ (-rw-rw-r--) जोड़ता है /var/www
  5. सभी निर्देशिकाओं में 775 अनुमतियाँ (drwxrwxr-x) जोड़ता है /var/www
  6. /var/wwwइसमें और सभी निर्देशिकाओं पर SGID बिट सेट करता है; यह अंतिम बिंदु कुछ व्याख्या करता है। ध्यान दें कि आप एक ही काम करने के लिए अपने chmod ओक्टल (जैसे 2644) के सामने 2 भी रख सकते हैं।
  7. www-data(अपाचे का उपयोगकर्ता) और आपूर्ति की निर्देशिका के समूह के मालिक को सेट करता है webmaster। यह सुनिश्चित करता है कि निर्देशिका अपाचे और webmastersसमूह में किसी के द्वारा भी लेखन योग्य है । अन्य सभी निर्देशिकाओं के लिए ऐसा ही करें, जिन्हें लिखने योग्य होने की आवश्यकता है।

जवाबों:


10

Ubuntu.com में बहुत अच्छा सर्वरगाइड है, जैसे कि Apache गाइड । आपने अपनी प्रक्रियाएँ कहाँ से लिखीं, आपने इतनी सावधानी से लिखा है? मेरे द्वारा सेट किए गए किसी भी सर्वर के लिए मुझे कभी भी इतनी परेशानी नहीं हुई है, हालांकि मैं इस संभावना के लिए खुला हूं कि मैं इसे सही नहीं कर रहा हूं - इसके अलावा, मैंने वास्तव में इसके लिए सर्वर स्थापित नहीं किया है कुछ भी जो बहुत सार्वजनिक है, या बहुत बड़ा है, इसलिए सुरक्षा छेद हो सकते हैं जिनके बारे में मुझे जानकारी नहीं है।

हालाँकि, मुझे www-data समूह का सदस्य बनने की आवश्यकता नहीं है, और www में कोई स्रोत फ़ाइलें www-data के स्वामित्व में नहीं हैं। मेरी समझ यह है कि यह अपाचे द्वारा केवल अपनी फ़ाइलों के लिए उपयोग किया जाता है, और इसमें अन्य फ़ाइलों में से किसी को भी स्वयं को लिखने की अनुमति नहीं होगी, क्योंकि सिद्धांत रूप में, कोई भी महत्वपूर्ण फाइलें www-data को लिखने की अनुमति नहीं देगी। मुझे लगता है कि www-data के स्वामित्व वाली फाइलें हर किसी को केवल पढ़ने की अनुमति देती हैं, और किसी को भी इसकी फ़ाइलों को लिखने की अनुमति नहीं होनी चाहिए। मैं पूरी तरह से गलत हो सकता है, निश्चित रूप से, और अगर मैं हूं, तो मुझे आशा है कि कोई मुझे बताएगा और मुझे वास्तविक प्रलेखन को इंगित करेगा जो अलग-अलग तरीके से बताता है (कुछ मंच पर नहीं जहां मेरे जैसे यादृच्छिक इंटरनेट उपयोगकर्ता ने उसके लिए काम करने वाले निर्देशों का उत्पादन किया है)।

शायद मुझे कुछ याद आ रहा है, लेकिन आपकी समस्या काफी सीधी होनी चाहिए। Sftp का उपयोग करने के लिए लॉग इन किया गया उपयोगकर्ता को www-डेटा समूह का सदस्य होना चाहिए, और आप जिन फ़ाइलों को संशोधित करने का प्रयास कर रहे हैं, उनके पास समूह www-data के लिए लिखने की अनुमति होनी चाहिए। मुझे इससे कोई मतलब नहीं है कि आप ssh का उपयोग करके फ़ाइलों को संशोधित कर सकते हैं, लेकिन sftp का उपयोग नहीं कर रहे हैं; क्या आप वाकई दोनों के लिए एक ही खाते में लॉग इन कर रहे हैं? Sftp में, आप !groupsअपने समूह को सूचीबद्ध करने के लिए, या !whoamiआप कौन से लॉगिन नाम का उपयोग कर रहे हैं , यह जांचने के लिए कमांड दर्ज कर सकते हैं। परिणामों से मेल खाना चाहिए जो आप ssh (समान कमांड के साथ विस्मयादिबोधक बिंदु) का उपयोग करके देखते हैं।

अगर आपको ऐसा करने की अनुमति है, तो आपको sftp से chmod, chown, chgrp का उपयोग करने में सक्षम होना चाहिए।

वैसे, मुझे लगता है कि आपकी सूची में कम से कम एक बहुत खराब कमांड है:

sudo chmod -R g+rw /var/www

यह दुनिया को हर फ़ाइल और फ़ोल्डर को / var / www में अनुमति देता है। यह एक बुरा विचार लगता है। आम तौर पर, केवल रूट ने इन निर्देशिकाओं को लिखने की अनुमति दी है, जब तक कि विशिष्ट लोगों को अधिक अनुमति की आवश्यकता नहीं होती है, आमतौर पर केवल एकल निर्देशिकाएं।

नोट: यह मेरी ओर से एक त्रुटि थी। इस बात को इंगित करने के लिए DonalLafferty का धन्यवाद, कि यह "g" को निर्दिष्ट करता है, "a" को नहीं, इसलिए यह केवल अनुमतियों को बदलता है। मेरी थकी हुई पुरानी आंखें (या बुरी फॉन्ट) इसे "ए" के रूप में पढ़ा होगा।

स्पष्टीकरण के लिए संपादन

आम तौर पर, अपाचे द्वारा बनाई गई फाइलें केवल www-डेटा समूह और अन्य सभी उपयोगकर्ताओं के लिए रीड-ओनली होती हैं, जैसे कि रूट-स्वामित्व वाली फाइलें / var / www में। तो, किसी को भी www-data का सदस्य बनाने का कोई कारण नहीं होना चाहिए। मुद्दा सभी को लिखने की पहुंच दे रहा है, जो एक अलग मामला है। यह आपकी साइट के भीतर विशिष्ट निर्देशिकाएं उपलब्ध कराने के द्वारा किया जाना चाहिए, और यह बस चूडॉड का उपयोग करके किया जाता है, या तो सुडो के साथ, क्योंकि यह संभवतः जड़ के स्वामित्व में है, या मालिक को स्वयं बनाकर और सूदो का उपयोग करके नहीं।

यदि आपके पास अधिक देवता हैं जिन्हें पूरी साइट तक पहुंचने की आवश्यकता है, तो यह है कि जब आप एक उपयोगकर्ता + समूह बनाना चाहते हैं जैसे कि "वेबमास्टर्स", तो इसे साइट का स्वामी बनाएं, उस समूह को लिखित अनुमति दें, और सभी देव सदस्य बनाएं उस समूह का। तो साइट निर्देशिकाओं के लिए लिस्टिंग कुछ इस तरह होगी:

drwxrwxr-x  ##  webmasters     webmasters   #### ####-##-## ##:##  mysite.com

अधिक संपादन

मैंने महसूस किया है कि आपको वास्तव में एक उपयोगकर्ता "वेबमास्टर्स" बनाने की आवश्यकता नहीं है, बस एक समूह। फिर फ़ाइलों को रूट द्वारा स्वामित्व किया जा सकता है: वेबमास्टर्स, अर्थात रूट मालिक है, लेकिन वेबमास्टर्स समूह है।

नीचे दिए गए सवालों के जवाब में, अपाचे लिखने वाली फाइलें www-data और समूह www-data के स्वामित्व में होंगी। ये फाइलें आम तौर पर आपके द्वारा लिखे गए कुछ नहीं हैं, इसलिए www-data के गैर-सदस्यों के पास केवल-पढ़ने के लिए पहुंच हो सकती है - मुझे लगता है कि यह निर्देशिका अनुमतियों पर निर्भर करता है। यदि आपको कभी-कभार लिखने की पहुँच की आवश्यकता होती है, तो अपने आप को समूह में जोड़ना उपयोगी हो सकता है। आमतौर पर आप अपाचे द्वारा बचाई गई सामग्री के लिए विशिष्ट निर्देशिकाओं को दुनिया के योग्य बनाते हैं। यह भी विचार करें कि शेल एक्सेस के बिना अपाचे चलाने वाले अधिकांश साझा वेब होस्टिंग के पास समूह स्थापित करने का एक तरीका भी नहीं होगा।

लेकिन, अपाचे रूट के स्वामित्व वाली फाइलों को भी पढ़ सकता है। लगभग सभी फाइलों में विश्व-पठनीय उपयोग होता है, बस लिखने योग्य नहीं। इसलिए, जब तक आप इसे बदलना नहीं चाहते, अपाचे को वेबमास्टर्स समूह में रहने की आवश्यकता नहीं है।

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

वैसे, ओ रेली अपाचे कुकबुक कहती है, "दस्तावेज़ निर्देशिका, जैसे कि htdocs, cgi-bin, और icons, को इस तरह से अनुमतियाँ सेट करनी होंगी जो आपके विशेष वेब साइट के विकास मॉडल के लिए सबसे अधिक समझ में आता है, लेकिन किसी भी परिस्थिति में वेब निर्देशिका उपयोगकर्ता द्वारा इनमें से किसी भी निर्देशिका या उनमें निहित फाइलों को लिखने योग्य नहीं होना चाहिए। "

अंत में, यदि आपको अधिक नियंत्रण की आवश्यकता है तो ACLs का उपयोग करना फ़ाइल अनुमतियों को सेट करने का एक अच्छा तरीका है। यह भी उन्हें हर समय सेट करने का एक अच्छा तरीका हो सकता है, और कुछ ऐसा है जिसकी मुझे जांच करनी चाहिए।


हाय @ मार्टी-फ्राइड, उत्तर के लिए धन्यवाद, यह मुझे बहुत कोशिश करता है। पुन। आपके सवाल। मैंने विभिन्न स्रोतों से एक साथ जानकारी प्राप्त की (इसलिए मैंने इसे अपने स्वयं के उपयोग गाइड में लिखा था) और सटीक स्रोत को याद नहीं कर सकता। हालाँकि मैंने इस विशेष स्रोत (समाधान 1) का उपयोग नहीं किया (मैं केवल इसे पाया), यह मेरे निर्णय के लिए एक अच्छा तर्क देता है। आपके द्वारा बताए गए अपाचे गाइड में, यह 'वेबमास्टर्स' नामक एक समूह बनाने की सिफारिश करता है, लेकिन अगर मैंने ऐसा किया है, तो अपाचे /var/wwwबिना लिखे उस समूह में कैसे जोड़ सकता है?
चार्ल्स रोपर

और मैं है के लिए अन्य उपयोगकर्ताओं एक्सेस देनी /var/wwwतो मैं करने के लिए समूह उपयोग करने देने सोचा www-dataकि समूह का सदस्य है और हर किसी को बनाने एक अच्छा समाधान होगा। मैं देख सकता हूं कि अपाचे की समस्या अब वहां किसी भी फाइल को अधिलेखित करने में सक्षम है । केवल 2 देवों (जिसमें खुद को भी शामिल किया गया है) को कोड तक पहुंच प्राप्त है, यह अल्पावधि में अपेक्षाकृत सुरक्षित है।
चार्ल्स रोपर

1
धन्यवाद मार्टी। अपाचे कुकबुक के इस हिस्से ने मुझे हंसाया: "आपको इस बात की जानकारी होनी चाहिए कि यदि आप 12 लोगों से अपने अपाचे सर्वर पर फ़ाइल अनुमतियां सेट करने के सही तरीके पूछते हैं, तो आपको एक दर्जन अलग-अलग उत्तर मिलेंगे।" आपने मुझे वह सब कुछ दिया है जिसकी मुझे अब प्रगति करने की आवश्यकता है। आपके समय के लिए बहुत बहुत शुक्रिया। :-)
चार्ल्स रॉपर

1
मैंने थोड़ा-बहुत सीखा है, यही वजह है कि मैं गहन चर्चा का आनंद लेता हूं - यह आमतौर पर कुछ धुंधले हिस्सों को स्पष्ट करने में मदद करता है। मैं मुख्य रूप से एक प्रोग्रामर हूं, जो समस्याओं को ठीक करने और वेब साइट सेट करने के लिए कहा जाता है, इसलिए मैं हमेशा चीजों को करने के बेहतर तरीके सीख रहा हूं। बेझिझक पूछें कि क्या कोई और सवाल है।
मार्टी फ्राइड

1
AFAIK, sudo chmod -R g + rw / var / www 'ग्रुप' एक्सेस देता है। विश्व एक्सेस के लिए 'a + rw' का उपयोग करें।
डोनल लफेर्टी

7

मैंने देखा कि आपने उपयोग नहीं किया था chown

फ़ाइलों / फ़ोल्डरों के स्वामित्व को ठीक से सेट करने के लिए आप पूरी निर्देशिका को इस तरह सेट कर सकते हैं: chown -R www-data:www-data

यह समूह www-dataऔर उपयोगकर्ता के लिए स्वामित्व सेट करता हैwww-data

इसके अलावा, आप इसे अस्थायी वर्कअराउंड के रूप में कर सकते हैं:

chmod 777 /var/data/<filename> या chmod 777 /var/data/<foldername>

आवश्यकतानुसार फाइल संपादित करें

chmod 644 /var/data/<filename> या chmod 755 /var/data/<foldername>

"-R" स्विच का उपयोग करने से सावधान रहें, क्योंकि यह सभी उप फ़ाइलों और फ़ोल्डरों की अनुमतियों को भी बदलता है।

664 अपाचे मानक फ़ाइल अनुमतियाँ और 755 मानक फ़ोल्डर अनुमतियाँ हैं।

उम्मीद है की यह मदद करेगा :)

सितारा


नमस्ते, जवाब देने के लिए समय निकालने के लिए धन्यवाद, यह बहुत सराहना की गई है। हालाँकि, यह वास्तव में मदद नहीं करता है। फ़ाइलों को चस्पा करना उन सभी को अयोग्य बनाता है जब SFTP का उपयोग किया जाता है (इसलिए मैं इसके बाद किस तरह का विपरीत हूं)। मैं वास्तव में chmod वर्कअराउंड का उपयोग नहीं कर सकता क्योंकि a) मेरे पास SFTP में chmod की अनुमति नहीं है; ख) मैं वास्तव में SSH के माध्यम से लॉग इन नहीं करना चाहता, अनुमति बदलना, मेरे SFTPing करना, वापस बदलना, आदि; और c) कुछ फाइलों में सुरक्षा कारणों से अलग-अलग अनुमतियां हैं, इसलिए मैं वैसे भी मैस नहीं कर सकता।
चार्ल्स रोपर

क्या है /var/data? इसके अलावा, आप किस निर्देशिका में सुझाव दे रहे हैं कि वह कमांड का उपयोग करे chown -R www-data:www-data? उम्मीद नहीं है /var/www
मार्टी फ्राइड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.