Jak używać "chmod" na partycji NTFS (lub FAT32)?

118

Mam skrypt, który muszę wykonać na partycji NTFS. Uprawnienia skryptu są ustawione na 600.

Próbowałem zmodyfikować uprawnienia, uruchamiając chmod 755 script.sh , który nie zgłasza awarii ani niczego - ale także nie zmienia uprawnień do pliku:

$ stat script.sh

  File: 'script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

$ chmod 755 script.sh
$ stat script.sh

  File: 'script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

Jak widać, pozostaje niezmieniony.

    
zadawane Nathan Osman 07.11.2010, 00:12
źródło

10 odpowiedzi

75

Tryb jest określony przez opcje montowania partycji (nie możesz tego zmienić przez chmod).

Dla '755' w plikach i '777' w katalogach użyłbyś czegoś takiego jak

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
    
odpowiedział htorque 07.11.2010, 00:35
źródło
78

Wbrew temu, co większość ludzi sądzi, NTFS jest zgodnym z POSIX systemem plików1, a możliwe jest używanie uprawnień w NTFS .

Aby to włączyć, potrzebujesz "Plik mapowania użytkownika" lub po prostu podasz opcję permissions podczas instalacji (gdy nie jest wymagana kompatybilność z Windows). To mapuje użytkowników Linuksa w twoim systemie z ID użytkownika, jak NTFS / Windows, użyj ich wewnętrznie.

Zobacz stronę man page ntfs-3g , aby uzyskać informacje, a niektóre przykłady. Jeśli potrzebujesz więcej informacji, zajrzyj do zaawansowanej dokumentacji ntfs-3g dotyczącej własności i uprawnień .

(Zauważ, że to nie działa na systemach plików FAT.)

¹ Tak, może również przechowywać nazwy plików, które są poprawne w linux / unix, ale nie pod Windows, obsługuje dowiązania symboliczne i & amp; twarde linki itp.

    
odpowiedział JanC 02.11.2011, 17:57
źródło
34

W przypadku partycji NTFS użyj opcji permissions w fstab.

Najpierw odmontuj partycję NTFS.

Określ swój identyfikator UUID partycji za pomocą blkid

sudo blkid

Następnie edytuj /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Dodaj lub edytuj linię partycji NTFS

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

Utwórz punkt montowania (jeśli to konieczne)

sudo mkdir /media/windows

Teraz zamontuj partycję

mount /media/windows

Opcje, które Ci dałem, auto , automatycznie zamontują partycję podczas rozruchu, a users pozwala użytkownikom montować i umountować.

Następnie możesz użyć chown i chmod na partycji ntfs.

    
odpowiedział Panther 28.12.2011, 17:31
źródło
20

Oprócz ustawiania fmask i / lub dmask w powyższej odpowiedzi htorque, jeśli chcesz wykonać skrypty na dysku, musiałem również ustawić opcję "exec" mount.

Oto przykład:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
    
odpowiedział dbrews 14.12.2010, 09:26
źródło
13

Zawsze możesz wywołać interpreter skryptów, w którym to przypadku uprawnienia do wykonywania nie są wymagane. Jeśli skrypt używa bash , co można sprawdzić, patrząc na pierwszy wiersz skryptu, po prostu uruchom

bash script.sh

Zauważ, że skrypt wywołuje inne skrypty lub pliki binarne na tej samej partycji, to nie zadziała. Zauważ również, że strategia nie działa z plikami binarnymi w przeciwieństwie do tekstowych skryptów zapisanych w skryptach Bash, Perlu, Pythonie i tym podobnych.

    
odpowiedział loevborg 14.12.2010, 11:00
źródło
8

