Come si usa 'chmod' su una partizione NTFS (o FAT32)?

118

Ho uno script che devo eseguire su una partizione NTFS. Il permesso dello script è impostato su 600.

Ho provato a 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.

    
posta Nathan Osman 07.11.2010 - 00:12
fonte

10 risposte

75

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

Per '755' su file e '777' su directory si dovrebbe usare qualcosa come

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
    
risposta data htorque 07.11.2010 - 00:35
fonte
78

Contrariamente a quanto molti credono, NTFS è un filesystem compatibile con POSIX, e è possibile utilizzare le autorizzazioni su NTFS .

Per abilitare questo, è necessario un "File di mappatura utente" o semplicemente dare l'opzione permissions durante il montaggio (quando non è necessaria alcuna compatibilità con Windows). Questo mappa gli utenti linux sul tuo sistema con gli ID utente come NTFS / Windows li usano internamente.

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

(Nota che questo non funziona sui filesystem FAT.)

¹ Sì, può anche memorizzare nomi di file validi in linux / unix ma non in Windows, supporta symlinks & amp; hardlink, ecc.

    
risposta data JanC 02.11.2011 - 17:57
fonte
34

Per le partizioni NTFS, usa l'opzione permissions 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 linea 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 dato, auto , montano automaticamente la partizione quando fai il boot e users consente agli utenti di montare e smontare.

Puoi quindi usare chown e chmod nella partizione ntfs.

    
risposta data Panther 28.12.2011 - 17:31
fonte
20

Oltre ad impostare fmask e / o dmask nella risposta di htorque sopra, se vuoi eseguire script sul drive, ho dovuto anche impostare l'opzione di mount "exec".

Quindi l'esempio sarebbe:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
    
risposta data dbrews 14.12.2010 - 09:26
fonte
13

È sempre possibile invocare esplicitamente l'interprete di script, nel qual caso non sono richieste autorizzazioni di esecuzione. Se lo script usa bash , come può essere verificato guardando la prima riga dello script, esegui

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 anziché i file di script testuali scritti in Bash Script, Perl, Python o simili.

    
risposta data loevborg 14.12.2010 - 11:00
fonte
8

In base alla sezione Proprietà e permessi del NTFS-3G documentazione, possiamo usare le opzioni di mount per controllare il file accesso e creazione . Le combinazioni sono molto complicate (vedi i due tavoli lì). Inoltre non leggo e li ottengo tutti. Ad esempio, non so se gli ACL POSIX siano selezionati in fase di compilazione o meno del pacchetto binario NTFS-3G. Ma il meglio che ho imparato è usare un file User Mapping combinato con qualche supporto opzioni per approssimare una mappatura plausibile della proprietà dei file e delle autorizzazioni tra Windows e Linux.

Avviso : questo è solo ciò che funziona meglio per la condivisione di una partizione dati NTFS (unità D: su Windows) tra Windows 8 con doppio avvio e Kubuntu 14.04. Le istruzioni sono registrate in attenta retrospezione ma non completamente testate. È troppo faticoso e noioso ripetere di nuovo l'intera procedura. Quindi seguilo a tuo rischio. Ma se lo fai, condividi la tua esperienza. Se decidi di seguire le istruzioni, ti preghiamo di leggerlo completamente per avere un'intera foto prima di agire. Buona fortuna!

Bene, ecco qua! 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 User Mapping della documentazione NTFS-3G specifica due versioni per imposta la mappatura utente tra Windows e Linux, una versione Windows e una versione Linux. La mia esperienza è stata che la versione Linux si è conclusa con un miss . L'account Linux era non mappato sul mio account Windows, ma qualche account sconosciuto è apparso sotto un SID . Il risultato è stato un casino dato che questo account sconosciuto si appropria di tutti i file del mio account Windows. In tale situazione, a meno che non si disponga di un privilegio amministrativo per riprendere la proprietà, i file sotto l'account di Windows diventano inaccessibili. Ma anche se maneggi, è ancora una mappatura errata. 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 non ricordo male). Quindi su Windows è necessario riprendere la proprietà e su Linux cambiare proprietà. Non è quello che ci aspettiamo che sia. Dopo svariati tentativi senza speranza per risolvere il problema, ho rinunciato e sono passato alla versione per Windows. Quello ha funzionato. Seguono istruzioni dettagliate estratte dalla relativa sezione della documentazione NTFS-3G:

  1. Scarica lo strumento usermap , estrai da qualche parte (nel mio caso, guida C: ), meglio fuori dalla 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 strumento usermap . Quindi eseguire il seguente comando:

    C:\tools> mapuser > UserMapping
    

    Questo genera un modello e lo reindirizza a un file chiamato 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 SID dovrebbe essere il SID dell'utente mentre il secondo il SID del tuo gruppo. Puoi controllarli rispettivamente con i comandi whoami /user e whoami /groups .

  3. Dopo esserti assicurato che i SID siano corretti, seguendo le istruzioni nel commento, ovvero modifica user nella riga user::SID al tuo nome utente e group nella riga :group:SID a il nome del tuo gruppo principale su Linux. Su Ubuntu, sono uguali. Inoltre, aggiungi il nome del tuo gruppo Linux anche dopo i primi due punti della riga user::SID . Quindi la linea dovrebbe apparire qualcosa come user:group:SID . Sembra che in caso contrario i file creati su Windows verranno assegnati a user:root su Linux.

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

  5. Questo passaggio è per il test nella parte 3. Sulla partizione NTFS condivisa, crea una nuova directory e un nuovo file.

