Come posso usare 'chmod' su una partizione NTFS (o FAT32)?


129

Ho uno script che devo eseguire su una partizione NTFS. L'autorizzazione dello script è impostata su 600.

Ho tentato di modificare le autorizzazioni eseguendo chmod 755 script.sh, che non segnala un errore o altro, ma non modifica le autorizzazioni sul file:

$ 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

Come puoi vedere, rimane invariato.


Una soluzione migliore può essere trovata qui Queste due domande dovrebbero essere collegate!

Risposte:


79

La modalità è determinata dalle opzioni di montaggio della partizione (non è possibile modificarla tramite chmod).

Per "755" nei file e "777" nelle directory useresti qualcosa del genere

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever

Ok, questo spiegherebbe anche alcune altre cose.
Nathan Osman,

5
Cosa devo mettere al posto di /dev/whatevere /mnt/whateverse devo cambiare l'autorizzazione della mia partizione HDD chiamata/media/Prtn
pranphy

3
Il montaggio in questo modo preserva le impostazioni originali del disco? Cioè è sicuro montare un'unità Windows?
Jonathan,

1
Ho impostato l'utente su "andrew", che è il mio utente principale. Di ls per la partizione ntfs mostra che tutti i file / directory in esso contenuti sono di proprietà di root.
deathangel908,

La vera soluzione è ntfs-3g.usermap. Vedi sotto ...
Eduardo Cuomo,

86

Contrariamente a quanto molti credono, NTFS è un filesystem compatibile con POSIX¹ ed è possibile usare le autorizzazioni su NTFS .

Per abilitarlo, è necessario un "File di mappatura utente" o semplicemente fornire l' permissionsopzione durante il montaggio (quando non è necessaria la compatibilità con Windows). Questo mappa gli utenti Linux sul tuo sistema con gli ID utente come NTFS / Windows li usano internamente.

Vedi la manpage ntfs-3g per alcune informazioni e alcuni esempi. Se hai bisogno di maggiori informazioni, consulta la documentazione avanzata ntfs-3g sulla proprietà e le autorizzazioni .

(Nota che questo non funziona con i filesystem FAT.)

¹ Sì, può anche memorizzare nomi di file validi in linux / unix ma non in Windows, supporta collegamenti simbolici e hardlink, ecc.


4
ecco una buona documentazione. in breve: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSe poisudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
volo delle pecore il

1
Quindi questo ti permetterà di impostare arbitrariamente autorizzazioni come chmod 655 /some/filesulla partizione NTFS montata su Linux? Sto cercando di capire come unire la mia partizione home da Linux in c: \ Users. L'uso di usermap mi consentirà di conservare tutte le autorizzazioni? Stavo pensando di montare la directory c: \ Users su / home in linux.
trusktr,

7
Vorrei sottolineare nuovamente la tua osservazione: "quando non è necessaria la compatibilità con Windows". ref: askubuntu.com/questions/92863/…
Vista ellittica

1
ntfs-3g manpagecollegamento interrotto
ctrl-alt-delor,

Eduardo Cuomo ha scritto un buon esempio di tutti i passaggi necessari per creare un "File di mappatura utente" qui: askubuntu.com/a/887502/327339
Gabriel Staples

38

Per le partizioni NTFS, utilizzare l' permissionsopzione in fstab.

Per prima cosa smonta la partizione NTFS.

Identifica l'UUID della partizione con blkid

sudo blkid

Quindi modifica /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

E aggiungi o modifica una riga per la partizione NTFS

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

Crea un punto di montaggio (se necessario)

sudo mkdir /media/windows

Ora monta la partizione

mount /media/windows

Le opzioni che ti ho fornito automonteranno automaticamente la partizione all'avvio e usersconsentiranno agli utenti di montare e smontare.

È quindi possibile utilizzare chown e chmod sulla partizione ntfs.


2
Come vengono archiviate queste autorizzazioni? In ADS? Altri metadati?
ζ--

Che dire di fat32? Ho una scheda Micro SD protetta da scrittura e non posso accedervi, formattarla.
Waqas,

