सूदिंग करते समय एक निश्चित मालिक (उपयोगकर्ता / समूह) के साथ फाइलें और निर्देशिकाएं बनाना


22

मुझे wgetकुछ करने की आवश्यकता है (सीडब्ल्यूडी में एक संकुचित फ़ाइल में परिणाम), फिर मुझे इसे निकालना होगा, फिर कुछ कॉपी / मूव / संशोधन सामान करना होगा और शायद एक स्क्रिप्ट (डाउनलोड किए गए संग्रह से) निष्पादित करें।

अब ये सभी कार्य सीधे (या wget, अर्क आदि) या अप्रत्यक्ष रूप से (स्क्रिप्ट चल रहा है) परिणाम फाइल और निर्देशिका बनाने में (सभी वर्तमान वर्किंग डायरेक्टरी में)। मैं यह सब कुछ करता हूं root(अंतिम, वांछित उपयोगकर्ता के साथ ऐसा करने का कोई तरीका नहीं)।

समस्या यह है: प्रक्रिया में बनाई गई कुछ भी जड़ या sudo उपयोगकर्ता के स्वामित्व में है। जब मैं किया जाता हूं (और कभी-कभी मध्य-मार्ग में), मुझे चीजों को सही बनाने के लिए chmodऔर chownआदेशों की एक श्रृंखला जारी करनी होगी ।

अब यह अच्छा होगा यदि किसी तरह सिस्टम को बता सके कि "अब से, कोई भी फाइल या डायर जो आप बनाते हैं जब मैं कमांड को रूट के रूप में जारी करता हूं, तो आप इस तरह के स्वामित्व और अनुमतियों के साथ बनाएंगे"।

जवाबों:


26

sudo -u username touch filenameजब आपकी स्क्रिप्ट निष्पादित होती है तो आप हमेशा कर सकते हैं root। यह आमतौर पर आपके sudoersकॉन्फ़िगरेशन के आधार पर, पासवर्ड की आवश्यकता नहीं होती है।

वैकल्पिक रूप से, भागो su username -c touch filename। अतिरिक्त तर्क उपयोगकर्ता के शेल को दिए जाते हैं, और शेल का -cविकल्प सम्मेलन द्वारा निर्दिष्ट आदेशों को निष्पादित करता है।


mkdirअनुमतियाँ निर्दिष्ट करने के लिए कुछ कमांड (जैसे ) तर्क का समर्थन करते हैं:

mkdir -m 0700 foo

डिफ़ॉल्ट रूप से, फ़ाइल कार्रवाई umaskशेल के लिए सेट का सम्मान करती है । यह परिभाषित करता है कि कौन सी अनुमतियां अस्वीकृत हैं । एक umaskके 0022उदाहरण के लिए करता है नहीं समूह और दूसरों के लिए लिखने की अनुमति सेट। 0077समूह और अन्य को किसी भी अनुमति प्राप्त करने से रोकने के लिए सेट करें ।


आप setgidनिर्देशिकाओं पर सेट कर सकते हैं कि उनके समूह की सदस्यता प्राप्त करने के लिए सभी फाइलें बनाई जाएं:

chmod g+s someDir

कुछ यूनिक्स एक समान व्यवहार के लिए समर्थन करते हैं setuid( chmod u+s), लेकिन लिनक्स नहीं।


1
मुझे लगता है कि यह मान लेना सुरक्षित है कि आप जो मांग रहे हैं, उसके लिए कोई समर्पित समर्थन नहीं है। केवल सुपर उपयोगकर्ता chownएक अलग उपयोगकर्ता के लिए फाइल कर सकता है , और इस तरह एक डिफ़ॉल्ट सेटिंग उपयोगकर्ता की गलतियों की क्षमता है, जो उपयोगकर्ता को बिना rootएहसास के अन्य उपयोगकर्ताओं को अनुमति देता है ।
डैनियल बेक

10

एक और तरीका है, मुझे लगता है कि काफी सुरुचिपूर्ण है। का उपयोग कर स्थापित (1)

उदाहरण के लिए, zabbix-agentd को / var / run के अंदर सबफ़ोल्डर की आवश्यकता होती है, लेकिन हाल के वितरण / var / run के लिए tmpfs का उपयोग कर रहे हैं, इसलिए निर्देशिका रिबूट से बच नहीं पाती है। मैंने एक फ़ाइल / etc / sysconfig / zabbix-agentd युक्त बनाकर इसे हल किया:

install -g zabbix -o zabbix -d /var/run/zabbix

1
-m 0700उदाहरण के लिए भी जोड़ें । इस सवाल का जवाब।
अंगूठी Ø

3
ध्यान दें कि installनिर्देशिका बनाता है और फिर स्वामी / समूह बदलता है। इसलिए एक छोटा समय है जहां निर्देशिका में निर्दिष्ट स्वामी / समूह नहीं है। कुछ संदर्भों में यह मायने रख सकता है।
user368507

यह अल्पाइन लिनक्स पर काम करता है
मौरिसियो सेंचेज

3

यूनिक्स जैसी प्रणालियों पर नई बनाई गई फाइलें और निर्देशिकाएं उस प्रक्रिया के स्वामी के स्वामित्व में हैं, जिन्होंने उन्हें बनाया था। मानक उपयोगिताओं में आम तौर पर बनाई गई फ़ाइलों के मालिक को बदलने का विकल्प नहीं होता है।

UID और मूल उपयोगकर्ता के GID के साथ चर

यदि आप बार-बार कुछ कमांड चलाते हैं, तो आप चर का उपयोग कर सकते हैं $SUDO_UIDऔर $SUDO_GIDउस उपयोगकर्ता को संदर्भित कर सकते हैं, जिसने आह्वान किया था sudo:

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

स्वचालित रूप से बनाई गई फ़ाइलों और निर्देशिकाओं की सूची प्राप्त करना

यदि आप बनाई गई (और संभवतः संशोधित) फ़ाइलों और निर्देशिकाओं की सूची स्वचालित रूप से प्राप्त करना चाहते हैं, तो आप अपने आदेशों को straceनिगरानी में चला सकते हैं जो ptrace()syscall पर आधारित है :

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

या आप उदाहरण के लिए इंस्टालवॉच का उपयोग कर सकते हैं जो LD_PRELOADतंत्र पर आधारित है।

आगे के काम के लिए विचार

ऊपर वर्णित विधियों के आधार पर एक उपकरण बनाना संभव है जो स्वचालित रूप से मालिक को बदल देगा और संभवतः निर्मित / संशोधित फ़ाइलों के अधिकारों का उपयोग करेगा। उपयोग के रूप में सरल हो सकता है:

sudo watch-chown do_something
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.