Dropbox'ta sahiplik ve izinler nasıl korunur?


9

Dropbox kullanımı arasında belirli bir dosyayı senkronize tutmaya çalıştığım iki makinem, Mac ve Linux çalıştıran bir bilgisayarım var.

Senkronize ettiğim dosyalardan birinin, başka bir kullanıcı tarafından (aynı makinedeki farklı UID, başka bir dropbox kullanıcısına atıfta bulunmadan) yazılabilir olması gerekiyor. Daha spesifik olmak gerekirse, bu diğer UID aslında bir daemon. Bu nedenle, dosyanın o diğer kullanıcıya ait olması gerekir, aksi takdirde "grup" ve / veya "diğer" için yazma izni gerekir. Başlangıçta her iki makinede de bu şekilde ayarladım. Ayrıca, dosyayı içeren dizin, dosyaya yazma erişimine sahip olması gereken kullanıcının zaten sahip olduğu (chmod 777).

Ancak, dosya bir kutudan diğerine senkronize edildiğinde, Dropbox'ın her iki izin kümesini tamamen yok saydığı ve yeni güncellenen dosyaya ait izinleri 0644 (rw, benim için r) ). Eğer dosya bana ait değilse kendime aitliği bile değiştirebilir! Sonuç olarak, el ile girip dosyayı yeniden değiştirene kadar diğer kullanıcının artık yazma izinleri yoktur.

Denediğim ve denemediğim ek şeyler:

  1. her iki makinedeki kullanıcı hesabının ("diğer kullanıcı için") aynı UID'ye sahip olduğundan emin olun. Birincil hesabım her iki makinede de aynı UID'ye sahip olmadığından bunun neden gerekli olduğundan emin değilim.

  2. chmod u+s <dir>ve chmod g+s <dir>söz konusu dosyayı içeren dizin nerede.

  3. dosyanın sahipliğini diğer kullanıcıya değiştirme ve Dropbox dizininin dışına yerleştirme ve Dropbox dizinindeki dosyaya bir sembolik bağlantı oluşturma. Dropbox aslında symlink'i siler, orijinal dosyayı (Dropbox dizininin dışında) değiştirmeden bırakır ve symlink'in eskiden olduğu yerde yeni bir kopyasını oluşturur!

İzinleri ve / veya sahipliğimin korunması için işleri nasıl ayarlayabilirim?

Yanıtlar:


5

Tamam, işte bulduğum çözüm. Bunun Dropbox'ın gelecekteki sürümleriyle çalışıp çalışmayacağı belirsizdir. Sorunu daha da çözmeyi denemek için Dropbox ile bir hizmet isteği açtım.

Genel olarak, çözüm iki şeyin birleşimidir:

  1. Dropbox işlemi için umask'ı yeni oluşturulan dosyaların 0660 izinleri olacak şekilde ayarlamak. Bu kullanıcı okuma / yazma, grup okuma / yazma, diğer hiçbiri.
  2. Yeni oluşturulan dosyalar için grubu, söz konusu dosyalara yazma erişimi olması gereken gruba ayarlama.

Bu çözüm, yalnızca tek bir dosya için değil, Dropbox klasöründeki tüm dosyalar için geçerli olacaktır. Benim durumumda bu kabul edilebilir.

Linux altında, /etc/init.d/dropboxbaşlangıç ​​betiğini, dropbox'ı bir daemon olarak çağıran satırın okuyacağı şekilde değiştiriyorum :

HOME="$HOMEDIR" start-stop-daemon --umask 0006 -b -o -c $dbuser:$dbgrp -S -u $dbuser -x $HOMEDIR/$DAEMON

Ekleme --umask 0006izin maskesini ayar yerine getirilir :$dbgrp-c seçeneği kısmını cin ait olduğu grubun ayarını yapar.

Mac tarafında, aşağıdaki komutları çalıştırıyorum:

ps aux | grep -i dropbox

Buradan Dropbox'ı başlatan komut satırı seçeneklerini görebilir ve bundan sonra daha sonra kullanılan $ mydropboxid'i ayıklayabilirim. Sonra Dropbox'tan çıkıp bir komut istemi açıp aşağıdaki komutları giriyorum:

umask 0006
/Applications/Dropbox.app/Contents/MacOS/Dropbox -psn_0_$mydropboxid &
exit

Yukarıdaki komutları bir noktada otomatikleştirmeyi planlıyorum, böylece makinem yeniden başlatıldığında bunları yeniden çalıştırmam gerekmeyecek.

Bu, yeni oluşturulan dosyalar için maskeyi ayarlayarak, bir grup için yazma erişimine sahip olmasını sağlar. Ancak, grup doğru ayarlamak için Dropbox önbellek dizini setgid gerekir - bu şimdiye kadar sadece bir kez yapılması gerekiyordu:

sudo chgrp -R $dbgrp ~/Dropbox/.dropbox.cache
sudo chmod -R g+s ~/Dropbox/.dropbox.cache

