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

128

Mam skrypt, który muszę wykonać na partycji NTFS. Zezwolenie na skrypt jest ustawione na 600.

Próbowałem zmodyfikować uprawnienia, uruchamiając program chmod 755 script.sh, który nie zgłasza awarii ani nic, ale nie zmienia również 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.

Nathan Osman
źródło
Lepsze rozwiązanie można znaleźć tutaj Te dwa pytania należy połączyć!

Odpowiedzi:

79

Tryb zależy od opcji montowania partycji (nie można go zmienić za pomocą chmod).

Dla „755” w plikach i „777” w katalogach użyłbyś czegoś takiego

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
źródło
Okej, to wyjaśniałoby też kilka innych rzeczy.
Nathan Osman,
4
Co powinienem umieścić /dev/whateveri /mnt/whateverjeśli muszę zmienić uprawnienia do mojej partycji HDD o nazwie/media/Prtn
pranphy
3
Czy zamontowanie w ten sposób zachowuje oryginalne ustawienia dysku? Czy można bezpiecznie zamontować dysk systemu Windows?
Jonathan
1
Ustawiam użytkownika na „andrew”, który jest moim głównym użytkownikiem. Według ls dla partycji NTFS pokazuje, że wszystkie pliki / katalogi są własnością root.
deathangel908
Prawdziwe rozwiązanie to ntfs-3g.usermap. Zobacz poniżej ...
Eduardo Cuomo,
86

W przeciwieństwie do tego, co większość ludzi uważa, NTFS jest systemem plików zgodnym z POSIX¹ i możliwe jest korzystanie z uprawnień w NTFS .

Aby to włączyć, potrzebujesz „Pliku mapowania użytkownika” lub po prostu podaj permissionsopcję podczas montażu (gdy nie jest wymagana kompatybilność z Windows). Mapuje to użytkowników Linuksa w twoim systemie z identyfikatorami użytkowników takimi jak NTFS / Windows, którzy używają ich wewnętrznie.

Zobacz stronę podręcznika ntfs-3g, aby uzyskać informacje i przykłady. Jeśli potrzebujesz więcej informacji, zapoznaj się z zaawansowaną dokumentacją ntfs-3g na temat własności i uprawnień .

(Uwaga: nie działa to w systemach plików FAT).

¹ Tak, może także przechowywać nazwy plików, które są poprawne w systemie Linux / Unix, ale nie w systemie Windows, obsługuje dowiązania symboliczne i dowiązania twarde itp.

JanC
źródło
4
tutaj jest dobra dokumentacja. w skrócie: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSa potemsudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
owce latające
1
Czy to pozwoli ci dowolnie ustawić uprawnienia jak chmod 655 /some/filena partycji NTFS zamontowanej w systemie Linux? Próbuję wymyślić, jak scalić moją partycję domową z Linuksa do c: \ Users. Czy użycie mapy użytkownika pozwoli mi zachować wszystkie uprawnienia? Planowałem zamontować katalog c: \ Users w katalogu / home w systemie Linux.
trusktr
7
Ponownie podkreślę twoją uwagę: „gdy nie jest wymagana kompatybilność z Windows”. ref: askubuntu.com/questions/92863/...
Eliptyczny widok
1
ntfs-3g manpagelink uszkodzony
ctrl-alt-delor
Eduardo Cuomo napisał całkiem dobry przykład wszystkich kroków niezbędnych do utworzenia „pliku mapowania użytkowników” tutaj: askubuntu.com/a/887502/327339
Gabriel Staples
38

W przypadku partycji NTFS użyj permissionsopcji w fstab.

Najpierw odmontuj partycję NTFS.

Zidentyfikuj identyfikator UUID partycji blkid

sudo blkid

Następnie edytuj /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

I dodaj lub edytuj wiersz dla partycji NTFS

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

Zrób punkt montowania (w razie potrzeby)

sudo mkdir /media/windows

Teraz zamontuj partycję

mount /media/windows