Zgodnie z sekcją Własność i uprawnienia w NTFS-3G dokumentacja, możemy użyć opcji montowania, aby kontrolować plik dostęp i tworzenie . Kombinacje są bardzo skomplikowane (patrz dwie tabele tam). Też nie czytam i dostaję ich wszystkich. Na przykład, nie wiem, czy listy ACL POSIX są wybierane podczas kompilacji, czy nie, z pakietu binarnego NTFS-3G. Ale najlepsze, co udało mi się uzyskać, to użycie pliku User Mapping w połączeniu z niektórymi wersjami opcje przybliżenia wiarygodnego odwzorowania własności pliku i uprawnień między systemami Windows i Linux.

Ostrzeżenie : tylko to, co działa najlepiej w przypadku udostępniania partycji NTFS danych (dysk D: w systemie Windows) między uruchamianiem systemu Windows 8 i Kubuntu 14.04. Instrukcje są zapisywane w starannej retrospekcji, ale nie są dokładnie testowane. Jest zbyt męczące i nużące, aby powtórzyć całą procedurę ponownie. Więc podążaj za tym na własną odpowiedzialność. Ale jeśli to zrobisz, podziel się swoim doświadczeniem. Jeśli zdecydujesz się postępować zgodnie z instrukcjami, przeczytaj je w całości, aby uzyskać pełny obraz, zanim zaczniesz działać. Powodzenia!

W porządku, gotowe! Szczegółowe instrukcje składają się z trzech części. Część 1 powinna być wykonana w systemie Windows, a druga w systemie Linux. Część 3 jest do testu.

Część 1

Sekcja User Mapping dokumentacji NTFS-3G zawiera dwie wersje do skonfiguruj mapowanie użytkowników między systemem Windows i Linux, jedną wersją systemu Windows i jedną wersją systemu Linux. Z mojego doświadczenia wynika, że ​​wersja dla systemu Linux zakończyła się miss . Konto Linux było nie zamapowane na moje konto Windows, ale niektóre nieznane konto pojawiło się pod SID . Rezultatem był bałagan, ponieważ to nieznane konto przejmuje własność wszystkich plików mojego konta Windows. W tej sytuacji, jeśli nie masz przywileju administracyjnego, aby odzyskać prawo własności, pliki z twojego konta Windows staną się niedostępne. Ale nawet jeśli mange, to nadal złe mapowanie. Oznacza to, że później pliki tworzone w systemie Linux zostaną przypisane do tego nieznanego konta w systemie Windows, a te w systemie Windows zostaną przypisane do katalogu głównego w systemie Linux (o ile dobrze pamiętam). Tak więc w systemie Windows musisz przejąć własność z powrotem, a Linux zmienić właściciela. Nie tego oczekujemy. Po kilku beznadziejnych próbach rozwiązania problemu, poddałem się i zwróciłem do wersji Windows. Ta zadziałała. Szczegółowe instrukcje wyodrębnione z odpowiedniej sekcji dokumentacji NTFS-3G są następujące:

  1. Pobierz narzędzie usermap , rozpakuj je gdzieś (w moim przypadku dysk C: ), lepiej poza partycją NTFS (w moim przypadku dysk D: ) do współdzielenia.

  2. Otwórz wiersz poleceń systemu Windows. Przejdź do wyodrębnionego katalogu tools (domyślnie) narzędzia usermap . Następnie uruchom następujące polecenie:

    C:\tools> mapuser > UserMapping
    

    Generuje szablon i przekierowuje go do pliku o nazwie UserMapping . Otwórz plik za pomocą edytora tekstu, na przykład Notatnika, powinieneś zobaczyć następujące linie:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    Prawdopodobnie pierwszy SID powinien być identyfikatorem SID użytkownika, a drugi identyfikatorem SID grupy. Możesz sprawdzić je odpowiednio za pomocą poleceń whoami /user i whoami /groups .

  3. Po upewnieniu się, że identyfikatory SID są poprawne, postępuj zgodnie z instrukcjami w komentarzu, to jest zmień user w wierszu user::SID na swoją nazwę użytkownika i group w wierszu :group:SID na twoja podstawowa nazwa grupy w systemie Linux. W systemie Ubuntu są one takie same. Co więcej, dodaj swoją nazwę grupy Linux również po pierwszym dwukropku linii user::SID . Tak więc linia powinna wyglądać jak user:group:SID . Wygląda na to, że jeśli nie spowoduje to, że pliki utworzone w systemie Windows zostaną przypisane do user:root w systemie Linux.

  4. Zapisz plik. Przenieś go do katalogu o nazwie .NTFS-3G (utwórz go, jeśli jeszcze nie istnieje) na partycji NTFS, którą chcesz udostępnić (w moim przypadku dysk D: ).

  5. Ten krok służy do testowania w części 3. Na udostępnionej partycji NTFS utwórz nowy katalog i nowy plik.

