Bagaimana cara mempertahankan kepemilikan dan izin di Dropbox?

9

Saya memiliki dua mesin, Mac dan PC yang menjalankan Linux, yang saya coba untuk menyinkronkan file tertentu antara menggunakan Dropbox.

Salah satu file yang saya selaraskan harus dapat ditulis oleh pengguna lain (UID yang berbeda pada mesin yang sama, tidak mengacu pada pengguna dropbox lain) selain saya sendiri. Untuk lebih spesifik, UID lain ini sebenarnya adalah daemon. Jadi, file tersebut harus dimiliki oleh pengguna lain itu, atau izin menulis diperlukan untuk "grup" dan / atau "lainnya". Awalnya saya telah mengaturnya dengan cara ini di kedua mesin. Selain itu, direktori yang berisi file sudah dimiliki (chmod 777) oleh pengguna yang perlu memiliki akses tulis ke file.

Namun, setiap kali file disinkronkan dari satu kotak ke kotak lain, tampaknya Dropbox sepenuhnya mengabaikan kedua set izin, dan mengubah izin pada file yang baru diperbarui untuk dimiliki oleh saya dengan izin 0644 (rw untuk saya, r untuk semua orang lain ). Jika file itu bukan milik saya, itu bahkan mengubah kepemilikan kembali ke saya sendiri! Akibatnya, pengguna lain tidak lagi memiliki izin menulis hingga saya masuk dan melakukan chmod file secara manual.

Hal-hal tambahan yang saya coba tidak berhasil:

  1. memastikan akun pengguna (untuk "pengguna lain") di kedua mesin memiliki UID yang sama. Tidak yakin mengapa ini perlu, karena akun utama saya tidak memiliki UID yang sama di kedua mesin.

  2. chmod u+s <dir> dan chmod g+s <dir> di mana direktori berisi file yang dimaksud.

  3. mengubah kepemilikan file ke pengguna lain dan menempatkannya di luar direktori Dropbox, dan membuat symlink ke file di direktori Dropbox. Dropbox sebenarnya menghapus symlink, membiarkan file asli (di luar direktori Dropbox) tidak berubah, dan membuat salinan baru file di mana symlink dulu!

Bagaimana saya bisa mengatur semuanya agar izin dan / atau kepemilikan saya dipertahankan?

Michael
sumber

Jawaban:

5

Ok, berikut ini solusinya. Apakah ini akan berfungsi atau tidak dengan versi Dropbox yang akan datang tidak pasti. Saya telah membuka permintaan layanan dengan Dropbox untuk mencoba menyelesaikan masalah lebih lanjut.

Secara keseluruhan, solusinya adalah kombinasi dari dua hal:

  1. Mengatur umask untuk proses Dropbox sehingga file yang baru dibuat memiliki izin 0660. Ini adalah pengguna baca / tulis, baca / tulis grup, tidak ada lainnya.
  2. Mengatur grup untuk file yang baru dibuat ke grup yang perlu memiliki akses tulis ke file yang dimaksud.

Solusi ini akan berlaku untuk semua file di folder Dropbox, bukan hanya satu file. Dalam kasus saya ini dapat diterima.

Di Linux, saya memodifikasi /etc/init.d/dropbox skrip startup sehingga baris yang memanggil dropbox sebagai daemon berbunyi:

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

Menambahkan --umask 0006 menyelesaikan pengaturan umask, dan :$dbgrp bagian dari opsi -c menyelesaikan pengaturan grup yang menjadi milik daemon.

Di sisi Mac, saya menjalankan perintah berikut:

ps aux | grep -i dropbox

Dari sini saya bisa melihat opsi baris perintah yang memulai Dropbox dan dari sini saya mengekstrak $ mydropboxid yang digunakan nanti. Lalu saya keluar dari Dropbox dan membuka prompt perintah dan memasukkan perintah berikut:

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

Saya berencana untuk mengotomatiskan perintah-perintah di atas di beberapa titik sehingga saya tidak perlu menjalankannya lagi setiap kali mesin saya reboot.

Ini menangani pengaturan topeng untuk file yang baru dibuat sehingga grup untuk file memiliki akses tulis. Namun, untuk mendapatkan kelompok yang diatur dengan benar, saya perlu mengatur direktori cache Dropbox - sejauh ini hanya perlu dilakukan sekali:

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

Tampaknya semua file baru pertama kali dibuat di bawah direktori ~ / Dropbox / .dropbox.cache, jadi perintah di atas memberi file baru itu kepemilikan dan izin yang tepat bahwa file baru yang dibuat oleh Dropbox memiliki grup yang benar.

