Rsync में उपयोगकर्ता / समूह के स्वामित्व को मनमाने ढंग से कैसे मैप करें


17

मुझे एक निर्देशिका को दूरस्थ सर्वर पर rsync करने की आवश्यकता है ताकि स्रोत (स्थानीय) मशीन पर उपयोगकर्ता X और समूह Y से संबंधित सभी फाइलें गंतव्य (दूरस्थ) मशीन पर उपयोगकर्ता W और समूह Z के लिए मैप की जा सकें। यदि ट्रांसपोर्ट के रूप में ssh का उपयोग करके संभव है, लेकिन अगर मुझे rsync डेमॉन का उपयोग करने की आवश्यकता है तो यह ठीक है।

क्या ऐसा करने के लिए कोई रास्ता है? मैं एक मनमाना उपयोगकर्ता / समूह मानचित्र स्थापित करने का तरीका ढूंढ रहा हूं, जैसे कि

local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.

यह एक बहुत ही सामान्य उपयोग मामला होना चाहिए, है ना? उदाहरण के लिए, मेरे पास मेरे स्थानीय कंप्यूटर पर फाइलें हैं, जहां मेरा उपयोगकर्ता नाम X है, और मुझे उन्हें एक वेब सर्वर पर अपलोड करने की आवश्यकता है जहां उन्हें किसी दिए गए उपयोगकर्ता से संबंधित होना चाहिए, जिसमें या तो एक ही नाम या एक ही यूआईडी नहीं है जो मेरे उपयोगकर्ता के रूप में है मेरा पर्सनल कंप्यूटर।

मुझे लगता है कि rsync के आदमी पृष्ठ पर नहीं मिल सकता है ...

दोनों स्थानीय और दूरस्थ मशीन (Ubuntu स्थानीय, सेंटो रिमोट) पर लिनक्स

कमांड मैंने कोशिश की: rsync -avz / path / to / local root@myhost.com: / path / to / रिमोट


1
कृपया अपने ओएस को हमेशा शामिल करें। समाधान बहुत बार उपयोग किए जा रहे ऑपरेटिंग सिस्टम पर निर्भर करते हैं। क्या आप विंडोज, लिनक्स, यूनिक्स, ओएसएक्स, बीएसडी का उपयोग कर रहे हैं? कौन सा संस्करण?
टेराडॉन

जवाबों:


21

Rsync संस्करण 3.1.0 ने उस उद्देश्य के लिए सटीक रूप से विकल्प --usermapऔर --groupmapविकल्प पेश किए । मैन पेज देखें ।


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

संस्करण नोट: Ubuntu v16.04 में v3.1.1, CentOS 7 में v3.1.2 है, लेकिन CentOS 6 में v3.0.6 है। नए डिस्ट्रोस के लिए यह बढ़िया काम करता है।
जिम्प

4

Rsync का अंतिम संस्करण (कम से कम 3.1.1) आपको "दूरस्थ स्वामित्व" को निर्दिष्ट करने की अनुमति देता है:

--usermap=tom:www-data

Www-data (उर्फ PHP / Nginx) के लिए टॉम का स्वामित्व बदलता है। यदि आप क्लाइंट के रूप में मैक का उपयोग कर रहे हैं, तो पिछले संस्करण में अपग्रेड करने के लिए काढ़ा का उपयोग करें। और अपने सर्वर पर, संग्रह स्रोतों को डाउनलोड करें, फिर इसे "बनाओ"!


मेरे लिए यह --chown = tom: www-data
Federico Galli

0

यदि आप उपयोगकर्ताओं के लिए फ़ाइलों के स्वामित्व को बदलना चाहते हैं, तो आपको पहले गंतव्य बॉक्स पर रूट करना होगा।

मुझे नहीं लगता कि rsync द्वारा एकीकृत ऐसी कोई सुविधा है, लेकिन आप findअपने rsync करने के बाद इसे चलाकर प्राप्त कर सकते हैं ।

हो सकता है, इस तरह से एक कमांड चाल करेगा: उदाहरण के लिए, यूआईडी 1000 => 505 और यूआईडी 1001 => 700 से अनुवाद करें:

find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;

यदि आपके पास कई उपयोगकर्ता हैं, तो आप अपनी पूर्वगामी भाषा में, मानचित्रण के साथ लूप का उपयोग करने पर विचार कर सकते हैं।

