2012-03-06 11 views
11

मैं एक दूरस्थ सर्वर से एक स्थानीय सर्वर से एक वेब फ़ोल्डर संरचना को दोहराने के लिए rsync का उपयोग कर रहा हूँ www-डेटा के लिए केवल स्वामित्व की रक्षा। दोनों सर्वर उबंटू लिनक्स हैं। मैं निम्नलिखित कमांड का उपयोग करता हूं, और यह अच्छी तरह से काम करता है:rsync SSH पर स्वामित्व वाली फ़ाइलों को

rsync -az /var/www/ [email protected]:/var/www/ 

स्थानीय सिस्टम और रिमोट सिस्टम के लिए उपयोगकर्ता नाम भिन्न हैं। मैंने जो पढ़ा है, उससे सभी फाइल और फ़ोल्डर मालिकों और समूहों को संरक्षित करना संभव नहीं हो सकता है। यह ठीक है, लेकिन मैं केवल www-data उपयोगकर्ता के लिए मालिकों और समूहों को संरक्षित करना चाहता हूं, जो दोनों सर्वरों पर मौजूद है।

क्या यह संभव है? यदि हां, तो मैं ऐसा करने के बारे में कैसे जाऊं?

** संपादित करें **

rsync स्वामित्व और दूरदराज के फ़ाइल पर समूहों की रक्षा करने में सक्षम होने के कुछ जिक्र नहीं है यहाँ समन्वयित होते हैं: http://lists.samba.org/archive/rsync/2005-August/013203.html

** संपादित 2 **

मैं समाप्त हो गया वांछित प्रभाव प्राप्त करना यहां कई सहायक टिप्पणियों और उत्तरों के लिए धन्यवाद। स्रोत मशीन का आईपी मानना ​​10.1.1.2 है और गंतव्य मशीन का आईपी 10.1.1.1 है। मैं गंतव्य मशीन से इस लाइन का उपयोग कर सकते हैं:

sudo rsync -az [email protected]:/var/www/ /var/www/ 

यह स्वामित्व और एक आम उपयोगकर्ता नाम है, www-डेटा की तरह फ़ाइलों के समूह को बरकरार रखता है। ध्यान दें कि rsyncsudo के बिना इन अनुमतियों को सुरक्षित नहीं करता है।

+1

आप शायद अपने जड़ उपयोगकर्ता नाम "रूट" से अलग नहीं करना चाहिए। यह एक डिफ़ॉल्ट है कि कई चीजें मानी जाएंगी, क्योंकि यह हमेशा हर यूनिक्स या लिनक्स सिस्टम पर समान होती है, और दशकों से रही है। यदि आपका रूट उपयोगकर्ता नाम "रूट" नहीं है, तो यदि चीजें अभी भी काम करती हैं, तो भविष्य में कुछ विफल होने की उम्मीद है। – ghoti

+0

भ्रम के लिए खेद है, लेकिन उपयोगकर्ता नाम मैंने ऊपर की चर्चा करते हुए हूँ sudo विशेषाधिकारों के साथ उपयोगकर्ताओं, नहीं "रूट" उपयोगकर्ता हैं। निस्संदेह अभी भी रूट खाते हैं जिन्हें मैं सामान्य रूप से उपयोग नहीं करना चुनता हूं। मुझे आशा है कि मैं ऐसा कर सकता हूं जो मुझे सिर्फ सूडो के साथ करने की ज़रूरत है। –

+0

क्या आप स्पष्ट कर सकते हैं कि आप किसी विशिष्ट स्वामी को संरक्षित कर रहे हैं: स्थानांतरण में समूह, या * सभी * स्वामी: समूह सेटिंग्स को संरक्षित करना? गैर-रूट के रूप में, मैं फ़ाइलों को स्थानांतरित कर सकता था लेकिन वे हमेशा गैर-रूट उपयोगकर्ता के स्वामित्व में समाप्त हो गए थे जो rsync पर सेट किया गया था। जड़ के रूप में, सब मालिक: समूहों ठीक संरक्षित किया गया, मैं सिर्फ नहीं रूट के रूप में rsync (वास्तव में lsyncd) को चलाने के लिए – Hal50000

उत्तर

19

तुम भी --rsync-path विकल्प का उपयोग करके लक्ष्य मेजबान पर rsync sudo कर सकते हैं:

# rsync -av --rsync-path="sudo rsync" /path/to/files [email protected]:/path 

यह आपको user targethost पर के रूप में प्रमाणित करते हैं, लेकिन अभी भी sudo के माध्यम से विशेषाधिकार प्राप्त लिखने की अनुमति प्राप्त करने देता है। अपने पासवर्ड के लिए सुडो के अनुरोध से बचने के लिए आपको लक्ष्य होस्ट पर अपनी सूडर्स फ़ाइल को संशोधित करना होगा। man sudoers या निर्देशों और नमूने के लिए sudo visudo चलाएं।

