डेबियन सिस्टम पर फ़ाइल आधारित सॉकेट्स के लिए मुहावरेदार स्थान


13

मैं डेबियन सिस्टम के लिए एक डेमन प्रक्रिया लिख ​​रहा हूं जिसमें यूनिक्स डोमेन सॉकेटC का उपयोग किया गया है ।

यदि डेमॉन प्रक्रिया की वर्किंग डायरेक्टरी रूट डायरेक्टरी है, तो क्या फाइल सिस्टम पर सॉकेट लगाने के लिए एक मुहावरेदार डायरेक्टरी है?


आप बस इसे कॉन्फ़िगर करने योग्य क्यों नहीं मानते?
बैचएक्सएक्स

3
@ बैचिएक्स खैर, कुछ प्रकार के डिफ़ॉल्ट मूल्य (प्रत्येक व्यवस्थापक को अपने दम पर निर्णय लेने के लिए मजबूर करने के बजाय) निश्चित रूप से अच्छा हो सकता है। :)
एक CVN

जवाबों:


17

वे आमतौर पर /tmpया उसके बाद एक उपनिर्देशिका में पाए जाते हैं। ध्यान दें कि सब कुछ /tmpशटडाउन में क्षरण के अधीन है - ऐसा नहीं है कि यह जरूरी मिटा दिया गया है, बस सावधान रहें कि यह हो सकता है , इसलिए यदि आप इसका उपयोग करते हैं, तो जांचें कि क्या आपको हर बार अपना उपनिर्देशिका बनाना है। यदि आप अनुमतियों के माध्यम से पहुँच को प्रतिबंधित करना चाहते हैं, तो आप एक उपनिर्देशिका का उपयोग करना चाहते हैं, क्योंकि /tmpदुनिया पढ़ने योग्य है।

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

ध्यान दें कि /run, और सिवाय अन्य सभी निर्देशिकाओं का उल्लेख किया गया है /tmp, केवल जड़ से लिखने योग्य हैं। एक सिस्टम प्रक्रिया के लिए, यह ठीक है, लेकिन यदि एप्लिकेशन को एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा चलाया जा सकता है, तो आप या तो /tmpकहीं एक स्थायी निर्देशिका का उपयोग करना या बनाना चाहते हैं और उस पर अनुमतियाँ सेट कर सकते हैं या उपयोगकर्ता के $ HOME में किसी स्थान का उपयोग कर सकते हैं।

स्थापना के दौरान /usr/share(या /usr/local/share) में एक निर्देशिका बनाना संभव है । निर्देशिकाएँ और सामग्री वहाँ संभवतः बूट के पार नहीं हैं क्योंकि वे /tmpया में होंगे /run। हालांकि, जैसा कि जोर्डनम टिप्पणियों में बताते हैं, /usrकेवल-पढ़ने के लिए माउंट किया जा सकता है और लिनक्स फाइलसिस्टम पदानुक्रम दिशानिर्देश इसे प्रतिबिंबित करते हैं । बेशक, यह केवल तभी पढ़ा जा सकता है जब आपका एप्लिकेशन इंस्टॉल हो, इसलिए यदि आप वहां सॉकेट बनाने में सहज हैं, तो आप इसे छोड़ सकते हैं और बाद में इसका उपयोग कर सकते हैं (आप तब भी सॉकेट को लिख पाएंगे फ़ाइल केवल पढ़ने के लिए है)।

यदि आप चाहते हैं कि बूटों में लगातार कुछ न हो, /etcजो केवल रीड-माउंटेड न हो, एक काफी सुरक्षित शर्त है, क्योंकि यह अक्सर सिस्टम-वाइड कॉन्फ़िगरेशन और री-कॉन्फ़िगरेशन के लिए उपयोग किया जाता है। OTOH, ऐसी प्रणालियाँ होना संभव है जहाँ संपूर्ण रूट फाइलसिस्टम में अंतर्निहित डिवाइस केवल-पढ़ने के लिए है (उदाहरण के लिए, एम्बेडेड सिस्टम), दूसरे डिवाइस पर tmp और / run के साथ / (शायद: tmpfs मेमोरी में)। तो दो सबसे मजबूत रणनीति प्रतीत होगी:

  • अनुप्रयोग स्थापित होने पर सॉकेट को स्थायी स्थान पर स्थापित करें।

  • एक निर्देशिका बनाएँ /runया /var/runरनटाइम पर और सॉकेट को वहां रखें।

  • केवल उसी में काम करो /tmp

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

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


2
/runया /var/runअक्सर रूट प्रक्रियाओं के लिए भी उपयोग किया जाता है।
बैचएक्सएक्स

सही। उन से भी अधिक tmp हैं /tmp। मैं उसे संपादित करूँगा।
गोल्डीलॉक्स

/usrकेवल पढ़ने के रूप में रखा जा सकता है। रनटाइम के दौरान फ़ाइलें कभी नहीं बनाई जानी चाहिए। अन्य सुझाव अच्छे हैं।
जोर्डन

1
आपके इनपुट के लिए आप सभी का धन्यवाद, चर्चा बहुत जानकारीपूर्ण थी। मैंने डिफ़ॉल्ट स्थान बनाने का फैसला किया /tmp/.APPNAME/.APPSOCKक्योंकि डेमॉन को लगातार डेटा की कोई आवश्यकता नहीं है।
recursion.ninja

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