Rsync'de keyfi olarak kullanıcı / grup sahiplikleri nasıl eşleştirilir


17

Kaynak (yerel) makinedeki X kullanıcısı ve Y grubuna ait tüm dosyaların hedef (uzak) makinedeki kullanıcı W ve Z grubuna eşlenmesi için uzak bir sunucuya bir dizin rsync gerekir. Mümkünse taşıma olarak ssh kullanarak, ancak rsync arka plan programı kullanmam gerekirse de gayet iyi.

Bunu yapmanın bir yolu var mı? Gibi rasgele bir kullanıcı / grup haritası oluşturmak için bir yol arıyorum

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

Bu oldukça yaygın bir kullanım örneği olmalı, değil mi? Örneğin, yerel bilgisayarımda kullanıcı adımın X olduğu dosyalar var ve bunları, kullanıcıyla aynı ada veya aynı UID'ye sahip olmayan belirli bir kullanıcıya ait olmaları gereken bir web sunucusuna yüklemem gerekiyor. kişisel bilgisayarım.

Bunu rsync'in adam sayfasında bulamıyorum ...

Hem yerel hem de uzak makinede LINUX (Ubuntu yerel, centOS uzaktan kumanda)

Denediğim komut: rsync -avz / path / to / local root@myhost.com: / path / to / remote


1
Lütfen daima işletim sisteminizi ekleyin. Çözümler sıklıkla kullanılan İşletim Sistemine bağlıdır. Windows, Linux, Unix, OSX, BSD mi kullanıyorsunuz? Hangi versiyon?
terdon

Yanıtlar:


21

Rsync sürüm 3.1.0--usermap ve --groupmapbu amaç için seçenekleri tam olarak tanıttı . Kılavuz sayfasına bakınız .


Bunu bilmek güzel. Bunun için kesinlikle bir kullanım senaryosu var. Örneğin, iki Icinga sunucum var ve yapılandırma dosyalarının master'dan slave'e tek yönlü senkronizasyonunu yapmam gerekiyor. Ancak efendideki icinga, köle üzerindeki icinga'dan farklı bir uid. Yani, bilmek iyi rsync bunu halledebilir.
Michael Martinez

Sürüm notları: Ubuntu v16.04'te v3.1.1, CentOS 7'de v3.1.2, ancak CentOS 6'da v3.0.6 vardır. Bu, yeni dağıtımlar için harika çalışıyor.
jimp

4

Rsync'in son sürümü (en az 3.1.1) "uzaktan sahiplik" seçeneğini belirtmenize olanak tanır:

--usermap=tom:www-data

Tom sahipliğini www-verisine değiştirir (PHP / Nginx olarak da bilinir). İstemci olarak Mac kullanıyorsanız, son sürüme yükseltmek için demlemek kullanın. Ve sunucunuzda, arşiv kaynaklarını indirin, sonra "yapın"!


benim için çalışıyor - chown = tom: www-data
Federico Galli

0

Dosyaların sahipliğini rastgele kullanıcılar olarak değiştirmek istiyorsanız, önce hedef kutusunda kök olmanız gerekir.

Ben rsync ile entegre böyle bir özellik olduğunu sanmıyorum, ama rsync findyaptıktan sonra bir çalıştırarak elde edebilirsiniz.

Belki, böyle bir komut işinizi görecektir: Örneğin, UID 1000 => 505 ve UID 1001 => 700'den çeviri yapın:

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

Çok sayıda kullanıcınız varsa, tercih dilinizde eşlemeli bir döngü kullanmayı düşünebilirsiniz.

İyi eğlenceler.


Tamam, rsync'in bunu yapmasının bir yolu yok. Şaşırtıcı, bana çok bariz bir ihtiyaç gibi geldi.
matteo

1
@matteo bunu kullanırsanız dikkatli olun. Uzak makinede 1000 veya 1001 numaralı bir kullanıcı varsa, uzak konumlarda yasal olarak sahip oldukları dosyalar olabilir ve bunları seçmek sorunlara neden olabilir.
terdon

@terdon Uzak makinede adı olmayan bir kullanıcı nasıl olurdu? (çünkü dosyalar listelendiğinde ad yerine kimlik gösteriliyorsa, kullanıcının bir adı olmadığı anlamına gelir, değil mi?)
matteo

1
@matteo no, her kullanıcının bir adının yanı sıra bir kullanıcı kimliği vardır. Çoğu Debian tabanlı sistemde (ve muhtemelen diğerlerinde) ilk varsayılan kullanıcı 1000 kullanıcısıdır id. Görmek için makinenizde çalıştırmayı deneyin . Bu nedenle, bu gibi kimlikleri kullanırsanız, uzak makinede aynı kimliğe sahip bir kullanıcı olmadığını ve bunun muhtemelen doğru olmadığını varsayarsınız.
terdon

