उपयोगकर्ता स्पर्श नहीं कर सकता


10

जब मेरे फेडोरा सर्वर में SCP'ing होता है, तो एक उपयोगकर्ता को फ़ाइल टाइमस्टैम्प ("निर्धारित समय: संचालन अनुमति नहीं है") को संशोधित करने में सक्षम नहीं होने के बारे में त्रुटियां मिलती रहती हैं। उपयोगकर्ता फ़ाइल का स्वामी नहीं है, लेकिन हम chownसुरक्षा कारणों से इस उपयोगकर्ता के लिए फ़ाइल नहीं कर सकते । उपयोगकर्ता कर सकता है sudo, लेकिन चूंकि यह एससीपी / एफ़टीपी क्लाइंट के माध्यम से हो रहा है, इसलिए ऐसा करने का कोई तरीका नहीं है। और अंत में, हम इस उपयोगकर्ता को रूट एक्सेस देना नहीं चाहते हैं, बस उसे rsync या WinSCP जैसे सिंक्रनाइज़ेशन का उपयोग करने की अनुमति देता है जिसे टाइमस्टैम्प सेट करने की आवश्यकता होती है।

उपयोगकर्ता rwसभी प्रासंगिक फ़ाइलों और dirs पर पूर्ण अनुमतियों के साथ एक समूह का हिस्सा है । touch -tइन विशिष्ट फ़ाइलों के लिए उपयोगकर्ता की अनुमति देने के बारे में कोई भी विचार chownउनके पास नहीं है?

इसके अलावा जानकारी यह सब एक एकल-डेवलपर परिदृश्य में PHP विकास को सक्षम करने के साथ करना है (यानी: SCM के बिना)। मैं कोशिश कर रहा हूं कि एक्लिप्स या नेटबींस के साथ काम करते हुए PHP- आधारित (वर्डप्रेस) साइट की एक स्थानीय प्रति पर काम करूं, जबकि उपयोगकर्ता को विकास सर्वर पर उसके परिवर्तनों का "तुरंत" पूर्वावलोकन करने की अनुमति देता है। उपयोगकर्ता दूरस्थ रूप से काम कर रहा होगा। अब तक, स्वचालित सिंक्रनाइज़ेशन पर सभी प्रयास विफल हो गए हैं - यहां तक ​​कि "घड़ी फ़ोल्डर" मोड में WinSCP का उपयोग करते हुए, जहां यह एक स्थानीय फ़ोल्डर की निगरानी करता है और दूरस्थ निर्देशिका त्रुटि में कोई भी परिवर्तन अपलोड करने का प्रयास करता है क्योंकि यह हमेशा दिनांक / टाइमस्टैम्प सेट करने का प्रयास करता है ।

उपयोगकर्ता के पास sudo एक्सेस है, लेकिन मुझे बताया गया है कि 'रूट' के तहत काम करना वास्तव में एक अच्छा विचार नहीं है, इसलिए मैं यह काम करने के लिए बस रूट के रूप में लॉग इन करने को तैयार नहीं हूं। इसके अलावा, यह आवश्यक नहीं होना चाहिए। मैं चाहता हूं कि कुछ अन्य, गैर-सुपरयूज़र एक ही काम करने में सक्षम हों - उनके खाते की जानकारी का उपयोग करके, एक एफ़टीपी कनेक्शन स्थापित करें और सिंक के माध्यम से दूर से काम करने में सक्षम हों। तो समाधान को रूट एक्सेस के बिना किसी के लिए काम करने की आवश्यकता है।

क्या मुझे डगमगाता है कि मुझे कितनी कठिनाई हो रही है। इन सभी सॉफ्टवेयर्स (NetBeans, Eclipse, WinSCP) को सिंक्रोनाइज़ेशन की अनुमति देने के लिए डिज़ाइन किया गया है, और ये सभी टाइमस्टैम्प को लिखने की कोशिश करते हैं। तो यह संभव होना चाहिए। WinSCP में "सेट टाइमस्टैम्प" को बंद करने का विकल्प होता है, लेकिन जब आप मॉनिटर / सिंक्रनाइज़ फ़ोल्डर का चयन करते हैं तो यह विकल्प अनुपलब्ध (हमेशा "चालू") हो जाता है। तो यह है मिल गया कुछ है कि काफी मानक है किया जाना है।

