मैं डेबियन पर अपाचे में डिफ़ॉल्ट umask कैसे सेट करूं?


14

मुझे Apache2 द्वारा बनाई गई फ़ाइलों की जरूरत है 002, डिफ़ॉल्ट रूप से umask , यानी समूह rw।

मैंने umask 002/ etc / apache2 / envvars में डालने की कोशिश की है और हालाँकि यह स्क्रिप्ट अपाचे स्टार्ट अप के हिस्से के रूप में निष्पादित होती है ( apache2ctl graceful) umask का कोई प्रभाव नहीं है। संभवत: स्टार्ट अप प्रक्रिया में कहीं और (जैसे जब उपयोगकर्ता से डाउनग्रेड किया rootजाता है www-data) तो इसे लगाने के लिए कहीं बेहतर है।

मैंने Fedora के बारे में पोस्ट पढ़ी हैं और एक में umask लगाने का सुझाव दिया गया है, /etc/init.d/apache2लेकिन इनमें से कोई भी डेबियन (निचोड़) में लागू नहीं होता है।

क्या आप मदद कर सकते हैं?


1
आपको "/etc/init.d/apache2 पुनरारंभ" या "सेवा अपाचे 2 पुनरारंभ" के साथ अपाचे को फिर से शुरू करने का प्रयास करना चाहिए
जेन्स ब्रैडलर

हाँ, न तो काम किया।
Artfulrobot

आप नई फाइलें कैसे बना सकते हैं (WebDAV, PHP)?
जेन्स ब्रेडलर

अपने परीक्षण में, मैं file_put_contents () का उपयोग कर रहा हूं। लेकिन इस कोड को मैं 'फिक्स' करने की कोशिश कर रहा हूं वह है ड्रुपल लेस मॉड्यूल (जो संसाधित सीएसएस फ़ाइलों के कैश्ड संस्करण बनाता है)। मेरी विशिष्ट समस्या यह है कि मैं drush cc allअपने उपयोगकर्ता के रूप में नहीं चल सकता क्योंकि यह इन सभी www- डेटा पर कैश फ़ाइलों को त्रुटि देता है।
Artfulrobot

जवाबों:


11

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

सरल परीक्षण PHP स्क्रिप्ट:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

ध्यान रखें कि उपयोगकर्ता www-data ने उस फ़ोल्डर तक पहुंच लिखी है जहां आपने यह सरल परीक्षण फ़ाइल स्थापित की है।

नया umask चलाने के लिए, जांचें कि क्या आपकी Apache start file /etc/init.d/apache2 में फ़ाइल / etc / apache2 / envvars का उपयोग किया जाएगा:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

अपना umask / etc / apache2 / envvars में सेट करें:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

अपनी अपाचे को पुनरारंभ करें:

service apache2 restart

अंतर की जाँच करें:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt

धन्यवाद! यहां तक ​​कि अगर यह मुझे पढ़ने के लिए एक बेवकूफ की तरह महसूस करता है (मेरे पास ग्रुप आरडब्ल्यू के लिए गलत ऑक्टल था) * ब्लश *
आर्टफ्लोरोबॉट

आपके छोटे PHP स्निपेट ने मेरी पवित्रता को बचाया, PDO Sqlite3 Wordpress plugin हमेशा समूह को केवल डेटाबेस फ़ाइल के लिए पढ़ने के लिए सेट करेगा।
डैनियल सोकोलोव्स्की

2

यदि आप एक से अधिक साइटें चलाते हैं तो आप एक्सेस कंट्रोल लिस्ट (ACL) का उपयोग करके प्रति समूह डिफ़ॉल्ट समूह अनुमति सेट कर सकते हैं:

setidसमूह से निर्देशिका के लिए सभी नई फ़ाइलों को बाध्य करने के लिए ध्वज सेट करें :

# chmod g+s wordpress

rwसमूह अनुमतियों के लिए नई फ़ाइलें बनाएं , पूर्व। ताकि www-dataअपलोड उपयोगकर्ता द्वारा SFTPed फ़ाइलों को लिख सकें:

# setfacl --default --modify group::rwx wordpress 

एसीएल की पुष्टि करें ऐसा है:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

इसकी पुष्टि करने के लिए एक फ़ाइल बनाएँ:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test

क्या यह समस्याग्रस्त नहीं होगा यदि एप्लिकेशन उद्देश्य पर कम अनुमति के साथ फाइल लिखने की कोशिश कर रहा है?
बेर्बट

बिल्कुल नहीं, आवेदन केवल कम अनुमतियों के साथ लिखेंगे जो वास्तव में मुझे शुरू में थोड़ा उलझन में थे - stackoverflow.com/questions/28454551/…
डैनियल सोकोलोव्स्की

1
मुझे लगता है कि यह कमांड setfacl --default --modify group:rwx wordpressएक कॉलोन को याद कर रहा है। यह होना चाहिएsetfacl --default --modify group::rwx wordpress
मार्कोस

2

(डेबियन स्ट्रेच के लिए जो सिस्टमड का उपयोग करता है - धन्यवाद वोमबल!)

UMask=0002Apache2 systemd सर्विस यूनिट फ़ाइल में डालें , सर्विस यूनिट को फिर से लोड करें, और फिर Apache2 को पुनरारंभ करें।

$ पीडब्ल्यूडी
/etc/systemd/system/multi-user.target.wants

$ बिल्ली apache2.service
[यूनिट]
विवरण = अपाचे HTTP सर्वर
के बाद = network.target Remote-fs.target nss-lookup.target

[सेवा]।
।
।
।
Umask = 0002

$ सुडो सिस्टेक्टल डेमन-रीलोड
$ sudo systemctl पुनः आरंभ करें Apache2

डेबियन निचोड़ प्रणाली का उपयोग नहीं किया।
Womble

आह हाँ, मूल प्रश्न के शरीर के अंत में वे डेबियन स्क्वीज़ कहते हैं। जैसा कि सवाल ~ 8 साल पहले आज से था, और जैसा कि मैं 2019 के अंत में नवीनतम डेबियन के साथ शीर्षक में उत्पन्न समस्या को हल करने की कोशिश कर रहा था, यही मैंने पोस्ट किया। मुझे लगता है कि आज के समाधान के लिए खोज करने वाले अधिकांश लोग आठ साल पहले के विरोध के रूप में मेरे समाधान से लाभान्वित हो सकते हैं, इसलिए मैं बस वही छोड़ूंगा जो मैं डाल रहा हूं। इस ओर इशारा करने के लिए धन्यवाद।
डुप्लेक्सडाॅन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.