Czy mogę przenosić uprawnienia użytkowników między komputerami dla zewnętrznego dysku twardego ext4?

16

Mam zewnętrzny dysk USB 3 (pojemność 2 TB), który najprawdopodobniej zostanie przeniesiony z maszyny na maszynę. Dysk ma tablicę partycji GUID i partycję ext4. Nie mogę zapisać na dysku, chyba że podniesię poziom procesu ( sudo).

Obecnie myślę o wypróbowaniu jednego lub obu poniższych rozwiązań i chciałbym poznać ich zalety -

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

Jeśli dam 777 uprawnienia, a użytkownik1 (UID: 1005) zapisze go, a później przeniosę dysk na inny komputer, na którym użytkownik 7 ma UID: 1005, co się stanie? Czy użytkownik7 staje się właścicielem pliku na tym komputerze? Wydaje mi się, że będę okresowo musiał uruchamiać chown -R nobody:nogroup /mnt/externalDrivesię na dysku.

Czy coś, co uważam za oczywistą złą praktykę? Dysk najprawdopodobniej będzie zawierał filmy, muzykę i zdjęcia, ale żaden z nich nie musi być chroniony jak niektóre dane finansowe.

Lord Loh.
źródło
Nie jestem pewien, czy podążę za tobą. Czy próbowałeś ustawić uprawnienia na dysku zewnętrznym?
Ramesh
1
Tak. Czy to dobrze?
Lord Loh.

Odpowiedzi:

19

Taki jest problem z systemami wieloużytkownikowymi, szczególnie jeśli masz więcej niż jeden z nich. ;) Nie ma naprawdę fajnego sposobu na robienie tego, co chcesz. Przychodzą mi na myśl podejścia

  • posiadanie tego samego identyfikatora UID dla konta na każdej maszynie, z której korzystasz z zewnętrznego dysku (w rzeczywistości nie jest to możliwe, ponieważ najprawdopodobniej nie wszystkie maszyny są pod twoją kontrolą)
  • za pomocą systemu plików nieświadomy pojęcia właściciela / grupy (przychodzi mi na myśl FAT lub NTFS, ale… aaah, nie)

Najbardziej skutecznym podejściem byłoby powrót do powszechnych praktyk. W większości (przynajmniej) systemów Linux istnieją grupy, które mają zwykle wspólne identyfikatory GID. Na przykład byłoby users, który ma GID 100na większości dystrybucji Linuksa. Jeśli możesz mieć swoje konto użytkownika w tej grupie, możesz

  1. utwórz wszystkie pliki i katalogi na dysku należące do tej grupy
  2. jakoś udało się mieć odpowiednie uprawnienia grupowe do tych plików i katalogów
  3. jakoś udało się stworzyć nowe pliki z odpowiednimi odpowiednikami własności grupy. uprawnienia.

Pierwszy i drugi punkt są łatwe do osiągnięcia ( chown, chmod). Trzeci punkt jest nieco trudniejszy.

Część „własności grupowej” jest stosunkowo łatwa: możesz ustawić bit SGID we wszystkich katalogach na dysku. Bit SGID zastosowany do katalogów informuje jądro, aby zachowywało się w sposób BSDish: BSD sprawia, że ​​każdy plik / katalog utworzony w określonej grupie katalogów nie należy do podstawowej grupy procesu tworzącego plik / katalog (jak Linux), ale przez właściciela katalogu nadrzędnego.

Bit zgody jest trochę trudny. Na uprawnienia do nowo utworzonych plików / katalogów wpływa (między innymi) umaskmaska ​​bitowa, która określa, których bitów nie należy ustawiać, jeśli nie jest to wyraźnie określone. Na umaskprzykład wspólną wartością jest to 022, że bity zapisu dla „grupy” i „innych” zwykle nie powinny być ustawione. Możesz zmienić umaskna 002, mówiąc, że nie chcesz, aby uprawnienia do zapisu były usuwane dla grupy, ale wadą jest to, że nie możesz ustawić tej wartości w oparciu o katalog i zwykle nie chcesz mieć uprawnień do zapisu dla Twój podstawowy zestaw grup dla każdego tworzonego pliku.

To może być rozwiązany przy użyciu listy ACL: W ACL można ustawić maskoraz defaultzestaw uprawnień, które odnosi się do wszystkich plików i katalogów tworzonych wewnątrz katalogu z tego zestawu ACL. Jednym z możliwych rozwiązań Twojego problemu byłoby

  • upewniając się, że jesteś członkiem wspólnej grupy we wszystkich systemach, na których chcesz używać dysku zewnętrznego
  • utwórz wszystkie pliki i katalogi na dysku należące do tej grupy i ustaw bit SGID we wszystkich katalogach
  • zmień listę ACL wszystkich katalogów, aby uwzględnić maskę i domyślne uprawnienia, które każą jądru tworzyć każdy nowy plik / katalog z ustawionymi uprawnieniami do zapisu dla grupy.

Zobacz setfacl(1)i acl(5)po więcej szczegółów.

Andreas Wiese
źródło
1
W jego ext4, spinics.net/lists/linux-fsdevel/msg57240.html krążyła łatka dla niego i mapowania gid , ale nie sądzę, żeby to się
udało
11

Istnieje inne podobne pytanie i sugerowane są tam bindfs:

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

Użytkownicy OSX sugerują noownersopcję montowania opisaną w następujący sposób:

Zignoruj ​​pole własności dla całego woluminu. Powoduje to, że wszystkie obiekty są wyświetlane jako posiadane przez ID użytkownika 99 i ID grupy 99. ID użytkownika 99 jest interpretowane jako bieżący efektywny identyfikator użytkownika, podczas gdy ID grupy 99 jest używane bezpośrednio i tłumaczy się na `` nieznane ''.

Michael Shigorin
źródło
bindfs działa dość wolno. Prawdopodobnie dlatego, że jest to system plików FUSE.
Navin
4

Właściciel i grupa pliku są przechowywane jako liczby. Plik będzie więc własnością uid = 1005, niezależnie od tego, z którym użytkownikiem (lub w ogóle nie ma) w systemie, do którego jest podłączony.

Zmiana użytkownika / grupy na nikogo nie rozwiąże problemu. Wtedy tylko użytkownik nobody (lub członkowie grupy nobody) mieliby dostęp do plików.

Niestety nie sądzę, że istnieje sposób na wyłączenie sprawdzania uprawnień na ext4. Zobacz na przykład: Czy można wyłączyć uprawnienia do plików w systemie plików ext3 lub ext4?

derobert
źródło
2

Andreas Wiese mówi, że jeśli masz wspólny identyfikator grupy na wszystkich hostach, możesz rozwiązać problem z setgidbitem i listą ACL

Zadaję pytanie Predefiniowane identyfikatory grup w różnych dystrybucjach systemu Linux?

Po przeprowadzeniu własnych badań stwierdzono, że taka grupa istnieje we wszystkich dotkniętych dystrybucjach: sysidentyfikator udziału grupy 3na Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

Z tym:

$ 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

i smak tego:

$ sudo adduser user sys

możesz userczytać / zapisywać dowolny plik /dir.

Większość zadań może setgidtrochę zaszkodzić, ale niestety zazwyczaj masz niewielką kontrolę umask. Tak więc ACL służy do zapewnienia kompletnego rozwiązania.

Zobacz też:

gavenkoa
źródło