यह देखते हुए कि लिनक्स में आने पर मैं एक पूर्ण बेवकूफ हूं, और मैं देव "सर्वर व्यवस्थापक" हूं, मैं केवल यह मान सकता हूं कि यह कुछ बेवकूफ है जो मैं कर रहा हूं या मैंने (गलत) कॉन्फ़िगर किया है।

सारांश संक्षेप में, मैं चाहता हूं कि किसी भी उपयोगकर्ता के पास एक निर्देशिका में समूह आर / डब्ल्यू का उपयोग हो, एससीपी के माध्यम से उस निर्देशिका में फ़ाइलों पर टाइमस्टैम्प को बदलने में सक्षम होना चाहिए।


1
क्या आपका फ़ाइल सिस्टम कुछ मज़ेदार है? क्या आप ACL का उपयोग कर रहे हैं? सामान्य तौर पर यह समूह सदस्यता के साथ संभव होगा।
कालेब

5
मूल रूप से आपका सिस्टम आपको बता रहा है, "आप स्पर्श नहीं कर सकते -t [उसका]।"
बोहज

@ कालेब: नहीं, आप केवल वर्तमान तिथि तक ही सेट कर सकते हैं जब तक कि आप मालिक नहीं हैं। @ टॉम: क्या यह महत्वपूर्ण है कि तारीख का सम्मान किया जाए? क्या आप आवश्यकताओं पर थोड़ा विस्तार कर सकते हैं: यदि उपयोगकर्ता फ़ाइल में लिख सकता है, तो इससे कोई फर्क नहीं पड़ता कि क्या वह उनका मालिक हो सकता है? आमतौर पर, इन स्थितियों में, जिसने भी आखिरी बार फाइल को लिखा था, उसका मालिक है।
गिल्स एसओ- बुराई को रोकें '

@Tom: "हम इस उपयोगकर्ता को रूट एक्सेस देना नहीं चाहते हैं" और "उपयोगकर्ता sudo कर सकते हैं" के बीच एक स्पष्ट विरोधाभास है, क्या आप इस हिस्से को बेहतर तरीके से समझा सकते हैं? rootसमूह के आपके उपयोग के बारे में : rootसमूह के पास कोई विशेष अनुमति नहीं है, केवल rootउपयोगकर्ता करता है।
गिल्स एसओ- बुराई को रोकें '

जवाबों:


10

यह काम क्यों नहीं करता है

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

  • आप फ़ाइल के संशोधन समय को एक विशिष्ट समय पर सेट करने का प्रयास कर रहे हैं। इसके लिए आवश्यक है कि आप फ़ाइल के स्वामी हों। (तकनीकी रूप से बोलते हुए, प्रक्रिया की प्रभावी उपयोगकर्ता आईडी फ़ाइल का स्वामी होना चाहिए।)
  • आप फ़ाइल के संशोधन समय को वर्तमान समय में सेट करने का प्रयास कर रहे हैं। यह काम करता है अगर और केवल अगर आपके पास फ़ाइल को लिखने की अनुमति है। इस अपवाद का कारण यह है कि आप फ़ाइल के मौजूदा बाइट को उसी मान से अधिलेखित करके वैसे ही प्रभाव प्राप्त कर सकते हैं।

यह आम तौर पर क्यों मायने नहीं रखता

  • जब आप ftp, scp, rsync, आदि के साथ फाइल कॉपी करते हैं, तो कॉपी एक नई फाइल बनाती है, जो भी कॉपी के पास होती है। तो कापियर को फ़ाइल के समय को सेट करने की अनुमति है।
  • Rsync के साथ, आप मौजूदा निर्देशिकाओं का समय निर्धारित करने में सक्षम नहीं होंगे: वे उस समय पर सेट हो जाएंगे जब कोई फ़ाइल अंतिम रूप से उन में सिंक्रनाइज़ की गई थी। ज्यादातर मामलों में, यह कोई फर्क नहीं पड़ता। आप rsync को बता सकते हैं कि गुजरने के समय --omit-dir-times( -O) से निर्देशिका समय से परेशान न हों ।
  • संस्करण नियंत्रण प्रणालियों के साथ, संशोधन तिथियां फाइलों के अंदर संग्रहीत की जाती हैं; फाइलों पर मेटाडेटा ज्यादातर अप्रासंगिक है।

समाधान

यह सब एक-डेवलपर परिदृश्य में PHP विकास को सक्षम करने के साथ करना है (यानी: SCM के बिना)।