Parte 2

Ora avvia in Linux. sudo modifica il file /etc/fstab . Aggiungi o modifica la linea per la partizione NTFS condivisa con qualcosa del tipo:

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

L'essenziale è impostare umask ( dmask e fmask possono anche funzionare ma non essere testati). Scegli un valore per umask che ti piace, anche se ho scelto 077 . Sembra senza questa impostazione, le autorizzazioni complete saranno date a o thers per i file appena creati.

Salva il file.Ora sudo mount o remount ( sudo umount e poi sudo mount ) la partizione NTFS condivisa (nel mio caso /data ):

$ sudo mount /data

Parte 3

Ora (ancora su Linux) cd al punto di montaggio (nel mio caso, /data ), ls -l i file lì. Verifica se la proprietà e le autorizzazioni corrispondono rispettivamente a quelle specificate nel file UserMapping e a umask impostate in /etc/fstab (la corrispondenza tra autorizzazioni e umask richiede un calcolo del complemento, vedi man (1) umask per ulteriori informazioni). Se lo fanno, congratulazioni, metà obiettivo è raggiunto. Altrimenti, povero te. Chiedi Ubuntu o Windows.

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

EOF

    
risposta data reflectionalist 23.08.2014 - 00:35
fonte
5

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

Quando la partizione NTFS si trova su un'unità USB esterna, ad esempio - il che significa che la partizione viene montata al volo dopo la connessione - è possibile utilizzare il seguente metodo per rendere udev mount ntfs partitions con diritti di esecuzione.

Apri una finestra del terminale e fai:

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

Quindi incolla questa riga in quello che dovrebbe essere un file vuoto / nuovo (se no, quindi esci da nano e riemetti 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 il disco e goditi:)

    
risposta data user17254 15.09.2013 - 01:51
fonte
2

Tutti i passaggi:

  1. Installa ntfs-3g :

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

    sudo umount /mnt/windows
    
  3. Utilizza ntfs-3g.usermap per generare il tuo file UserMapping :

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

    o

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

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

    sudo vim /etc/fstab
    

    Aggiorna mount line:

    1. Esegui il backup della tua attuale linea di montaggio! Duplica la riga e commentala aggiungendo un # all'inizio.
    2. Modifica successiva: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Per il prossimo: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Usa ntfs-3g e solo default opzione)

    Dovrebbe assomigliare a questo:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 % Co_de%

  6. Infine, rimonta utilizzando UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 :

    sudo umount /mnt/windows
    sudo mount -a
    

Fai questo una volta per ogni partizione NTFS !

ATTENZIONE CON IL SISTEMA OPERATIVO WINDOWS!

Lo controllo con Windows 7 + e le autorizzazioni influiscono sul sistema operativo Windows! Ho cambiato i permessi della mia Home Directory sulla partizione di Windows, e quando ho usato di nuovo Windows ho potuto vedere che l'utente era rotto!

    
risposta data Eduardo Cuomo 26.02.2017 - 15:49
fonte
1

C'è n domande correlate per dispositivi USB. Questa risposta fornisce un brutto trucco se si desidera montare automaticamente ogni dispositivo USB con le autorizzazioni di esecuzione.

    
risposta data lumbric 28.12.2011 - 16:06
fonte
1

Monta la partizione NTFS in un'unità USB con permessi personalizzati e proprietario

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

Assunzione: 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 x è la lettera dell'unità e n è il numero di partizione visualizzato per esempio sudo lsblk -f

Preparazione

  • Smonta la partizione NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Crea un punto di montaggio personalizzato (solo se desideri un nuovo punto di montaggio), ad esempio con

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

    grep ^"$USER" /etc/group
    

    e usa quel numero se vuoi acquisire la proprietà (l'impostazione predefinita è root ).

Monta 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 puoi eseguire lo script this-script con

    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 puoi eseguire lo script this-script con

    /mnt/sd1/this-script
    

    e puoi eseguire anche i 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
    
risposta data sudodus 15.09.2017 - 13:02
fonte

Leggi altre domande sui tag