आप उल्लेख करते हैं कि आप www-data के स्वामित्व वाली फ़ाइलों के स्वामित्व को बनाए रखना चाहते हैं, लेकिन अन्य फाइलें नहीं। यदि यह वास्तव में सच है, तो आप भाग्य से बाहर हो सकते हैं जब तक कि आप अनुमतियों को अपडेट करने के लिए chown या rsync का दूसरा भाग लागू नहीं करते हैं। के लिए स्वामित्व को संरक्षित रखने के लिए rsync को बताने का कोई तरीका नहीं है केवल एक उपयोगकर्ता

उस ने कहा, आपको rsync के --files-from विकल्प के बारे में पढ़ना चाहिए।

rsync -av /path/to/files [email protected]:/path 
find /path/to/files -user www-data -print | \ 
    rsync -av --files-from=- --rsync-path="sudo rsync" /path/to/files [email protected]:/path 

मैं इस परीक्षण नहीं किया है, तो मुझे यकीन है कि वास्तव में कैसे --files-from=- में पाइपिंग खोजने के उत्पादन में काम करेंगे नहीं हूँ। आपको निस्संदेह प्रयोग करने की आवश्यकता होगी।

+0

यह सब समझ का एक बहुत पड़ता है, लेकिन मैं 'साथ --chown = उपयोगकर्ता वास्तव में इस प्रयास करें: group' विकल्प है, और यह काम नहीं करता। '--super' जोड़ना या तो मदद नहीं करता है। मुझे आश्चर्य है कि '--rsync-path =" sudo rsync "' का उपयोग किसी भी तरह से '--chown' के साथ असंगत है। मैंने रूट उपयोगकर्ता को सीधे एसएसएच के लिए उपयोग करने की कोशिश नहीं की है, लेकिन मैं आम तौर पर किसी अन्य उपयोगकर्ता खाते से सूडो करना पसंद करता हूं। – nus

+0

मुझे जवाब मिला: ऐसा लगता है कि '--chown' तब तक काम नहीं करता जब तक कि आप' --owner --group' भी सेट नहीं करते। यह काउंटर अंतर्ज्ञानी है, क्योंकि बाद के विकल्प मालिक से समूह और स्रोत से समूह के बारे में बात करते हैं। उस पर, '--chown' के लिए मैन पेज का उल्लेख नहीं है, न ही एक चेतावनी जारी की गई है। '--usermap' के लिए अनुभाग का उल्लेख है। – nus

3

जहाँ तक मुझे पता है, आप कर सकते हैं, आप की तुलना में किसी और को करने के लिए फ़ाइलों नहीं chown यदि आप नहीं जड़ हैं। इसलिए आपको को www-data खाते का उपयोग करना होगा, क्योंकि सभी फ़ाइलों को निर्दिष्ट उपयोगकर्ता के साथ मालिक के रूप में बनाया जाएगा। तो आपको फ़ाइलों को बाद में chown की आवश्यकता है।

+0

मदद के लिए धन्यवाद करना चाहता था। हां, मैं उन्हें बाद में दिखाने के लिए एक स्क्रिप्ट लिखना टालना चाहता था, क्योंकि मैं चाहता हूं कि यह सब एक स्क्रिप्ट .sh फ़ाइल में स्वचालित हो। मैं वास्तव में .sh फ़ाइल में पासवर्ड को सहेजना नहीं चाहता हूं। –

+0

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

+0

@ghoti - हाँ मैं SSH कुंजियों का उपयोग करें, वे महान हैं, लेकिन अगर आप 'ssh से अधिक sudo chown www-डेटा file.html' की तरह कुछ करना चाहता हूँ वे पर्याप्त नहीं हैं। आपको अभी भी सुडो पासवर्ड दोबारा दर्ज करना होगा। तो मुझे कुछ अन्य उत्तरों में सुझाए गए अनुसार, गंतव्य मशीन से स्क्रिप्ट चलाने की आवश्यकता होगी। अगर मैं सूडो अनुमतियों के साथ स्क्रिप्ट चलाता हूं, तो इसे काम करना चाहिए। –

2

स्थानीय सिस्टम और दूरस्थ सिस्टम के लिए रूट उपयोगकर्ताओं अलग हैं।

इसका क्या अर्थ है? रूट उपयोगकर्ता यूआईडी 0 है। वे अलग कैसे हैं?

निर्देशिका आप प्रतिलिपि बनाना तय कर सकते हैं कि क्या उपयोगकर्ता नाम ही क्या फाइलों चाहते हैं कि पढ़ने के लिए अनुमति के साथ कोई भी उपयोगकर्ता। केवल रूट लिखित फ़ाइलों के स्वामित्व को बदल सकता है।

आप वर्तमान स्रोत मशीन है, जो [email protected] के साथ जुड़े अनुमतियों के लिए अपने लेखन को प्रतिबंधित करता है पर कमांड चला रहे हैं। इसके बजाय, आप लक्ष्य मशीन पर रूट के रूप में आदेश चलाने का प्रयास कर सकते हैं। आपके स्रोत मशीन पर पहुंच को पढ़ना कोई समस्या नहीं है।

तो लक्ष्य मशीन (10.1.1.1) पर, स्रोत मानते हुए 10.1.1.2 है:

# rsync -az [email protected]:/var/www/ /var/www/ 