ठीक है, वहीं रुक जाओ। सिर्फ इसलिए कि एक एकल डेवलपर का मतलब यह नहीं है कि आपको SCM का उपयोग नहीं करना चाहिए। आपको SCM का उपयोग करना चाहिए। किसी फ़ाइल में डेवलपर की जाँच करें, और उसे SCM से लाइव निर्देशिका में फ़ाइलों की जाँच करने के लिए "परिनियोजित" बटन दबाने का एक तरीका दें।

ऐसी कोई तकनीकी वजह नहीं है कि आप SCM का उपयोग क्यों न करें, लेकिन एक मानवीय कारण हो सकता है। यदि इन फाइलों पर काम करने वाला व्यक्ति खुद को "डेवलपर" बताता है, तो उसे SCM का उपयोग करना चाहिए। लेकिन अगर यह एक गैर-तकनीकी व्यक्ति है जो दस्तावेजों को आगे बढ़ा रहा है, तो SCM बहुत जटिल हो सकता है। इसलिए एफ़टीपी या एसएसएच पर फाइलों को आगे बढ़ाएं। यह काम कर सकते हैं तीन तरीके हैं।

  • क्या आपको वास्तव में समय को सिंक्रनाइज़ करने की आवश्यकता है? जैसा कि ऊपर बताया गया है, rsyncसमय को सिंक्रनाइज़ नहीं करने का विकल्प है। जब तक आप इसे नहीं बताते एससीपी नहीं है। मैं WinSCP नहीं जानता, लेकिन यह शायद भी कर सकते हैं।
  • आप जो कर रहे हैं उसे जारी रखें, बस समय के बारे में संदेशों को अनदेखा करें। फाइलें अभी भी कॉपी की जा रही हैं। यह एक अच्छा विकल्प नहीं है, क्योंकि त्रुटियों को अनदेखा करना हमेशा जोखिम भरा होता है। लेकिन यह तकनीकी रूप से संभव है।
  • यदि आपको apacheउपयोगकर्ता के स्वामित्व वाली फ़ाइलों को आबाद करने में लचीलेपन की आवश्यकता है , तो सामान्य दृष्टिकोण उपयोगकर्ता को एसएसएच एक्सेस की अनुमति देगा apacheआसान दृष्टिकोण उपयोगकर्ता एक SSH निजी कुंजी बना सकते हैं और करने के लिए इसी सार्वजनिक कुंजी को जोड़ने के लिए है ~apache/.ssh/authorized_keys। इसका अर्थ है कि उपयोगकर्ता उपयोगकर्ता के रूप में मनमानी कमांड चलाने में सक्षम होगा apache। चूँकि आप उपयोगकर्ता को वैसे भी sudo अधिकार देने के साथ ठीक हैं, यह आपके मामले में कोई मायने नहीं रखता है। यह संभव है, लेकिन इतना आसान नहीं है, और अधिक प्रतिबंध लगाने के लिए (आपको एक अलग नाम के साथ एक अलग उपयोगकर्ता डेटाबेस प्रविष्टि की आवश्यकता है, एक ही उपयोगकर्ता आईडी, एक प्रतिबंधित शेल और चेरोट जेल; एक अलग प्रश्न में विवरण; हालांकि यह पहले से ही कवर किया जा सकता है; इस साइट पर या सर्वर दोष पर )।

¹ या, एक खाली फ़ाइल के लिए, एक बाइट लिखें और फिर काटें।
² अतिरिक्त जटिलताओं को छोड़कर, लेकिन कोई भी जिसे मैं यहां लागू नहीं जानता हूं।


धन्यवाद गाइल्स, दिलचस्प विवरण के लिए। मुझे यकीन नहीं है कि मैं उपयोग मामले के बारे में अधिक स्पष्ट हो सकता हूं। जब भी मैं सिंक करता हूं तो नेटबीन्स "त्रुटियों को डिस्कनेक्ट नहीं कर सकता है" फेंकना जारी रखता है (हालांकि फ़ाइल को सही तरीके से स्थानांतरित किया जाता है और सर्वर पर सत्यापित किया जाता है); WinSCP 'समय निर्धारित करता है: संचालन की अनुमति नहीं है' त्रुटियाँ; जब मैं किसी फाइल को अनटार्ट करता हूं तो मुझे भविष्य में टाइमस्टैम्प को सेट करने में असमर्थ होने के बारे में चेतावनी मिलती है। इसके अलावा मुझे नहीं पता कि यह मुद्दा कहां है। मैं बस एक स्थानीय को एक दूरस्थ dir में सिंक करने में सक्षम होना चाहता हूं। एससीपी / एफ़टीपी के माध्यम से और समस्या टाइमस्टैम्प लगती है। क्या यह मदद करता है? शायद ऩही।
टॉम ऑगर