benim durumumda sunucuda UID 1000 olan bir kullanıcı yok, en azından / etc / passwd içinde listelenmiyor. "Ls -la" ile dosyaları listelediğimde, 1000'e ait dosyalar (1000 kullanıcısı benim varsayılan kullanıcı "teo" olan yerel makinemden rsync -avz sonucuydu) "1000 ile gösterilen dosyaları tahmin ediyorum "sahibi olarak. Bu kimliğe sahip bir kullanıcı varsa ve adı "Birisi" ise, dosyaların sahibi ls çıktısında "Birisi" olarak gösterilirdi, değil mi? Her neyse, bu dikkate almak için yararlı bir uyarı, teşekkürler.
matteo

-1

Anladığımdan emin değilim, üzerinden bağlanmak sshiçin bir kullanıcı adı sağlamanız gerekiyor. Bu kullanıcı adı uzak makinede Z grubuna ait W kullanıcısı olacaktır. Bu nedenle, her şey tam olarak istediğiniz gibi aktarılacaktır:

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

OP'nin yorumuna yanıt olarak DÜZENLE.

Bu kullanıcı eşlemesini yapmak ve izin ayarlarını kaybetmek istemiyorsanız, kullanmayın -a. İlk olarak, mywww@myhost.comdoğru kullanıcı adını almak için rsync'i çalıştırın . Ardından, -asahipliğini korumanıza neden olacak seçenekleri manuel olarak belirtin. Gönderen 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

Bu nedenle, -ayukarıdaki seçeneklerin tümünü etkinleştirir , ancak grubu veya sahibi korumak istemezsiniz. Bu komut istediğinizi yapmalıdır:

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

Şu anda mywwwsahip / grup bilgisi olarak oturum açtığınızdan ve artık saklamadığınızdan, tarafından yapılan kopyalar kullanıcıya rsyncait olacaktır mywww.


Hayır, rsync -avz / path / to / local root@myhost.com: / path / to / remote komutunu kullanıyorum. Sorum şu: Yerel makinemdeki "x" kullanıcısına ait dosyaların sunucudaki "w" kullanıcısına yeniden eşlenmesini nasıl sağlayabilirim? Bilgisayarımda dosyalarım "teo" a ait. Sunucuda bile "teo" adlı bir kullanıcı yok, ben apache "mywww" demek kullanıcı olmak için kullanıcıya ihtiyacım var; ve aynı şey grup için de geçerli. Varsayılan olarak, rsync sahibini "teo" olarak korumaya çalışacak ve böyle bir kullanıcı olmadığından, UID'yi koruyacak ve sunucuda varolmayan bir kullanıcı olan "1000" kullanıcısına ait dosyalarla sonuçlanacak
matteo

Btw, aynı zamanda zaten -a seçeneğine göre yaptığı dosya izinlerini korumam gerekiyor. Demek istediğim, beni dosya izinlerini koruma yeteneğini kaybettirecek bir çözüm (yani 777 dosya 777 ve 600 600 kaldı) hile yapmayacak
matteo

@matteo, bu nedenle -asahibi ve grubu koru seçeneklerini etkinleştirir. Güncellenmiş cevabımı görün.
terdon

1
@matteo lütfen soru sorduğunuzda aslında neye ihtiyacınız olduğunu açıklayın. Bu şekilde eksik cevaplar vermek için zaman kaybetmeyiz. Bir dahaki sefere i) kullandığınız gerçek komutları dahil etmeyi unutmayın (rsync varsayılan olarak hiçbir şeyi korumaz, -abunu kullandınız) ii) sahip olduğunuz tüm kısıtlamaları açıkça açıklayın, son yorumunuza kadar tek bir kullanıcıdan bahsettiniz ve iii ) işletim sisteminizden bahsedin. Her neyse, bunu yapmanın yolu rsyncbir dosya grubunu mywww@remoteve bir sonraki seti olarak kopyalamak olacaktır root@remote.
terdon

1
@matteo gerçekten açık olmayan şey, -asahipliğini koruyan kullanıyordunuz . Verdiğiniz örnekler bunu yalnızca bir kullanıcı için yapmanız gerektiğini önerdi. Her neyse, kullanmanızı tavsiye ederim rsync, her kullanıcı için kopyalamak istediğiniz farklı dosyaların bir listesini yapın ve uzaktaki makineye ilgili kullanıcı adıyla bağlanan birden fazla rsyncs çalıştırın. Bu daha basit ve daha güvenli olacak.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.