@RanaMuhammadWaqas: questa è una vecchia domanda, ma puoi anche montarla con diverse opzioni. Difficile sapere qual è il tuo problema, forse identifica il tuo hardware e fai una domanda separata.
Pantera

@ bodhi.zazen usersimplica noexec , nosuid , e nodev . non lo è? Come gli utenti possono montare / umount con noexecl'impostazione?
Khurshid Alam,

1
@EduardoCuomo - È improbabile che pubblicare un commento in una risposta affermando che non funziona. Quale file system? Ti suggerisco di aprire una domanda. Devi identificare il file system e pubblicare la tua voce fstab
Panther,

20

Oltre a impostare la maschera e / o la maschera nella risposta di htorque sopra, se si desidera eseguire script sull'unità, ho dovuto anche impostare l'opzione di montaggio "exec".

Quindi l'esempio sarebbe:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever

14

È sempre possibile richiamare esplicitamente l'interprete di script, nel qual caso non sono necessarie autorizzazioni di esecuzione. Se lo script utilizza bash , come si può verificare guardando la prima riga dello script, basta eseguire

bash script.sh

Si noti che lo script chiama altri script o binari sulla stessa partizione, questo non funzionerà. Nota anche che la strategia non funziona con i binari al contrario dei file di script testuali scritti in Bash Script, Perl, Python o simili.


+1 - Non ho mai pensato di invocarlo in quel modo.
Nathan Osman,

8
Per eseguire i binari, utilizzare /lib64/ld-linux-x86-64.so.2 ./program.binper i programmi a 64 bit e /lib/ld-linux.so.2 ./program.binper quelli a 32 bit.
Lekensteyn,

8

In base alla sezione Proprietà e autorizzazioni della documentazione NTFS-3G, possiamo utilizzare le opzioni di montaggio per controllare l' accesso e la creazione dei file . Le combinazioni sono molto complicate (vedi le due tabelle lì). Inoltre non li leggo e li capisco tutti. Ad esempio, non so se gli ACL POSIX siano selezionati in fase di compilazione o meno del pacchetto binario NTFS-3G. Ma il migliore che ho scoperto è l'uso di un file di mappatura utente combinato con alcune opzioni di montaggio per approssimare una mappatura plausibile della proprietà e delle autorizzazioni dei file tra Windows e Linux.


Avvertenza : questo è solo ciò che funziona meglio per la condivisione di una partizione di dati NTFS (unità D:su Windows) tra Windows 8 a doppio avvio e Kubuntu 14.04. Le istruzioni sono registrate in un'attenta retrospettiva ma non accuratamente testate. È troppo noioso e noioso ripetere nuovamente l'intera procedura. Quindi seguilo a tuo rischio e pericolo. Ma se lo fai, condividi la tua esperienza. Se decidi di seguire le istruzioni, leggi attentamente per avere un quadro completo prima di recitare effettivamente. In bocca al lupo!


Bene, eccoti! Le istruzioni dettagliate sono composte da tre parti. La parte 1 dovrebbe essere eseguita su Windows mentre la parte 2 su Linux. La parte 3 è per il test.

Parte 1