@Tom: मुझे अभी भी समझ में नहीं आया कि आप उपयोगकर्ताओं को केवल फाइलें ही क्यों नहीं दे सकते।
गिल्स एसओ- बुराई को रोकें '

कुछ फ़ाइलों को अपाचे (उदाहरण के लिए, अपलोड निर्देशिका) के स्वामित्व की आवश्यकता है, इसलिए मुझे मालिक को बदला नहीं जा सकता, सिर्फ इसलिए कि कोई निर्देशिका में कुछ फ़ाइलों पर काम कर रहा है। आप जो कह रहे हैं उससे कोई मतलब नहीं है - जब मैं एफ़टीपी का उपयोग करके एक फ़ाइल को ओवर-राइट करता हूं, तो मालिक जरूरी नहीं बदलता है। मुझे इस व्यवहार को बदलने की आवश्यकता नहीं है।
टॉम ऑगर

@ टोम: मालिक केवल इसलिए नहीं बदलता क्योंकि ये मौजूदा फाइलें हैं। मुझे समझ में नहीं आता कि आप उपयोगकर्ताओं को फ़ाइलों को अपलोड करने की अनुमति क्यों नहीं देते apache- फिर वे समय निर्धारित करने में सक्षम होंगे। सही समाधान के लिए मेरा संशोधित उत्तर और उप-अपनाने वालों के एक जोड़े को देखें।
गिल्स एसओ- बुराई को रोकना '

इस सवाल के साथ चिपके रहने के लिए धन्यवाद गिल्स। एसवीएन या कुछ प्रकार का उपयोग करना एक विकास के दृष्टिकोण से उप-रूपात्मक है। कोई भी व्यक्ति जिसने वेब विकास को दूरस्थ रूप से किया है, आपको बता सकता है कि प्रक्रिया आमतौर पर माइक्रो-वृद्धिशील है - खासकर जब नेत्रहीन स्टाइलिंग - तो आप हर 30-60 सेकंड के बारे में कमिट कर रहे हैं। यदि आपको अपनी आईडीई से लगातार बाहर निकलना है, तो कमिट रन करें, और फिर अपने ब्राउज़र का पूर्वावलोकन करें, आप एक टन ओवरहेड जोड़ रहे हैं जो एक सरल प्रक्रिया होनी चाहिए। एसवीएन केवल संदर्भ में समझ में आता है जब एक साइट के एक ही हिस्से पर कई देव काम कर रहे हैं। यह प्रोग्रामिंग से अलग है।
टॉम ऑर्नर

2

आप इस तरह से रिमोट अंत पर sudo का उपयोग करने के लिए rsync सेटअप कर सकते हैं:

rsync -ave ssh --rsync-path="sudo rsync" /source/ user@host:/dest/

सूडो शासन क्या होगा? बस rsync की अनुमति देना उपयोगकर्ता को मनमानी फ़ाइलों को अधिलेखित करने की अनुमति देगा। तर्क सीमाएँ सही मिलना बहुत कठिन है, और वैसे भी यहाँ मुझे लगता है कि आपको rsync के इनपुट पर प्रतिबंध लगाने की आवश्यकता होगी, जो तकनीकी रूप से एक रैपर स्क्रिप्ट के साथ संभव है लेकिन आसान नहीं है।
गिल्स एसओ- बुराई को रोकें '

आप सही हैं, अनुमति sudo rsyncदेना प्रतिबंधित करना बहुत मुश्किल है। मैंने केवल इसका सुझाव दिया क्योंकि ओपी ने कहा कि उपयोगकर्ता के पास पहले से ही सूडो एक्सेस था।
कालेब

धन्यवाद - यह दिलचस्प है, हालांकि डेवलपर एक विंडोज बॉक्स पर है, इसलिए मुझे यकीन नहीं है कि rsync जाने का सबसे अच्छा तरीका है। फिर से, जैसा कि मैंने अपनी पोस्ट के संपादन में उल्लेख किया है, मैं चाहता हूं कि यह समाधान किसी भी औसत उपयोगकर्ता के लिए काम करे, न कि कुछ निजी उपयोगकर्ता, जो उस विशेष निर्देशिका के स्वामी समूह से संबंधित हों।
टॉम ऑर्नर

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