Opcje, które ci dałem, autoautomatycznie zamontują partycję po uruchomieniu i usersumożliwią użytkownikom montowanie i podłączanie.

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

Pantera
źródło
2
Jak przechowywane są te uprawnienia? W reklamach? Inne metadane?
ζ--
Co z fat32? Mam kartę Micro SD, która jest chroniona przed zapisem i nie mogę uzyskać dostępu, sformatuj ją.
Waqas,
@RanaMuhammadWaqas - to stare pytanie, ale możesz je również zamontować za pomocą różnych opcji. Trudno zrozumieć, na czym polega problem, być może zidentyfikuj swój sprzęt i zadaj osobne pytanie.
Panther
@ bodhi.zazen usersoznacza noexec , nosuid i nodev . nie jest W jaki sposób użytkownicy mogą montować / montować noexecpodczas ustawiania?
Khurshid Alam
1
@EduardoCuomo - Umieszczenie komentarza w odpowiedzi stwierdzającej, że nie działa, raczej nie pomoże. Jaki system plików Proponuję otworzyć pytanie. Musisz zidentyfikować system plików i opublikować swój wpis na fstab
Panther
20

Oprócz ustawienia fmask i / lub dmask w powyższej odpowiedzi htorque, jeśli chcesz wykonywać skrypty na dysku, musiałem również ustawić opcję montowania „exec”.

Przykładem może być:

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

Zawsze możesz jawnie 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 zweryfikować, patrząc na pierwszą linię skryptu, po prostu uruchom

bash script.sh

Pamiętaj, że skrypt wywołuje inne skrypty lub pliki binarne na tej samej partycji, to nie zadziała. Zauważ też, że strategia nie działa z plikami binarnymi, w przeciwieństwie do tekstowych plików skryptowych napisanych w Bash Script, Perl, Python lub podobnych.

Loevborg
źródło
+1 - Nigdy nie myślałem o tym, by wywołać to w ten sposób.
Nathan Osman,
8
Aby uruchomić pliki binarne, użyj /lib64/ld-linux-x86-64.so.2 ./program.bindla programów 64-bitowych i /lib/ld-linux.so.2 ./program.bin32-bitowych.
Lekensteyn,
8

Zgodnie z sekcją Własność i uprawnienia dokumentacji NTFS-3G, możemy użyć opcji montowania, aby kontrolować dostęp do plików i ich tworzenie . Kombinacje są bardzo skomplikowane (patrz dwie tabele tam). Też nie czytam i nie rozumiem 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 wyszedłem, to użycie pliku mapowania użytkowników w połączeniu z niektórymi opcjami montowania w celu przybliżenia prawdopodobnego odwzorowania własności pliku i uprawnień między systemem Windows i Linux.


Ostrzeżenie : To jest tylko to, co działa najlepiej w przypadku mojego udostępniania partycji danych NTFS (dysk D:w systemie Windows) między podwójnie uruchomionym systemem Windows 8 a Kubuntu 14.04. Instrukcje są zapisywane z dokładną retrospekcją, ale nie są dokładnie testowane. Powtarzanie całej procedury jest zbyt męczące i żmudne. Postępuj zgodnie z nim na własne ryzyko. Ale jeśli tak, podziel się swoim doświadczeniem. Jeśli zdecydujesz się postępować zgodnie z instrukcjami, przeczytaj je w całości, aby mieć cały obraz przed faktycznym działaniem. Powodzenia!


Dobra, proszę bardzo! Szczegółowe instrukcje składają się z trzech części. Część 1 powinna zostać przeprowadzona w systemie Windows, a część 2 w systemie Linux. Część 3 jest do testu.

Część 1