सुनिश्चित करें कि आपके समूह दोनों मशीनों पर मेल खाते हों।

इसके अलावा, एक DSA या RSA कुंजी का उपयोग इतना है कि आप पासवर्ड के आसपास चल होने से बचने कर सकते हैं [email protected] के लिए उपयोग की स्थापना की।उदाहरण के लिए, अपने लक्ष्य मशीन पर रूट के रूप में, चलाएँ:

# ssh-keygen -d 

फिर फ़ाइल /root/.ssh/id_dsa.pub की सामग्री को लेने के लिए और स्रोत मशीन पर ~user/.ssh/authorized_keys में जोड़ें। आप लक्ष्य मशीन से रूट के रूप में ssh [email protected] देख सकते हैं कि यह काम करता है या नहीं। अगर आपको पासवर्ड प्रॉम्प्ट मिलता है, तो यह देखने के लिए कि आपका कुंजी क्यों काम नहीं कर रहा है, अपना त्रुटि लॉग जांचें।

+0

उपयोगकर्ता नाम अलग हैं। मैं दोनों पर उपयोगकर्ता हूँ। मैं कोशिश करूँगा, धन्यवाद। –

+0

जो कि काम नहीं करता था। फ़ाइलों का समन्वय काम करता था, लेकिन गंतव्य मशीन पर फ़ाइलों का मालिक और समूह अभी भी उपयोगकर्ता नाम है जो rsync निष्पादित करता है। यहां तक ​​कि जब मैं '-o' विकल्प का उपयोग करता हूं। –

+0

जैसा कि मैंने कहा, ऊपर, केवल रूट ही उन फ़ाइलों पर उपयोगकर्ता नाम सेट कर सकता है जो यह लिखते हैं। तो यदि आप उपयोगकर्ता नाम सेट करना चाहते हैं, तो rsync को 'रूट' के रूप में चलाएं। जैसा कि आप rsync मैन पेज से देख सकते हैं, '-o' विकल्प "केवल सुपर-उपयोगकर्ता" के लिए है। वह जड़ है। – Graham

2

ठीक है, आप पूरी तरह से rsync की चुनौतियों को छोड़ सकते हैं, और बस एक टैर सुरंग के माध्यम से ऐसा कर सकते हैं।

sudo tar zcf - /path/to/files | \ 
    ssh [email protected] "cd /some/path; sudo tar zxf -" 

आपको ग्राहम के वर्णन के रूप में अपनी एसएसएच कुंजी सेट अप करने की आवश्यकता होगी।

ध्यान दें कि यह पूर्ण निर्देशिका प्रतियों को संभालता है, rsync जैसे वृद्धिशील अपडेट नहीं।

विचार है कि यहाँ है:

  • आप अपनी निर्देशिका अप अलकतरा,
  • बजाय एक टार फ़ाइल बनाते समय, आप stdout में राल उत्पादन,
  • कि stdout एक SSH के माध्यम से पहुंचाया जाता है भेजने को अन्य होस्ट,
  • पर टैर प्राप्त करने के लिए आदेश, लेकिन यह प्राप्त करने वाला सूड सूडो द्वारा चलाया जाता है, इसलिए इसे उपयोगकर्ता नाम सेट करने के लिए विशेषाधिकार प्राप्त पहुंच प्राप्त है।
+0

हाँ, लेकिन इस तरह आप वृद्धिशील बैकअप करने का मौका खो देते हैं। स्रोत में किसी भी बदलाव के लिए, आपको हर बार पूरी सामग्री अपलोड करनी होगी। बहुत ज्यादा अक्षम – Dakatine

+0

यूप। जैसा कि आप देख सकते हैं, मैंने ध्यान दिया कि इस जवाब में। ओपी ने उल्लेख नहीं किया * क्यों * वह rsync का उपयोग कर रहा था। कुछ लोग इसे वृद्धिशील अपडेट के लिए उपयोग करते हैं, कुछ इसे एक बार की प्रतियों के लिए उपयोग करते हैं जब वे यह सुनिश्चित करना चाहते हैं कि अनुमतियां मिलें। यदि वृद्धिशील अपडेट आपकी प्राथमिकता है, तो यह आपके लिए जवाब नहीं है। हालांकि, यह अन्य समस्याओं के संभावित समाधान के रूप में ध्यान देने योग्य है। – ghoti

3

मैं एक ऐसी ही समस्या थी और rsync आदेश को धोखा दिया,

rsync -avz --delete [email protected]।एक्स:/घर // डोमेन/साइट/public_html// घर/domains2/public_html & & chown आर wwwusr: wwwgrp/घर/domains2/public_html/

& & फ़ोल्डर के खिलाफ chown चलाता rsync पूरा करता है जब सफलतापूर्वक (1x '&' rsync पूरा होने की स्थिति से बेपरवाह chown चल पाएंगे)

+0

(1x 'और' rsync समापन स्थिति के बावजूद चोटी चलाएगा) वास्तव में rsync को पृष्ठभूमि करेगा और rsync समाप्त होने से पहले चोटी को चलाने का कारण बन जाएगा। –