PID फ़ाइल को / var / चलाने में लिखने की अनुमति क्या है


51

उबंटू

स्पर्श: स्पर्श नहीं कर सकता `/var/run/test.pid ': अनुमति से इनकार किया

मैं स्टार्ट-स्टॉप-डेमॉन शुरू कर रहा हूं और पीआईडी ​​फाइल को / var / run start-stop-daemon में लिखना पसंद करता हूं

/ var / रन सेटिंग drwxr-xr-x 9 रूट रूट है

मुझे रूट ग्रुप में अपना प्रोग्राम-यूजर डालने से बचना पसंद है।

जवाबों:


71

डिफ़ॉल्ट रूप से, आप केवल 0 के प्रभावी उपयोगकर्ता आईडी (यानी रूट के रूप में) के साथ एक उपयोगकर्ता के रूप में / var / चला सकते हैं। यह अच्छे कारणों के लिए है, इसलिए आप जो भी करते हैं, वह नहीं जाते हैं और / var / run की अनुमतियों को बदलते हैं ... इसके बजाय, रूट के रूप में, / var / run के तहत एक निर्देशिका बनाएं :

# mkdir /var/run/mydaemon

फिर इसके स्वामित्व को उस उपयोगकर्ता / समूह में बदलें जिसके तहत आप अपनी प्रक्रिया चलाना चाहते हैं:

# chown myuser:myuser /var/run/mydaemon

अब / var / run के बजाय / var / run / mydaemon का उपयोग करने के लिए निर्दिष्ट करें।

प्रश्न में उपयोगकर्ता के रूप में परीक्षण चलाकर आप हमेशा इसका परीक्षण कर सकते हैं।


5
इसने मेरे लिए ठीक काम किया लेकिन जब मैंने अपने सर्वर को फिर से शुरू किया तो /var/run/mydaemonनिर्देशिका चली गई।
मायबोरबदूर

17
यह एक पूर्ण उत्तर नहीं है, / Ubuntu पर डिफ़ॉल्ट रूप से var / run tmpfs है। हर बार सर्वर शुरू होने के बाद mkdir और chown कमांड को फिर से चलाने की आवश्यकता होती है।
टिम

1
@ कैसे उत्तर के बारे में संपादित करें और इसे पूरा करें?
केसर

यदि आप डेमन के साथ काम कर रहे हैं, तो यहां बताए गए सिस्टमड यूनिट फ़ाइल में पथ / var / run / mydaemon जोड़ने के लिए एक साफ समाधान होगा । Mkdir और chown कमांड को init.d script में जोड़ने के लिए एक आसान हैसी समाधान होगा (यदि कोई मौजूद है)
odedfos

1
एक बेहतर व्यापक उत्तर यहां है: superuser.com/a/1127720/71795 एक गलत उत्तर जो बहुत ही सुरुचिपूर्ण लगता है, यहां है: stackoverflow.com/a/5174433 । सारांश: का उपयोग या तो /tmpया ~
टिम

13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

यह काम नहीं करेगा, क्योंकि यह अगले रिबूट में खो जाएगा ( /var/runUbuntu पर एक tmpfs है)।

स्टार्टअप स्क्रिप्ट के भाग के रूप में mkdir और chmod को चलाने के लिए एकमात्र संभव समाधान है।


3

आप यह कोशिश कर सकते हैं। एक निर्देशिका / var / run / test / बनाएँ और फिर इस निर्देशिका की अनुमति को उसी उपयोगकर्ता में बदलें, जैसे आपका प्रोग्राम चलता है। "chown / var / run / test /"। अब आपके आवेदन में PID फ़ाइल का स्थान बदलकर /var/run/test/test.pid हो गया है। यह आपके लिए काम करने वाली चीजें मिलनी चाहिए।


2

"स्टिकी" बिट का उपयोग करने के बारे में क्या / var / रन?

chmod + t / var / रन?

संभवत: कुछ अन्य ऐप को गड़बड़ करते हैं, लेकिन ऐसा लगता है कि यह एक और समाधान होगा।

मैं अभी के लिए एक अलग / var / run फ़ोल्डर बनाने के साथ रहूँगा।


1

में प्रविष्टियां /etc/permissionsस्थायी हैं। एक निर्देशिका को स्थायी करने के लिए स्वामित्व और अनुमतियां बनाने के लिए वहां एक प्रविष्टि करें।


-6

अपने प्रोग्राम-यूज़र को रूट ग्रुप में डालने से बचने के लिए, दूसरों को लिखने की अनुमति दें:

# chmod 757

3
कभी भी एक chmod 757 on / var / run न करें! यह सुरक्षा की गंभीर समस्या का कारण बनेगा
michel

1
यह एक भयानक विचार है। यह संभावित रूप से बड़े पैमाने पर सुरक्षा समस्या का कारण होगा
टॉम ओ'कॉनर

यहां तक ​​कि अगर हम सुरक्षा समस्या को अनदेखा करते हैं, chmod 757तो भी केवल अगले रिबूट तक काम करेगा। एक नया उत्तर बनाने के बारे में क्षमा करें, लेकिन दूसरी टिप्पणी का उत्तर देने का कोई तरीका नहीं है।
व्लादिमीर निकोलाई

@michel, लेखक एक ऐसा करने के लिए कहा कभी नहीं chmodपर /var/run। लेखक का यह अनुप्रयोग उपनिर्देशिका के लिए हो सकता है। निश्चित नहीं है कि सभी उपद्रव किस बारे में हैं।
एक्यूमेनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.