La sezione Mappatura utente della documentazione NTFS-3G specifica due versioni per impostare la mappatura utente tra Windows e Linux, una versione Windows e una versione Linux. La mia esperienza è stata che la versione di Linux è finita con un errore . L'account Linux non è stato mappato sul mio account Windows ma alcuni account sconosciuti sono stati visualizzati sotto un SID . Il risultato è stato un disastro poiché questo account sconosciuto è diventato proprietario di tutti i file del mio account Windows. In tale situazione, a meno che non si disponga di un privilegio di amministratore per riprendere la proprietà, i file nel proprio account Windows diventano inaccessibili. Ma anche se si rogna, è ancorauna mappatura sbagliata. Ciò significa che in seguito qualsiasi file creato su Linux verrà assegnato a quell'account sconosciuto su Windows e quelli su Windows verranno assegnati a root su Linux (se ricordo bene). Quindi su Windows devi riprenderne la proprietà e su Linux cambiarne la proprietà. Non è quello che ci aspettiamo che sia. Dopo diversi tentativi senza speranza di risolvere il problema, ho rinunciato e sono passato alla versione di Windows. Quello ha funzionato. Seguono le istruzioni dettagliate estratte dalla relativa sezione della documentazione NTFS-3G:

  1. Scarica lo strumento usermap , estrailo da qualche parte (nel mio caso, unità C:), meglio al di fuori della partizione NTFS (nel mio caso unità D:) da condividere.

  2. Apri la riga di comando di Windows. Passare alla directory estratta tools(per impostazione predefinita) dello usermapstrumento. Quindi eseguire il comando seguente:

    C:\tools> mapuser > UserMapping
    

    Questo genera un modello e lo reindirizza a un file denominato UserMapping. Apri il file con un editor di testo, ad esempio Blocco note, dovresti vedere le seguenti righe:

    # 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
    

    Presumibilmente, il primo SIDdovrebbe essere il SID dell'utente mentre il secondo il SID del gruppo. Puoi controllarli rispettivamente con i comandi whoami /usere whoami /groups.

  3. Dopo esserti assicurato che i SID siano corretti, seguendo le istruzioni nel commento, ovvero, cambia usernella user::SIDriga il tuo nome utente e groupnella :group:SIDriga il nome del tuo gruppo principale su Linux. Su Ubuntu, sono gli stessi. Inoltre, aggiungi il nome del tuo gruppo Linux anche dopo i primi due punti della user::SIDriga. Quindi la linea dovrebbe assomigliare a qualcosa user:group:SID. Sembra che in caso contrario i file creati su Windows verranno assegnati user:rootsu Linux.

  4. Salva il file. Spostalo in una directory denominata .NTFS-3G(crearla se non ancora esistente) sulla partizione NTFS da condividere (nel mio caso drive D:).

  5. Questo passaggio è per il test nella Parte 3. Nella partizione NTFS condivisa, creare una nuova directory e un nuovo file.

Parte 2

Ora avvia Linux. sudomodifica il file /etc/fstab. Aggiungi o modifica la linea per la partizione NTFS condivisa in modo simile al seguente:

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

L'essenziale è impostare umask( dmaske fmaskpuò anche funzionare ma non testato). Scegli un valore per umaskte come, anche se ho scelto 077. Sembra senza questa impostazione, verranno concesse le autorizzazioni complete oper i file appena creati.

Salva il file. Ora sudo mounto rimonta ( sudo umounte quindi sudo mount) la partizione NTFS condivisa (nel mio caso /data):

$ sudo mount /data

Parte 3

Ora (ancora su Linux) cdal punto di mount (nel mio caso, /data), ls -li file lì. Controlla se la loro proprietà e le autorizzazioni corrispondono rispettivamente a quelle specificate nel UserMappingfile e a quelle umaskimpostate /etc/fstab(la corrispondenza tra le autorizzazioni e umaskrichiede un calcolo del complemento, vedi man (1) umask per maggiori informazioni). Se lo fanno, congratulazioni, metà obiettivo è raggiunto. Altrimenti, povero te. Chiedi a Ubuntu o Windows.

Quindi creare una nuova directory e un nuovo file. ls -lper controllarne la proprietà e le autorizzazioni. La proprietà dovrebbe essere il tuo nome utente e il gruppo principale come al solito. Le autorizzazioni devono corrispondere a umask. Ora riavvia il computer e avvia Windows. Individua sulla partizione NTFS condivisa la directory e il file che hai appena creato su Linux. Controlla le loro proprietà per vedere se sono assegnate al tuo account di Windows. Se lo sono, congratulazioni, avete finito. Altrimenti, sfortuna. Chiedi a Windows o Ubuntu.

EOF


6

Vecchio thread, lo so, ma ancora pertinente e privo di un particolare suggerimento del caso d'uso, composto da diversi suggerimenti su vari altri forum / thread e testato su Ubuntu GNOME 13.04 dove volevo che un disco esterno contenesse una libreria Steam ...