Tüm yeni dosyaların ilk olarak ~ / Dropbox / .dropbox.cache dizini altında oluşturulduğu anlaşılmaktadır, bu nedenle yukarıdaki komutlar bu yeni dosyalara Dropbox tarafından oluşturulan yeni dosyaların doğru gruba sahip olduğu uygun sahipliği ve izinleri verir.


İlginç. Bu satırın ve genel olarak değiştirilen dosyanın ne yaptığını biraz daha açıklayabilir misiniz?
nixda

Start-stop-daemon, bir daemonun çalıştığı çeşitli ayarları kontrol etmenizi sağlayan bir Linux yardımcı programıdır. Parametrelerin çoğu kabuk değişkenlerinde geçirilir. Önemli değişiklikler, kullanıcı ve grup için R / W izni bırakan ancak diğerleri için kaldıran "--umask 0006" ve -c parametresine grup parametresinin (": $ dbgrp") eklenmesidir. arka plan sürecinin çalıştığı UID / GID değerini ayarlar). Mac komutu benzer, ancak benzer bir yardımcı program bulamadım, bu yüzden bu ayarları Dropbox çalıştıran kabukta ayarlamaya dayanır.
Michael

Bu, geçerli dropbox sürümü için de geçerli mi? Dropboxd betiğim ./.dropbox-dist/ PAR=$(dirname $(readlink -f $0)) OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH LD_LIBRARY_PATH=$PAR${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH exec $PAR/dropbox $@adresinde bulunur ve sağlanan python betiği ile yönetilir
bisiklet

@bicycle Bu çözümü bulduğumdan beri dropbox istemcimi güncellemem istendi.
Michael

@Michael, Dropbox hizmet talebinize hiç yanıt verdi mi?
bbozo

0

Dosyayı iki bilgisayar arasında kopyalarsanız, kopyalamayı yapan yazılım kopyada izinlerin ne olduğuna karar verir. Yaptığınız şey için, oldukça ayrıntılı bir izin eşlemesine ihtiyacınız var. Dropbox izin eşleme özellikleri, her iki sistem de aynı işletim sistemini çalıştırıyorsa izinleri korumakla sınırlıdır . İki farklı işletim sistemi arasında kopyalama için belirli bir sonuç garanti edilmez.

Dropbox'ı istediğiniz gibi kullanmanın bir yolunu bulsanız bile, ona güvenmemenizi tavsiye ederim. Belgelenmemiş yazılım garipliklerinin bildirimde bulunulmaksızın ortadan kaybolma yolları vardır. Kullanım durumunuz göz önünde bulundurularak tasarlanan dosya aktarım araçlarına bakmanız gerekir. İlk tercihim Linux dağıtımlarında standart olan ve özellikle Cygwin'iniz varsa Windows'a kurulumu kolay olan rsync olacaktır . Cygwin genellikle hem Windows hem de Linux ile çalışmak zorunda olanlar için kullanışlıdır!

Tabii ki, rsync doğrudan bağlantı gerektirir - Dropbox'ın sağladığı gibi merkezi bir sunucu yoktur. Bununla nasıl başa çıkacağınız ağ kurulumunuzun ayrıntılarına bağlıdır.


Evet, tuhaflıklar hakkında söylediklerinize katılıyorum. Aklımda bu, yazılımı yükseltmeyi durdurmak için genellikle iyi bir neden - eğer istediğinizi yaparsa, neden yeni sürümlerin bunu kırma riskini alıyorsunuz!
Michael

rsync iki yönlü değildir ve dosyada her değişiklik yapıldığında otomatik olarak güncellenmez.
Michael

@Michael Yazılımı yükseltme konusunda her zaman bir seçeneğiniz yoktur; bulut tabanlı olduğunda (Dropbox gibi) asla bir seçeneğiniz olmaz. Ve çift yönlü veya otomatik kopyanın neden yapmaya çalıştığınız için önemli olduğunu görmek zor.
Isaac Rabinovitch

Hizmet önceki istemciyle geriye dönük olarak uyumlu kaldığı sürece bir seçeneğiniz vardır. Ve Dropbox herkesi hemen yükseltmeye zorlayamazsa, eski istemcileri kıracak protokolde düşük seviye değişiklik yapmak gibi bir şey yapabileceğinden şüpheliyim. Bunu yapabileceklerini görebilmemin tek yolu bir çeşit geçiş.
Michael

Ne yapmaya çalıştığımla ilgili olarak, iki farklı makinede bir dosya kümesi tutmaya ve herhangi bir zamanda herhangi birini değiştirebilmeye, sonra kısa bir süre sonra diğerine atlamaya ve almaya çalışıyorum. burada rsync başlatmak gibi bir şey yapmak zorunda kalmadan bıraktım. Bu temelde değişikliği uzaktan yapabileceğim için (örneğin bir web arayüzü üzerinden) ve verilerin tek bir merkezi kopyasını tutmayı zorlaştıran güvenlik duvarları ve gecikme gibi sorunlar var.
Michael
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.