Część 2

Uruchom teraz system Linux. sudo edytuje plik /etc/fstab . Dodaj lub zmodyfikuj linię dla współużytkowanej partycji NTFS na coś podobnego do następującego:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

Niezbędne jest ustawienie umask ( dmask i fmask może również działać, ale nie testować). Wybierz wartość dla umask , którą lubisz, chociaż wybrałem 077 . Wygląda na to, że bez tego ustawienia, pełne uprawnienia zostaną nadane%% c%% dla nowo utworzonych plików.

Zapisz plik.Teraz o lub remount ( sudo mount , a następnie sudo umount ) współużytkowaną partycję NTFS (w moim przypadku sudo mount ):

$ sudo mount /data

Część 3

Teraz (wciąż na Linuksie) /data do punktu montowania (w moim przypadku cd ), /data plików tam. Sprawdź, czy ich prawa własności i uprawnienia są zgodne z określonymi w pliku ls -l i UserMapping ustawionym w umask (dopasowanie między uprawnieniami a /etc/fstab wymaga obliczenia dopełnienia, patrz man (1) umask , aby uzyskać więcej informacji). Jeśli tak, gratulacje, osiągnięto połowę gola. W przeciwnym razie, biedny. Zapytaj system Ubuntu lub Windows.

Następnie utwórz nowy katalog i nowy plik. umask , aby sprawdzić ich prawa własności i uprawnienia. Właścicielem powinna być jak zwykle nazwa użytkownika i podstawowa grupa. Uprawnienia powinny być zgodne z ls -l . Teraz uruchom ponownie komputer i uruchom system Windows. Zlokalizuj na udostępnionej partycji NTFS katalog i plik, który właśnie utworzyłeś w systemie Linux. Sprawdź ich właściwości, aby sprawdzić, czy są one przypisane do Twojego konta Windows. Jeśli tak, to gratulacje, wszyscy skończyliście. W przeciwnym razie, pech. Zapytaj Windows lub Ubuntu.

EOF

    
odpowiedział reflectionalist 23.08.2014, 00:35
źródło
5

Stary wątek, wiem, ale wciąż aktualny i nie ma konkretnej wskazówki dotyczącej użycia, złożony z różnych sugestii na różnych innych forach / wątkach i przetestowany na Ubuntu GNOME 13.04, gdzie chciałem mieć zewnętrzny dysk do przechowywania biblioteki Steam ...

Gdy partycja NTFS znajduje się na zewnętrznym dysku USB, na przykład - co oznacza, że ​​partycja jest montowana "w locie" po połączeniu - możesz użyć następującej metody, aby utworzyć partycje NTFS z udev z uprawnieniami do wykonania.

Otwórz okno terminala i wykonaj:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

Następnie wklej ten wiersz w pustym / nowym pliku (jeśli nie, wyjdź z nano i uruchom ponownie polecenie, ale uruchom nazwę pliku wyższą liczbą jak 91 -...):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

Następnie zapisz i zamknij. Odłącz dysk, a następnie wykonaj w terminalu:

$ sudo service udev restart

