Cara yang baik dan mudah untuk berbagi file di mesin lokal

13

Saya ingin memiliki direktori yang memiliki properti berikut:

  • Banyak pengguna dapat menyalin file ke dalamnya
  • File-file ini dapat dihapus / diubah oleh pengguna ini (pengguna A dapat menghapus / memodifikasi file yang disalin ke direktori ini)

itu tidak dapat dilakukan dengan menggunakan izin file normal (karena izin dipertahankan pada salinan).

Inilah yang saya temukan di internet:

Beberapa kasus penggunaan:

  • Berbagi musik di mesin lokal
  • Berbagi repositori git yang sederhana (hanya membuat repositori kosong dapat ditulisi oleh banyak orang) --- saya tahu bahwa ada solusi seperti gitosis
  • Izinkan banyak pengembang untuk memodifikasi contoh aplikasi php tanpa memberi mereka root (saya kira mereka akan menyalin file) --- Saya memimpin tim pengembang junior nirlaba dan saya harus membuat yang sederhana!

EDIT

Pengaturan AFAIK bit SGID tidak enugh, itu hanya mempengaruhi file yang baru dibuat --- dan alur kerja dasar untuk kasus-kasus penggunaan ini menyalin ivnolves dan operasi lainnya (yang memisahkan gid file tidak berubah)

jb.
sumber

Jawaban:

9

Daftar kontrol akses

Jawaban langsungnya adalah daftar kontrol akses (ACL) . Ya, Anda dapat menemukan contoh tandingan, tetapi dalam praktiknya cukup baik (tidak seperti kemampuan menulis grup yang mengharuskan pengguna memikirkannya setiap saat). Yang mereka perlukan adalah administrator sistem (root) mendefinisikan grup, jika Anda ingin file hanya dibagikan oleh grup yang bernama (root dapat memilih untuk mendelegasikan, misalnya dengan menerima grup dari LDAP, tapi itu cerita lain).

Anda perlu pengguna yang berpartisipasi untuk memiliki umask 022. Jika mereka membuat file yang tidak dapat dibaca dunia secara rutin, skema ini tidak akan berfungsi. Tetapi jika mereka memiliki batasan umask, itu mungkin karena mereka toh tidak ingin berbagi file.

Mengaktifkan ACL

Ubuntu tidak mengaktifkan ACL secara default, jadi ada persyaratan admin satu kali. Edit /etc/fstabmenggunakan editor favorit Anda, dan ubah setiap baris yang berkaitan dengan sistem file tempat Anda ingin berbagi file: tambahkan aclke opsi. (Pastikan untuk tidak mengubah baris lain, dan tidak menggunakan editor yang membungkus baris panjang.) Berikut ini contoh baris dengan aclopsi yang ditambahkan:

UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5  /  ext4  errors=remount-ro,acl  0 1

Agar opsi berlaku pertama kali, gunakan perintah seperti berikut (untuk setiap sistem file):

sudo mount -o remount,acl /

Instal alat ACL dari aclpaket.

Menyiapkan direktori bersama

Agar file dibagikan oleh grup mygroup:

setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root

Jika orang membuat file dan menyalinnya ke direktori bersama, file tersebut akan dapat dibaca oleh dunia (karena umask) dan siapa pun dalam grup dapat menambah dan menghapus file (karena grup dapat ditulis kelompok). Orang tidak dapat mengedit file satu sama lain, tetapi itu adalah hal yang baik atau Anda akan langsung mengalami konflik pengeditan.

Jika Anda tidak memiliki grup unix, Anda dapat menambahkan pengguna satu per satu:

setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root

Kontrol versi

Jika Anda ingin orang dapat mengedit file di tempat, Anda juga perlu sesuatu untuk mencegah konflik pengeditan. Itu kontrol versi.

Anda tidak memerlukan semua ini untuk berbagi repositori git. Anda tahu ada solusi seperti gitosis, jadi gunakanlah.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
ACL akan bekerja dengan sempurna jika pewarisan otomatis tidak rusak oleh cp (dan mv?) Yang membuang (mengabaikan) acl default yang ditetapkan pada level direktori target.
Bermanfaat
2

Cukup lakukan ini:

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

Sekarang semua orang di teamAgrup dapat membuat semuanya di dalam/src/teamA

Ajaibnya adalah bit sgid (set group id) pada direktori.

shellholic
sumber
AFAIK tidak akan berfungsi, lihat posting terbaru
jb.
1

Jika Anda ingin pengguna dapat mengakses file dalam folder bersama (misalnya, orang yang berbeda masuk ke mesin yang sama pada waktu yang berbeda dan perlu akses ke file yang sama), Anda dapat menggunakan bindfsuntuk membuat direktori bersama.

Ini memungkinkan banyak pengguna lokal untuk membaca dan menulis (membuat, menghapus, mengganti nama, memodifikasi ...) semua file (termasuk yang baru dibuat) dari direktori bersama dan subdirektori. Setiap pengguna akan melihat file dan folder (termasuk yang baru dibuat) sebagai milik mereka.

Secara singkat, Anda berlari

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

untuk membuat / home / shared tersedia untuk user1, user2 dan user3.

Instruksi

Lihat Bindfs-SharedDirectoryLocalUsers (dokumentasi Ubuntu) untuk instruksi lengkap, termasuk mengaturnya secara permanen (setiap kali Anda menyalakan komputer). Saya menggunakan ini di komputer saya sendiri untuk sejumlah direktori, masing-masing dengan grup berbagi yang berbeda (satu folder tersedia untuk semua akun, yang lain hanya untuk akun kerja, yang lain hanya untuk akun pribadi).

Dari pos:

bindfs adalah sistem file FUSE untuk memasang direktori ke lokasi lain (mountpoint), dengan pengaturan izin. Ini memungkinkan Anda untuk menentukan kepemilikan dan izin file dari dalam mountpoint.

...

Manfaat utama adalah bahwa file baru yang dibuat di direktori bersama akan mewarisi kepemilikan & izin.

Daftar kontrol akses (ACL)

Catatan dokumentasi:

Jika Anda ingin mengatur izin yang lebih lanjut untuk berbagai pengguna dan / atau kelompok, cobalah Daftar Kontrol Akses .

Lihat jawaban Gilles untuk detail lebih lanjut.

david.libremone
sumber
jika Anda kesulitan menambahkan bindf di oneiric, Anda bisa mendapatkan paket yang dibuat pengguna di sini bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone
-3

Anda dapat menggabungkan solusi shellholic dengan pekerjaan cron yang memperbarui gid untuk semua file di folder itu setiap 15 detik atau yang serupa.

David Oneill
sumber