ओएस एक्स पर सार्वजनिक टेम्प्लेट डायरेक्टरी को कैसे निर्धारित किया जाए कि www सर्वर द्वारा लिखा जा सके?


1

आई एमएमपी चल रहा है httpd _www के रूप में सर्वर और मैं शेल स्क्रिप्ट (bash) के भाग के रूप में अस्थायी निर्देशिका निर्दिष्ट करना चाहता हूं।

मैंने उपयोग करने की कोशिश की है $TMPDIR इन पदों के अनुसार:

हालाँकि यह इंगित करता है /var/folders/vp/tlt7xf791gl1_v56m0xdmrph0000gn/T/ और इस फ़ोल्डर में आवश्यक अनुमति नहीं है, इसलिए Apache सर्वर वहां कोई भी फाइल नहीं बना सकता है।

इस पर आधारित:

$ /usr/bin/stat -F $TMPDIR /tmp /private/tmp 
drwx------ 104 kenorb staff 3536 Oct 14 22:21:05 2015 /var/folders/vp/tlt7xf791gl1_v56m0xdmrph0000gn/T//
lrwxr-xr-x 1 root wheel 11 Apr  9 13:08:03 2014 /tmp@ -> private/tmp
drwxrwxrwt 112 root wheel 3808 Oct 14 22:12:04 2015 /private/tmp/

मेरा www उपयोगकर्ता जिसकी मुझे परवाह है:

$ id _www
uid=70(_www) gid=70(_www) groups=70(_www),12(everyone),61(localaccounts),401(com.apple.sharepoint.group.1),100(_lpoperator)

मैं उपयोग नहीं कर सकता /tmp, क्योंकि यह मेरे से जुड़ा हुआ है /private/tmp (जो नाम बताता है कि यह निजी है)।

इसलिए मैं ओएस एक्स पर अपनी सही अस्थायी निर्देशिका कैसे निर्धारित करूं, इसलिए मैं और मेरी httpd सर्वर इसका उपयोग कर सकता है?

मैं हार्डकोड मान नहीं चाहता, क्योंकि स्क्रिप्ट अलग-अलग वातावरणों (जैसे गैर-एमएनएम पर्यावरण) पर उपयोग किए जाने पर बेकार हो जाएगी, इसलिए स्थान भिन्न हो सकता है।


1
क्या आप चिंतित हैं / निजी सामान्य निर्देशिकाओं को "छिपाने" के लिए है और इसका मतलब यह नहीं है कि आप वहां फाइलों को स्टोर नहीं कर सकते। / Tmp के बजाय $ TMPDIR का उपयोग करना बेहतर है, लेकिन अगर आप उस निर्धारित पथ का उपयोग करना पसंद करते हैं, तो OS X पर लिखना / tmp आमतौर पर ठीक है ...
bmike

$ TMPDIR के in / var / ... होने की बात यह है कि इसकी सही अनुमतियाँ हैं - तो क्या उपयोगकर्ता निर्देशिका के लिए खुला है और उपयोगकर्ता क्या स्क्रिप्ट चलाता है? - निजी बस एक ऐतिहासिक है ताकि ओएस केवल पढ़ने के लिए फ़ाइल सिस्टम पर हो और / निजी एक स्थानीय फ़ाइल सिस्टम के लिए एक माउंट है जिस पर लिखा जा सकता है
Mark

जवाबों:


2

मैं लिखूंगा /tmp (जो लिखने के लिए बराबर है /private/tmp ) चूंकि यह सभी उपयोगकर्ताओं और न केवल प्रशासनिक उपयोगकर्ताओं द्वारा लिखने योग्य है। यह संगतता के लिए है और बोनस अंक के लिए, आपकी स्क्रिप्ट फ़ाइलों को साफ कर सकती है या यदि वे बड़े हो जाते हैं तो उन्हें काट सकते हैं।

मेरे पास ऐसा आधिकारिक संदर्भ नहीं है कि क्यों / निजी कहा जाता था, लेकिन यह हमेशा लिखने के लिए खुला है और $ TMPDIR की तरह प्रतिबंधित नहीं है, गैर-व्यवस्थापक उपयोगकर्ताओं से है।

असली सवाल यह है कि आप क्या उपयोगकर्ता चला रहे हैं apache - ADMIN समूह का सदस्य या केवल एक सामान्य गैर-व्यवस्थापक उपयोगकर्ता?