Następnie podłącz napęd ponownie i ciesz się:)

    
odpowiedział user17254 15.09.2013, 01:51
źródło
2

Wszystkie kroki:

  1. Zainstaluj ntfs-3g :

    sudo apt-get install -y ntfs-3g
    
  2. Odmontuj partycję NTFS :

    sudo umount /mnt/windows
    
  3. Użyj ntfs-3g.usermap , aby wygenerować plik UserMapping :

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    lub

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Remount NTFS , aby dodać plik UserMapping :

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Zaktualizuj plik fstab :

    sudo vim /etc/fstab
    

    Uaktualnij wiersz mount :

    1. Utwórz kopię zapasową aktualnej linii montowania! Powiel linię i skomentuj ją, dodając # na początku.
    2. Zmień następującą: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Do następnego: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Użyj opcji ntfs-3g i tylko opcja default )

    Powinno to wyglądać mniej więcej tak:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Na koniec ponownie zaloguj się, używając fstab :

    sudo umount /mnt/windows
    sudo mount -a
    

Wykonaj to raz dla każdej partycji NTFS !

OSTRZEŻENIE Z SYSTEMEM WINDOWS!

Sprawdzam to za pomocą Windows 7 + , a uprawnienia wpływają na system operacyjny Windows! Zmieniam uprawnienia katalogu domowego na partycję Windows, a kiedy ponownie użyłem Windowsa, mogę zauważyć, że użytkownik był zepsuty!

    
odpowiedział Eduardo Cuomo 26.02.2017, 15:49
źródło
1

Istnieje pytanie związane z urządzeniami USB. Ta odpowiedź zapewnia brzydkie włamanie, jeśli chcesz automatycznie zamontować każde urządzenie USB z uprawnieniami do wykonywania.

    
odpowiedział lumbric 28.12.2011, 16:06
źródło
1

Zamontuj partycję NTFS na dysku USB z własnymi uprawnieniami i właścicielem

W systemie Linux tryb NTFS (i FAT32) jest określany przez opcje montowania partycji. Nie można go zmienić za pomocą polecenia chmod.

Założenie: dysk USB jest widoczny jako sdb1 , zmodyfikuj, aby dopasować literę dysku i numer partycji w twoim przypadku . Ogólna składnia to sdxn , gdzie x to litera dysku, a n to numer partycji widoczny na przykład sudo lsblk -f

Przygotowanie

  • Odmontuj partycję NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Utwórz niestandardowy punkt montowania (tylko jeśli chcesz mieć nowy punkt montowania), na przykład za pomocą

    sudo mkdir -p /mnt/sd1
    
  • Sprawdź swój identyfikator użytkownika% uid (zwykle jest to 1000, czasami 1001 lub 1002 ...)

    grep ^"$USER" /etc/group
    

    i użyj tego numeru, jeśli chcesz przejąć własność (domyślnie jest to root ).

Zainstaluj partycję NTFS

Przykład 1 (bez uprawnień wykonywania dla plików, brak dostępu dla "innych"),

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
  • w tym przypadku możesz uruchomić skrypt this-script za pomocą

    bash /mnt/sd1/this-script
    

Przykład 2 (z uprawnieniami do wykonywania dla plików, bez dostępu dla "innych"),

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case
  • W tym przypadku możesz uruchomić skrypt this-script za pomocą

    /mnt/sd1/this-script
    

    i możesz uruchamiać programy wykonywalne również z tej lokalizacji (nie jest to zalecane).

Przykład 3 (pełne uprawnienia dla wszystkich, co jest wygodne, ale nie bezpieczne, gdy jest kilku użytkowników),

sudo mount -o rw,users,umask=000,exec /dev/sdxn /mnt/sd1  # general
sudo mount -o rw,users,umask=000,exec /dev/sdb1 /mnt/sd1  # modify to match your case
    
odpowiedział sudodus 15.09.2017, 13:02
źródło

Przeczytaj inne pytania na temat tagów