Michael
sumber
Menarik. Bisakah Anda jelaskan sedikit lebih apa yang dilakukan baris ini dan file yang dimodifikasi secara umum?
nixda
Start-stop-daemon adalah utilitas Linux yang memungkinkan Anda mengontrol berbagai pengaturan di mana daemon berjalan. Sebagian besar parameter dilewatkan dalam variabel shell. Modifikasi kunci adalah penambahan "--umask 0006" yang meninggalkan izin R / W untuk pengguna dan grup tetapi menghapusnya untuk orang lain, dan penambahan parameter grup (": $ dbgrp") ke parameter -c, yang set UID / GID proses daemon berjalan sebagai). Perintah Mac serupa, tetapi saya belum menemukan utilitas serupa, jadi andalkan pengaturan pengaturan ini di shell yang menjalankan Dropbox.
Michael
Apakah ini berlaku untuk versi dropbox saat ini juga? Script dropboxd saya adalah 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 $@ dan terletak di ./.dropbox-dist/ dan dikelola melalui skrip python yang disediakan
bicycle
@ sepeda Saya belum diminta untuk memperbarui klien dropbox saya sejak membuat solusi ini.
Michael
@Michael, apakah Dropbox pernah menanggapi permintaan layanan Anda?
bbozo
0

Letakkan file itu di foldernya sendiri dan bagikan folder itu dengan pengguna lain. Dengan cara ini mereka mengedit versi terbaru seperti Anda. Berhati-hatilah untuk tidak mengerjakannya secara bersamaan.

CodeMonkey
sumber
1
Memperbarui pertanyaan awal saya untuk mencerminkan fakta bahwa folder yang berisi file tersebut sudah dimiliki oleh pengguna lain. Tidak ada bedanya, Dropbox masih mengabaikan kepemilikan / izin saat ini dan mengatur ulang setiap kali file disinkronkan ke mesin.
Michael
0

Jika Anda menyalin file di antara dua komputer, perangkat lunak yang melakukan penyalinan memutuskan apa izin pada salinan. Untuk apa yang Anda lakukan, Anda memerlukan pemetaan izin yang cukup halus. Fitur pemetaan izin Dropbox terbatas untuk menjaga izin jika kedua sistem menjalankan OS yang sama . Tidak ada hasil khusus yang dijamin untuk menyalin antara dua OS yang berbeda.

Bahkan jika Anda bisa mencari cara untuk menggunakan Dropbox seperti yang Anda inginkan, saya sarankan agar tidak mengandalkannya. Keanehan perangkat lunak yang tidak berdokumen memiliki cara menghilang tanpa pemberitahuan. Anda perlu melihat alat transfer file yang dirancang dengan menggunakan use case Anda dalam pikiran. Pilihan pertama saya adalah rsync , yang merupakan standar pada distro Linux, dan mudah dipasang pada Windows, terutama jika sudah Cygwin . Dan Cygwin umumnya bermanfaat bagi orang yang harus bekerja dengan Windows dan Linux!

Tentu saja, rsync memerlukan koneksi langsung - tidak ada server pusat seperti yang disediakan Dropbox. Cara Anda mengatasinya tergantung pada detail pengaturan jaringan Anda.

Isaac Rabinovitch
sumber
Ya saya setuju dengan apa yang Anda katakan tentang kebiasaan. Dalam pikiran saya, ini sering menjadi alasan yang bagus untuk berhenti meningkatkan perangkat lunak - jika itu melakukan apa yang Anda inginkan, mengapa harus mengambil risiko versi yang lebih baru?
Michael
rsync bukan dua arah, dan tidak secara otomatis memperbarui setiap kali ada perubahan pada file.
Michael
@Michael Anda tidak selalu punya pilihan untuk memutakhirkan perangkat lunak; ketika itu berbasis cloud (seperti Dropbox) Anda tak pernah punya pilihan. Dan sulit untuk melihat mengapa bi-directionality atau salinan otomatis sangat penting untuk apa yang Anda coba lakukan.
Isaac Rabinovitch
Selama layanan tetap kompatibel dengan klien sebelumnya Anda punya pilihan. Dan kecuali Dropbox dapat memaksa semua orang untuk memutakhirkan segera, saya ragu mereka dapat melakukan sesuatu seperti membuat perubahan tingkat rendah ke protokol yang akan menghancurkan klien lama. Satu-satunya cara saya bisa melihat mereka bisa melakukannya adalah melalui semacam transisi.
Michael
Mengenai apa yang saya coba lakukan, saya mencoba untuk memelihara satu set file pada dua mesin yang berbeda dan dapat memodifikasi salah satu dari mereka pada waktu tertentu, kemudian melompat ke yang lain beberapa saat kemudian dan mengambil tempat saya tinggalkan, tanpa harus melakukan apa pun secara manual seperti memulai rsync. Ini terutama karena saya mungkin melakukan modifikasi dari jarak jauh (mis. Melalui antarmuka web), dan ada masalah seperti firewall dan latensi yang membuatnya tidak nyaman untuk mempertahankan satu salinan data yang terpusat.
Michael