मज़े करो।


ठीक है तो वहाँ rsync करने का एक तरीका नहीं है कि ऐसा करें। अचरज की बात है, यह मेरे लिए एक ऐसी स्पष्ट आवश्यकता थी।
मैटवो

1
यदि आप इसका उपयोग करते हैं तो @matteo सावधान रहें। अगर रिमोट मशीन पर आईडी 1000 या 1001 के साथ कोई उपयोगकर्ता है, तो ऐसी फाइलें हो सकती हैं जो दूरस्थ स्थानों में उनके द्वारा वैध रूप से स्वामित्व में हैं और उन्हें धोखा देने से समस्या हो सकती है।
टेराडॉन

@terdon दूरस्थ मशीन पर नाम के बिना कोई उपयोगकर्ता कैसे होगा? (क्योंकि अगर आईडी नाम जब फ़ाइलें सूचीबद्ध हैं के बजाय दिखाया गया है, इसका मतलब है उपयोगकर्ता सही एक नाम नहीं है,?)
Matteo

1
@matteo नहीं, प्रत्येक उपयोगकर्ता के नाम के साथ-साथ एक उपयोगकर्ता आईडी है। अधिकांश डेबियन आधारित प्रणालियों (और शायद अन्य) में पहला, डिफ़ॉल्ट उपयोगकर्ता 1000 उपयोगकर्ता है। idदेखने के लिए अपने मशीन पर चलने का प्रयास करें । इसलिए, यदि आप इस तरह से आईडी का उपयोग करते हैं, तो आप मान रहे हैं कि रिमोट मशीन पर एक ही आईडी वाला कोई उपयोगकर्ता नहीं है और संभवतः यह सच नहीं है।
टेराडॉन

मेरे मामले में सर्वर पर यूआईडी 1000 के साथ कोई उपयोगकर्ता नहीं है, कम से कम यह / etc / passwd में सूचीबद्ध नहीं है। जिसे मैंने अनुमान लगाया था क्योंकि जब मैं "ls -la" के साथ फाइलों को सूचीबद्ध करता हूं, तो 1000 से संबंधित फाइलें (जो मेरे स्थानीय मशीन से rsync -avz का परिणाम थीं, जहां उपयोगकर्ता 1000 मेरा डिफ़ॉल्ट उपयोगकर्ता "टीओ" है) "1000" के साथ दिखाएगा “मालिक के रूप में। यदि उस आईडी के साथ एक उपयोगकर्ता था, और उसका नाम था, "किसी को" कहें, तो फ़ाइलों के मालिक को ls के आउटपुट में "किसी" के रूप में दिखाया जाएगा, है ना? वैसे भी यह ध्यान में रखने के लिए एक उपयोगी चेतावनी है, धन्यवाद।
मैटियो

-1

मुझे यकीन नहीं है कि मैं समझता हूं, कनेक्ट करने के लिए sshआपको उपयोगकर्ता नाम प्रदान करने की आवश्यकता है। वह उपयोगकर्ता नाम रिमोट मशीन पर उपयोगकर्ता W होगा जो समूह Z से संबंधित है। इसलिए, सब कुछ ठीक उसी तरह स्थानांतरित किया जाएगा जैसा आप चाहते हैं:

rsync /path/to/local userX@remote.com/path/to/remote

ओपी की टिप्पणी के जवाब में ईडीआईटी।

यदि आप इस उपयोगकर्ता की मैपिंग करना चाहते हैं और अनुमतियाँ नहीं खोना चाहते हैं, तो उपयोग न करें -a। सबसे पहले, mywww@myhost.comसही उपयोगकर्ता नाम पाने के लिए rsync चलाएं । फिर, इसके बजाय -aआप स्वामित्व को संरक्षित करने का कारण बनेंगे, मैन्युअल रूप से विकल्पों को निर्दिष्ट करें। से man rsync:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    -r, --recursive             recurse into directories
    -l, --links                 copy symlinks as symlinks
    -p, --perms                 preserve permissions
    -t, --times                 preserve modification times
    -g, --group                 preserve group
    -o, --owner                 preserve owner (super-user only)
    -D                          same as --devices --specials