Sekcja Mapowanie użytkowników w dokumentacji NTFS-3G określa dwie wersje do skonfigurowania mapowania użytkowników między Windows i Linux, jedną wersję Windows i jedną wersję Linux. Moje doświadczenie było to, że wersja Linux skończyło się z Miss . Konto Linux nie zostało zamapowane na moje konto Windows, ale jakieś 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 takiej sytuacji, o ile nie masz przywileju administracyjnego do odzyskania własności, pliki na koncie Windows stają się niedostępne. Ale nawet jeśli sobie poradzisz, nadal tak jestzłe mapowanie. Oznacza to, że później wszelkie pliki utworzone w systemie Linux zostaną przypisane do tego nieznanego konta w systemie Windows, a pliki w systemie Windows zostaną przypisane do rootowania w systemie Linux (o ile dobrze pamiętam). Tak więc w systemie Windows musisz ponownie przejąć własność, a w systemie Linux zmienić własność. Nie tego się spodziewamy. Po kilku beznadziejnych próbach rozwiązania problemu poddałem się i wróciłem do wersji Windows. Ten zadziałał. Szczegółowe instrukcje wyodrębnione z odpowiedniej sekcji dokumentacji NTFS-3G są następujące:

  1. Pobierz narzędzie usermap , wypakuj je gdzieś (w moim przypadku dysk C:), lepiej poza partycją NTFS (w moim przypadku dysk D:), aby je udostępnić.

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

    C:\tools> mapuser > UserMapping
    

    To generuje szablon i przekierowuje go do pliku o nazwie UserMapping. Otwórz plik za pomocą edytora tekstu, powiedzmy Notatnik, 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
    

    Przypuszczalnie pierwszy SIDpowinien być identyfikator SID użytkownika, a drugi identyfikator SID grupy. Możesz je sprawdzić odpowiednio za pomocą poleceń whoami /useri whoami /groups.

  3. Po upewnij się, że identyfikatory są poprawne, postępując zgodnie z instrukcjami w komentarzu, że jest zmiana userw user::SIDkolejce do swojej nazwy użytkownika i groupna :group:SIDlinii do swojej pierwotnej nazwy grupy w systemie Linux. W Ubuntu są takie same. Ponadto dodaj nazwę grupy Linux również po pierwszym dwukropku user::SIDlinii. Linia powinna więc wyglądać mniej więcej tak user:group:SID. Wygląda na to, że jeśli tego nie zrobisz, pliki utworzone w systemie Windows zostaną przypisane do user:rootsystemu Linux.

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

  5. Ten krok jest do przetestowania w części 3. Na udostępnionej partycji NTFS utwórz nowy katalog i nowy plik.

Część 2

Teraz uruchom system Linux. sudoedytować plik /etc/fstab. Dodaj lub zmodyfikuj wiersz dla współużytkowanej partycji NTFS do czegoś takiego:

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

Zasadnicze znaczenie ma ustawienie umask( dmaski fmaskmoże również działać, ale nie testowane). Wybierz dla umasksiebie wartość , chociaż wybrałem 077. Wydaje się, że bez tego ustawienia zostaną przyznane pełne uprawnienia odla nowo utworzonych plików.

Zapisz plik. Teraz sudo mountlub ponownie podłącz ( sudo umounti wtedy sudo mount) udostępnioną partycję NTFS (w moim przypadku /data):

$ sudo mount /data

Część 3

Teraz (wciąż w systemie Linux) cddo punktu montowania (w moim przypadku /data), ls -lpliki tam. Sprawdź, czy ich własność i uprawnienia są odpowiednio zgodne z podanymi w UserMappingpliku i umaskustawionym w /etc/fstab(dopasowanie między uprawnieniami i umaskwymaga pewnych obliczeń dopełniania, zobacz man (1) umask, aby uzyskać więcej informacji). Jeśli to zrobią, gratulacje, połowa celu zostanie osiągnięta. W przeciwnym razie biedny jesteś. Zapytaj Ubuntu lub Windows.

Następnie utwórz nowy katalog i nowy plik. ls -laby sprawdzić ich własność i uprawnienia. Własność powinna być jak zwykle nazwą użytkownika i podstawową grupą. Uprawnienia powinny być zgodne z umask. Teraz uruchom ponownie komputer i uruchom system Windows. Znajdź 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 zobaczyć, czy są przypisane do twojego konta Windows. Jeśli tak, gratulacje, wszyscy jesteście skończeni. W przeciwnym razie pech. Zapytaj Windows lub Ubuntu.

