Bisakah saya port izin pengguna di komputer untuk hard drive eksternal ext4?

16

Saya memiliki drive disk USB 3 eksternal (kapasitas 2TB) yang kemungkinan besar akan dipindahkan dari mesin ke mesin. Disk memiliki tabel partisi GUID dan partisi ext4. Saya tidak dapat menulis ke disk kecuali saya meninggikan proses ( sudo).

Sampai sekarang saya berpikir untuk mencoba salah satu atau kedua hal berikut dan ingin mengetahui kekurangan masing-masing -

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Jika saya memberikan 777 izin dan user1 (UID: 1005) menulis kepadanya dan saya kemudian memindahkan disk ke komputer lain di mana user7 adalah UID: 1005, apa yang terjadi? Apakah pengguna7 menjadi pemilik file di komputer itu? Sepertinya saya bahwa saya secara berkala harus berjalan chown -R nobody:nogroup /mnt/externalDrivepada disk.

Apakah ada yang saya anggap praktik buruk yang jelas? Disk tersebut kemungkinan besar akan berisi video, musik, dan gambar yang tidak perlu dilindungi seperti data keuangan.

Tuan Loh.
sumber
Saya tidak yakin apakah saya mengikuti Anda. Apakah Anda mencoba mengatur izin di drive eksternal?
Ramesh
1
Iya. Apakah itu hal yang baik?
Tuan Loh.

Jawaban:

19

Itulah masalah dengan sistem multi-pengguna, terutama jika Anda memiliki lebih dari satu. ;) Tidak ada cara yang benar-benar baik untuk melakukan apa yang Anda inginkan. Pendekatan yang muncul dalam pikiran adalah

  • memiliki UID yang sama untuk akun Anda di setiap mesin yang Anda gunakan drive eksternal Anda (sebenarnya tidak layak, karena kemungkinan besar tidak semua mesin berada di bawah kendali Anda)
  • menggunakan sistem file yang tidak mengetahui pemilik / grup conecpt (FAT atau NTFS datang ke pikiran, tapi ... aaah, tidak)

Pendekatan yang paling efektif adalah kembali ke praktik umum. Pada sebagian besar (setidaknya) sistem Linux, terdapat beberapa kelompok yang biasanya memiliki GID umum. Sebagai contoh users, yang memiliki GID 100di sebagian besar distro Linux. Jika Anda dapat mengatur agar akun pengguna Anda masing-masing dalam grup ini, Anda bisa

  1. buat semua file dan direktori di drive Anda yang dimiliki oleh grup ini
  2. entah bagaimana mengatur untuk memiliki izin grup yang sesuai pada file dan direktori tersebut
  3. entah bagaimana mengatur agar file baru dibuat dengan resp-kepemilikan grup yang sesuai. izin.

Poin pertama dan kedua mudah dicapai ( chown, chmod). Poin ketiga agak rumit.

Bagian "kepemilikan grup" relatif mudah: Anda dapat mengatur bit SGID pada semua direktori pada drive. Bit SGID yang diterapkan ke direktori memberitahu kernel untuk berperilaku dengan cara BSDish: BSD membuat setiap file / direktori yang dibuat di bawah direktori tertentu yang dimiliki grup bukan oleh grup utama dari proses membuat file / direktori (seperti Linux), tetapi oleh pemilik direktori induk.

Bit izin agak sulit. Izin file / direktori yang baru dibuat (antara lain) dipengaruhi oleh umask, bit-mask yang memberitahu bit mana yang tidak diatur jika tidak secara eksplisit dinyatakan. Nilai umum umaskmisalnya adalah 022, yang berarti bahwa bit-bit penulisan untuk »grup« dan »lainnya« biasanya tidak boleh disetel. Anda dapat mengubah umaskke 002, memberi tahu Anda tidak ingin izin tulis dihapus untuk grup tetapi downside adalah bahwa Anda tidak dapat menetapkan nilai ini berdasarkan direktori dan Anda biasanya tidak ingin memiliki izin menulis untuk kelompok utama Anda disetel untuk setiap file yang Anda buat.

Ini dapat diselesaikan dengan menggunakan ACL: Dalam ACL Anda dapat mengatur maskdan defaultmengatur izin, yang berlaku untuk semua file dan direktori yang dibuat di dalam direktori dengan set ACL ini. Jadi salah satu solusi yang mungkin untuk masalah Anda adalah

  • pastikan Anda adalah anggota dari grup umum di semua sistem yang Anda ingin gunakan drive eksternal Anda
  • buat semua file dan direktori pada drive Anda yang dimiliki oleh grup ini dan setel bit SGID pada semua direktori
  • ubah ACL dari semua direktori untuk menyertakan mask dan izin default yang memberitahu kernel untuk membuat setiap file / direktori baru dengan hak akses tulis yang ditetapkan untuk grup.

Lihat setfacl(1), dan acl(5)untuk lebih jelasnya.

Andreas Wiese
sumber
1
Ada tambalan yang melayang-layang untuk pemetaan gid dannya di ext4, spinics.net/lists/linux-fsdevel/msg57240.html , tapi saya rasa itu belum selesai ...
Rmano
11

Ada pertanyaan serupa lainnya dan bindf disarankan di sana:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

Pengguna OSX menyarankan noownersopsi pemasangan yang dijelaskan seperti ini:

Abaikan bidang kepemilikan untuk seluruh volume. Ini menyebabkan semua objek muncul sebagai milik ID pengguna 99 dan ID grup 99. ID pengguna 99 ditafsirkan sebagai ID pengguna efektif saat ini, sementara ID grup 99 digunakan secara langsung dan diterjemahkan menjadi `` tidak diketahui ''.

Michael Shigorin
sumber
bindf sangat lambat. Mungkin karena itu adalah sistem file FUSE.
Navin
4

Pemilik dan grup file disimpan sebagai angka. Jadi file tersebut akan dimiliki oleh uid = 1005, terlepas dari pengguna mana (atau tidak sama sekali) yang ada di sistem yang terhubung dengannya.

Mengubah pengguna / grup ke siapa pun tidak akan memperbaiki masalah Anda. Maka hanya pengguna yang tidak ada (atau anggota dari grup siapa pun) yang akan diizinkan untuk mengakses file.

Sayangnya, saya tidak berpikir ada cara untuk menonaktifkan pemeriksaan izin pada ext4. Lihat, misalnya, Apakah mungkin untuk menonaktifkan izin file pada sistem file ext3 atau ext4?

derobert
sumber
2

Andreas Wiese mengatakan bahwa jika Anda memiliki id grup umum di semua host, Anda dapat menyelesaikan masalah Anda dengan setgidbit dan ACL

Saya mengajukan pertanyaan Id grup standar di distro Linux?

Setelah penelitian sendiri menemukan bahwa grup seperti itu ada di semua distro yang disentuh: sysid berbagi grup 3di Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, NetBSD, MacOSX, Solaris.

Dengan ini:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

dan rasa ini:

$ sudo adduser user sys

Anda userdapat membaca / menulis file apa pun di /dir.

Sebagian besar pekerjaan mungkin setgidsedikit tetapi sayangnya Anda biasanya memiliki sedikit kontrol umask. Jadi ACL digunakan untuk memberikan solusi lengkap.

Lihat juga:

gavenkoa
sumber