इस में Apple दस्तावेज़ सुरक्षित कोडिंग गाइड सार्वजनिक रूप से पठनीय स्थानों पर फ़ाइलों को लिखने वाले इस तर्क के साथ स्वाभाविक रूप से असुरक्षित है और यह अधिक सुरक्षित स्थानों में फ़ाइलों को रखने के लिए बेहतर है जो सभी उपयोगकर्ताओं द्वारा पठनीय नहीं हैं। देखें दौड़ की स्थिति और सुरक्षित फ़ाइल संचालन अनुभाग और इस लिंक पर सुरक्षित अस्थायी फ़ाइलें बनाना । का उपयोग करके mkstemp POSIX कॉल आप सुनिश्चित करें कि एक अद्वितीय फ़ाइल बनाई गई है और umask के साथ पहुँच को नियंत्रित कर सकते हैं।

विचित्र रूप से (मुझे), mktemp जब एक गैर-व्यवस्थापक उपयोगकर्ता द्वारा चलाया जाता है, तब भी $ TMPDIR में एक अस्थायी फ़ाइल बना सकता है, तो यह स्पष्ट रूप से बढ़े हुए विशेषाधिकार का उपयोग करके गैर-व्यवस्थापक उपयोगकर्ताओं को उस "अधिक" सुरक्षित फ़ाइल को सौंप सकता है। बहुत अच्छा।


क्या कोई चर या फ़ंक्शन है जो उस फ़ोल्डर को निर्धारित करने के लिए उपयोग कर सकता है? या मुझे सशर्त करना है?
kenorb

@kenorb - कौन सा फ़ोल्डर? - $ TMPDIR वह चर है जो अस्थायी फ़ोल्डर देता है (TMPDIR भी सभी उपयोगकर्ताओं के लिए है प्रत्येक उपयोगकर्ता का एक अलग / tmp साझा किया जाता है ताकि आप उपयोगकर्ताओं के बीच टकराव हो)
Mark

@kenorb पथ को लिखें /tmp और तुम्हारे चाचा बोब आप इसे परिवर्तनशील बना सकते हैं, लेकिन इसका कोई मतलब नहीं है क्योंकि यह बदलता नहीं है।
bmike

1
मुझे लगता है कि इसका इस्तेमाल करना आसान होगा /tmp, शुरू में मैं प्रतीकात्मक लिंक से भ्रमित था जो था 0755 उस पर, लेकिन गंतव्य वास्तव में है 1777, इसलिए मुझे उम्मीद है कि यह सभी मामलों में काम करेगा। धन्यवाद।
kenorb

आप / tmp या / private / tmp को बदल नहीं सकते हैं लेकिन सभी उपयोगकर्ता वहाँ लिख सकते हैं। असुरक्षित है, लेकिन यह बहुत कम मस या उपद्रव के साथ काम करता है। आप इसके साथ हैं 1777 अनुमतियाँ।
bmike

1

वर्कअराउंड के लिए, मैंने अब तक ऐसा पाया है php कमांड www परिप्रेक्ष्य (PHP CLI है) से सही अस्थायी निर्देशिका निर्धारित कर सकता है सर्वर के समान सेटिंग्स):

$ php -r "echo ini_get('upload_tmp_dir');"
/Applications/MAMP/tmp/php

इसका उपयोग करना भी संभव है mktemp यह जाँचने के लिए कि अस्थायी फ़ाइलें विशिष्ट उपयोगकर्ता के लिए (जैसे) बनाई गई हैं $TMPDIR विफल होगा), उदा .:

$ sudo -uwww bash -c 'dirname $(mktemp)'
/tmp

इसलिए सारांश में इसे कुछ इस तरह बढ़ाया जा सकता है:

#!/usr/bin/env bash
WWW_USER="$(ps axo user,group,comm | egrep "(apache|httpd)" | grep -v ^root | uniq | cut -d\  -f 1)"
PHP="$(which php)"

if [ -n "$PHP" ]; then
  TMP="$(php -r "echo ini_get('upload_tmp_dir');")"
elif [ -n "$WWW_USER" ]; then
  TMP="$(sudo -uwww bash -c 'dirname $(mktemp)')"
elif [ -n "$TMPDIR" ]; then
  TMP="$TMPDIR"
else
  TMP="/tmp"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.