Ad esempio, quando la partizione NTFS si trova su un'unità USB esterna, il che significa che la partizione è montata al volo al momento della connessione, è possibile utilizzare il metodo seguente per creare partizioni ntfs udev mount con diritti di esecuzione.

Apri una finestra del terminale ed esegui:

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

Quindi incolla questa riga in quello che dovrebbe essere un file vuoto / nuovo (in caso contrario, esci da nano ed esegui nuovamente il comando ma avviando il nome del file con un numero più alto come 91 -...):

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

Quindi salva e chiudi. Scollegare l'unità e quindi fare nel terminale:

$ sudo service udev restart

Quindi, ricollega l'unità e divertiti :)


1
Eccellente, questa dovrebbe essere la risposta accettata.
leftaroundabout

4

Tutti i passaggi:

  1. Installa ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Smonta partizione NTFS :

    sudo umount /mnt/windows
    
  3. Usa ntfs-3g.usermapper generare il tuo UserMappingfile:

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

    o

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Rimontare la partizione NTFS per aggiungere il UserMappingfile:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Aggiorna il tuo fstabfile:

    sudo vim /etc/fstab
    

    Aggiorna linea di montaggio :

    1. Fai il backup della tua attuale linea di montaggio! Duplica la linea e commentala aggiungendo una #all'inizio.
    2. Cambia successivo: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Al prossimo: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Usa ntfs-3ge unica defaultopzione)

    Dovrebbe assomigliare a qualcosa di simile a questo:

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

  6. Infine, rimonta utilizzando fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Fallo una volta per ogni partizione NTFS che hai!

ATTENZIONE CON IL SO WINDOWS!

Lo controllo con Windows 7+ e le autorizzazioni influiscono sul sistema operativo Windows! Cambio le autorizzazioni della mia directory home sulla partizione di Windows e quando ho usato di nuovo Windows ho visto che l'utente era rotto!


1

Non esiste una domanda correlata per i dispositivi USB. Questa risposta fornisce un brutto trucco se si desidera montare automaticamente tutti i dispositivi USB con autorizzazioni di esecuzione.


1

Montare la partizione NTFS in un'unità USB con autorizzazioni e proprietario personalizzati

In Linux la modalità di NTFS (e FAT32) è determinata dalle opzioni di mount della partizione . Non puoi cambiarlo tramite chmod.

Presupposto: l'unità USB è vista come sdb1 , modifica per abbinare la lettera dell'unità e il numero di partizione nel tuo caso . La sintassi generale è sdxn, dove si xtrova la lettera di unità ed nè il numero di partizione, come ad esempio vistosudo lsblk -f

Preparazione

  • Smonta la partizione NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Creare un mountpoint personalizzato (solo se si desidera un nuovo mountpoint), ad esempio con

    sudo mkdir -p /mnt/sd1
    
  • Controlla il uidnumero del tuo ID utente (di solito è 1000, a volte 1001 o 1002 ...)

    grep ^"$USER" /etc/group
    

    e utilizzare quel numero se si desidera acquisire la proprietà (l'impostazione predefinita è root).

Montare la partizione NTFS

Esempio 1 (senza autorizzazioni di esecuzione per i file, nessun accesso per "altri"),

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
  • in questo caso è possibile eseguire lo script this-scriptcon

    bash /mnt/sd1/this-script
    

Esempio 2 (con autorizzazioni di esecuzione per i file, nessun accesso per "altri"),

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
  • In questo caso è possibile eseguire lo script this-scriptcon

    /mnt/sd1/this-script
    

    e puoi anche eseguire programmi eseguibili da questa posizione (non che sia raccomandato).

Esempio 3 (autorizzazioni complete per tutti, che è comodo ma non sicuro, quando ci sono più utenti),

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

/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, temo che l'hardware dell'unità USB sia diventato di sola lettura o "bloccato in rete". Ma potrebbe esserci anche qualche problema con il file system e se il file system è corrotto, potresti essere in grado di risolverlo riparandolo in Windows, con il metodo GUI o con la riga di comando chkdsk /f X:secondo questo link ubuntuforums.org / ... - Se ancora non hai
sudodus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.