तो, -aउपरोक्त सभी विकल्पों को सक्रिय करता है लेकिन आप समूह या स्वामी को संरक्षित नहीं करना चाहते हैं। इस कमांड को वही करना चाहिए जो आप चाहते हैं:

rsync -rlptDvz /path/to/local mywww@myhost.com:/path/to/remote

चूंकि अब आप mywwwस्वामी के रूप में लॉग इन कर रहे हैं और अब मालिक / समूह की जानकारी को संरक्षित नहीं कर रहे हैं , इसलिए बनाई गई प्रतियां उपयोगकर्ता की rsyncहोंगी mywww


नहीं, मैं rsync -avz / path / to / local root@myhost.com: / path / to / रिमोट करता हूं। मेरा सवाल यह है कि, मुझे अपने स्थानीय मशीन पर उपयोगकर्ता "x" से संबंधित फाइलें कैसे प्राप्त हो सकती हैं ताकि सर्वर पर उपयोगकर्ता "w" का रीमैप किया जा सके? मेरे कंप्यूटर पर, मेरी फाइलें "टीओ" से संबंधित हैं। सर्वर पर "टेओ" नामक एक उपयोगकर्ता भी नहीं है, मुझे उपयोगकर्ता को वह होना चाहिए जो एपाचे का उपयोग करता है, "डब्ल्यूडब्ल्यूडब्ल्यू" कहो; और समूह के लिए समान। डिफ़ॉल्ट रूप से, rsync मालिक को "teo" के रूप में संरक्षित करने का प्रयास करेगा, और चूंकि ऐसा कोई उपयोगकर्ता नहीं है, इसलिए यह UID को संरक्षित करेगा, जिसके परिणामस्वरूप उपयोगकर्ता "1000" से संबंधित फाइलें होगी जो सर्वर पर एक नॉनक्सिस्टिंग उपयोगकर्ता है
मैट

Btw, एक ही समय में मुझे फ़ाइल अनुमतियों को संरक्षित करने की आवश्यकता है जो यह पहले से ही -a विकल्प के अनुसार करता है। मेरा मतलब है, कोई भी समाधान जो मुझे फ़ाइल अनुमतियों को संरक्षित करने की क्षमता को ढीला कर देगा (यानी एक 777 फ़ाइल एक 777 और एक 600 एक 600 रहते हैं) चाल नहीं
चलेगी

@matteo ऐसा इसलिए है क्योंकि -aसंरक्षित स्वामी और समूह विकल्पों को सक्षम करता है। देखिये मेरा अपडेटेड जवाब।
टेराडॉन

1
@matteo कृपया यह बताएं कि प्रश्न पूछने पर आपको वास्तव में क्या चाहिए। इस तरह हम अधूरे उत्तर प्रदान करने में समय बर्बाद नहीं करते हैं। अगली बार, मुझे याद रखें) आपके द्वारा उपयोग की जाने वाली वास्तविक कमांड शामिल हैं (rsync डिफ़ॉल्ट रूप से कुछ भी संरक्षित नहीं करता है, आपके उपयोग ने -aऐसा किया है) ii) स्पष्ट रूप से आपके पास मौजूद सभी बाधाओं को स्पष्ट रूप से समझाता है, आपने अपनी अंतिम टिप्पणी और iii तक केवल एक ही उपयोगकर्ता का उल्लेख किया है ) अपने ओएस का उल्लेख करें। वैसे भी, इसके साथ ऐसा करने का तरीका rsyncफ़ाइलों के एक सेट mywww@remoteऔर अगले सेट के रूप में कॉपी करना होगा root@remote
टेराडॉन

1
@matteo जो वास्तव में स्पष्ट नहीं था वह यह था कि आप -aस्वामित्व का संरक्षण कर रहे थे । आपके द्वारा दिए गए उदाहरणों से आपको केवल एक उपयोगकर्ता के लिए ऐसा करने की आवश्यकता है। वैसे भी, मैं आपको उपयोग करने की सलाह rsyncदूंगा, बस उन विभिन्न फाइलों की सूची बनायें जिन्हें आप प्रत्येक उपयोगकर्ता के लिए कॉपी करना चाहते हैं और संबंधित उपयोगकर्ता नाम के साथ रिमोट मशीन से जुड़ने वाले कई rsyncs चलाना चाहते हैं। यह सरल और सुरक्षित होगा।
टेराडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.