EOF

refleksjonista
źródło
6

Wiem, że stary wątek, ale wciąż aktualny i brakuje konkretnej wskazówki użycia, skomponowanej z różnych sugestii na różnych innych forach / wątkach i przetestowanej na Ubuntu GNOME 13.04, gdzie chciałem, aby dysk zewnętrzny zawierał bibliotekę Steam ...

Na przykład, gdy partycja NTFS znajduje się na zewnętrznym dysku USB - co oznacza, że ​​partycja jest montowana w locie po połączeniu - wówczas możesz użyć następującej metody, aby utworzyć udev montować partycje NTFS z prawami do wykonywania.

Otwórz okno terminala i wykonaj:

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

Następnie wklej ten wiersz do pustego / nowego pliku (jeśli nie, to wyjdź z nano i uruchom ponownie polecenie, ale rozpoczynając nazwę pliku wyższą liczbą, np. 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 ponownie dysk i ciesz się :)

użytkownik17254
źródło
1
Doskonale, to powinna być zaakceptowana odpowiedź.
leftaroundabout
4

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.usermapaby wygenerować UserMappingplik:

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

    lub

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Zainstaluj ponownie partycję NTFS, aby dodać UserMappingplik:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Zaktualizuj swój fstabplik:

    sudo vim /etc/fstab
    

    Zaktualizuj linię montażu :

    1. Utwórz kopię zapasową bieżącej linii montażu! Zduplikuj linię i skomentuj, dodając #na początku znak „ a”.
    2. Zmień dalej: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Dalej: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Użyj ntfs-3gi tylko defaultopcja)

    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 podłącz ponownie, używając fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Zrób to raz dla każdej partycji NTFS, którą masz!

OSTRZEŻENIE W SYSTEMIE WINDOWS!

Sprawdzam to w systemie Windows 7+ i uprawnienia wpływają na system operacyjny Windows! Zmieniam uprawnienia do mojego katalogu domowego na partycji Windows, a kiedy ponownie użyłem systemu Windows, zobaczyłem, że użytkownik był zepsuty!

Eduardo Cuomo
źródło
1

Nie ma powiązanych pytań dotyczących urządzeń USB. Ta odpowiedź zapewnia brzydkie włamanie, jeśli chcesz automatycznie podłączyć każde urządzenie USB z uprawnieniami do wykonywania.

lędźwiowy
źródło
1

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

W systemie Linux tryb NTFS (i FAT32) jest określony przez opcje montowania partycji . Nie można tego zmienić za pomocą 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 jest taka sdxn, gdzie xlitera dysku njest numerem partycji, jak widać na przykładsudo 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 nowy punkt montowania), na przykład za pomocą

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

    grep ^"$USER" /etc/group
    

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

Zamontuj partycję NTFS

Przykład 1 (bez uprawnień do wykonywania 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 takim przypadku możesz uruchomić skrypt za this-scriptpomocą

    bash /mnt/sd1/this-script
    

Przykład 2 (z uprawnieniami do wykonywania plików, brak 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 takim przypadku możesz uruchomić skrypt za this-scriptpomocą

    /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
sudodus
źródło
/media$ sudo mkdir -p sdb1 /media$ sudo mount -o rw,users,umask=000,exec /dev/sdb1 ./sdb1/ mount: block device /dev/sdb1 is write-protected, mounting read-only
alhelal
@alhelal, obawiam się, że sprzęt twojego napędu USB stał się tylko do odczytu lub „zablokowany”. Ale może również występować problem z systemem plików, a jeśli system plików jest uszkodzony, możesz go naprawić, naprawiając go w systemie Windows za pomocą metody GUI lub wiersza poleceń chkdsk /f X:zgodnie z tym linkiem ubuntuforums.org /… - Jeśli nadal nie ma szczęścia, wykonaj
sudodus