2010-01-06 13 views
13

मेरे पास एक php स्क्रिप्ट है जिसे डेटाबेस से कनेक्ट करने की आवश्यकता है। डेटाबेस के लिए प्रमाण पत्र किसी अन्य PHP स्क्रिप्ट में संग्रहीत हैं।यूनिक्स अनुमतियां, बनाम बनाम निष्पादित करें (PHP संदर्भ)

यदि मैं क्रेडेंशियल्स फ़ाइल के लिए 661 पर अनुमतियां सेट करता हूं ताकि जनता को अनुमति निष्पादित हो लेकिन अनुमति न पढ़ सके, क्या यह मुख्य स्क्रिप्ट को क्रेडेंशियल्स तक पहुंचने और डीबी से कनेक्ट करने की अनुमति देता है जबकि किसी को उपयोगकर्ता खाते से रोकता है प्रमाण पत्र फ़ाइल की सामग्री को देखने से सर्वर?

मुझे लगता है कि मैं पढ़ने और निष्पादित के बीच भेद के रूप में उलझन में हूं। क्या एक php स्क्रिप्ट (www या कुछ समान के रूप में चल रही है) को एक और php स्क्रिप्ट शामिल करने और अंदर किसी भी सामग्री का उपयोग करने के लिए पढ़ने की अनुमति की आवश्यकता है? या क्या इसे सिर्फ निष्पादन की आवश्यकता है? क्या पढ़ने की अनुमति पूरी तरह से निष्पादन अनुमति देती है?

उप-प्रश्न: यदि मैंने अपनी सभी स्क्रिप्ट को केवल निष्पादित अनुमति के लिए सेट किया है और पढ़ा नहीं है, तो क्या मुझे कोई नुकसान होने की उम्मीद है? यह माना जा रहा है कि मैं किसी भी फाइल को छोड़ दूंगा जिसे मुझे पढ़ने के लिए सेट की गई स्पष्ट पठन अनुमति (डेटा फाइल) की आवश्यकता है।

उत्तर

9

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

यदि आप वेब स्क्रिप्ट द्वारा अपनी स्क्रिप्ट को पठनीय बनाने की कोशिश कर रहे हैं (मान लीजिए कि आप "www" खाते से संबंधित हैं, जो कि "www" समूह से संबंधित है, और सिस्टम पर अन्य उपयोगकर्ताओं द्वारा नहीं, यहां क्या है मुझे क्या करना होगा (मानती है कि आपके खाते "MyUser" है):

# 750: myuser has rwx, www has r-x, world has --- 
chmod 750 secrets 
:

# Change owner to "myuser" and group to "www" for file(s) in question 
chown myuser:www config.php 

# 640: myuser has rw-, www has r--, world has --- 
chmod 640 config.php 

आप एक "राज़" निर्देशिका में किसी भी फाइल पढ़ने से दुनिया को रोकने के लिए चाहते हैं, बस निष्पादित बिट को निष्क्रिय

यदि आप अपनी सभी स्क्रिप्ट को निष्पादित अनुमति के लिए सेट करते हैं लेकिन अनुमति नहीं पढ़ते हैं, तो कोई भी कोई भी नहीं कर सकता उनके साथ उपयोगी चीज (वेबसर्वर सहित) ;-)

+0

ध्यान दें कि यदि अन्य उपयोगकर्ताओं के पास वेब सर्वर के माध्यम से अपना स्वयं का PHP कोड चलाने की पहुंच है तो यह उन्हें रोक नहीं पाएगा। उस स्थिति में शायद open_basedir या एक समाधान देखें जो आपको अलग-अलग उपयोगकर्ताओं के रूप में अलग-अलग vhosts/ऐप्स चलाने की अनुमति देता है। – oops

+0

हाँ, नज़दीकी निरीक्षण पर, मैंने पाया कि www उस निर्देशिका के लिए समूह का सदस्य था जिस पर मैं अपना भ्रम लगा रहा था। मैं इसे हैक करने की कोशिश नहीं कर रहा था, मैं सिर्फ उन चीजों का अनुकरण करना चाहता था जो उन्होंने किया था लेकिन बिना मिरर के। – Anthony

12

लिपियों को पढ़ा जाता है, निष्पादित नहीं किया जाता है। स्क्रिप्ट के लिए अनुमति निष्पादित करने से लोडर या कर्नेल शेबैंग लाइन को पढ़ने और स्क्रिप्ट को नामित दुभाषिया को पास करने के लिए कहता है।

+0

तो अगर मेरे पास "रहस्य" नामक फ़ोल्डर में एक स्क्रिप्ट है और केवल रहस्य निष्पादित करने के लिए सेट हैं, तो क्या कोई ऐसा व्यक्ति हो सकता है जिसने कभी-कभी रहस्यों को पढ़ा हो (लेकिन अब नहीं करता है) फ़ाइल नाम को सीधे नैनो जैसे कुछ प्लग करें और फिर भी सामग्री देखें? यह मेरी असली चिंता है, मुझे लगता है। – Anthony

+0

यदि "रहस्य" एक स्क्रिप्ट है तो यह तब नहीं चलाया जा सकता है जब उपयोगकर्ता दुभाषिया चलाने वाले को स्क्रिप्ट तक पहुंच न हो। जो भी अनुमतियां होती थी वह अप्रासंगिक है; फ़ाइलों को खोला जाने पर, या तो पढ़ने के लिए या चलाने के लिए अनुमतियाँ एकमात्र समय होती है। –

संबंधित मुद्दे