Comment utiliser 'chmod' sur une partition NTFS (ou FAT32)?

129

J'ai un script que je dois exécuter sur une partition NTFS. L'autorisation du script est définie sur 600.

J'ai essayé de modifier les autorisations en exécutant chmod 755 script.sh, ce qui ne signale pas un échec ni quoi que ce soit - mais cela ne modifie pas non plus les autorisations sur le fichier:

$ 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

Comme vous pouvez le constater, il reste inchangé.

Nathan Osman
la source
Une meilleure solution peut être trouvée ici. Ces deux questions doivent être liées!

Réponses:

79

Le mode est déterminé par les options de montage de la partition (vous ne pouvez pas le changer via chmod).

Pour "755" sur les fichiers et "777" sur les répertoires, vous utiliseriez quelque chose comme

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
la source
D'accord, cela expliquerait aussi quelques autres choses.
Nathan Osman
5
Que dois-je mettre en place /dev/whateveret /mnt/whateversi je dois changer la permission de ma partition HDD nommée/media/Prtn
Pranphy
3
Le montage de cette manière conserve-t-il les paramètres d'origine du disque? C'est-à-dire que le montage d'un lecteur Windows est sûr
Jonathan
1
Je règle l'utilisateur sur 'andrew' qui est mon utilisateur principal. Par ls pour la partition ntfs montre que tous les fichiers / répertoires qu’elle contient sont propres à la racine.
deathangel908
La vraie solution est ntfs-3g.usermap. Voir ci-dessous ...
Eduardo Cuomo
86

Contrairement à ce que la plupart des gens croient, NTFS est un système de fichiers compatible POSIX¹ et il est possible d'utiliser des autorisations sur NTFS .

Pour l'activer, vous avez besoin d'un "Fichier de mappage utilisateur" ou donnez simplement l' permissionsoption lors du montage (lorsqu'aucune compatibilité avec Windows n'est requise). Ceci mappe les utilisateurs Linux sur votre système avec les ID utilisateur tels que NTFS / Windows les utilisent en interne.

Voir la page de manuel ntfs-3g pour des informations et des exemples. Si vous avez besoin de plus d’informations, consultez la documentation avancée ntfs-3g sur la propriété et les autorisations .

(Notez que cela ne fonctionne pas sur les systèmes de fichiers FAT.)

¹ Oui, il peut également stocker des noms de fichiers valides sous linux / unix mais pas sous Windows, prend en charge les liens symboliques et les liens physiques, etc.

JanC
la source
4
voici une bonne documentation. en bref: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSet puissudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
moutons volants
1
Cela vous permettra-t-il de définir arbitrairement des autorisations comme chmod 655 /some/filesur la partition NTFS montée sous Linux? J'essaie de comprendre comment fusionner ma partition home de linux dans c: \ Users. L'utilisation de usermap me permettra-t-elle de conserver toutes les autorisations? Je prévoyais de monter le répertoire c: \ Users sur / home sous linux.
trusktr
7
Permettez-moi de souligner à nouveau votre remarque: "lorsqu'aucune compatibilité avec Windows n'est nécessaire". ref: askubuntu.com/questions/92863/…
Vue elliptique du
1
ntfs-3g manpagelien cassé
ctrl-alt-delor
Eduardo Cuomo a écrit un très bon exemple de toutes les étapes nécessaires pour créer un "fichier de mappage utilisateur" ici: askubuntu.com/a/887502/327339
Gabriel Staples
38

Pour les partitions NTFS, utilisez l' permissionsoption de fstab.

Commencez par démonter la partition ntfs.

Identifiez votre UUID de partition avec blkid

sudo blkid

Puis éditer /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Et ajouter ou éditer une ligne pour la partition ntfs

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

Faire un point de montage (si nécessaire)

sudo mkdir /media/windows

Maintenant montez la partition

mount /media/windows

Les options que je vous ai données automonteront automatiquement la partition au démarrage et userspermettront aux utilisateurs de monter et démonter.

Vous pouvez ensuite utiliser chown et chmod sur la partition ntfs.

Panthère
la source
2
Comment ces autorisations sont-elles stockées? Dans ADS? Autres métadonnées?
ζ--
Qu'en est-il de Fat32? J'ai une carte micro sd qui est protégée en écriture et je ne peux pas y accéder, la formater.
Waqas
@RanaMuhammadWaqas - c'est une vieille question, mais vous pouvez aussi la monter avec différentes options. Difficile de savoir quel est votre problème, peut-être identifier votre matériel et poser une question distincte.
Panthère
@ bodhi.zazen usersimplique noexec , nosuid et nodev . n'est-ce pas? Comment les utilisateurs peuvent monter / démonter avec noexecêtre défini?
Khurshid Alam
1
@ EduardoCuomo - Il est peu probable que vous puissiez publier un commentaire dans une réponse indiquant que cela ne fonctionne pas. Quel système de fichiers? Je vous suggère d'ouvrir une question. Vous devez identifier le système de fichiers et publier votre entrée fstab
Panther le
20

En plus de définir fmask et / ou dmask dans la réponse de htorque ci-dessus, si vous souhaitez exécuter des scripts sur le lecteur, je devais également définir l'option de montage "exec".

Ainsi, l'exemple serait:

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

Vous pouvez toujours appeler explicitement l'interpréteur de script, auquel cas les autorisations d'exécution ne sont pas requises. Si le script utilise bash , comme cela peut être vérifié en regardant la première ligne du script, exécutez simplement

bash script.sh

Notez que le script appelle d'autres scripts ou binaires sur la même partition, cela ne fonctionnera pas. Notez également que la stratégie ne fonctionne pas avec les fichiers binaires, contrairement aux fichiers de script textuels écrits en script Bash, Perl, Python, etc.

Loevborg
la source
+1 - Je n'ai jamais pensé à l'invoquer de cette façon.
Nathan Osman
8
Pour exécuter des fichiers binaires, utilisez-les /lib64/ld-linux-x86-64.so.2 ./program.binpour les programmes 64 bits et /lib/ld-linux.so.2 ./program.bin32 bits.
Lekensteyn
8

Selon la section Propriétaires et autorisations de la documentation NTFS-3G, nous pouvons utiliser les options de montage pour contrôler l' accès aux fichiers et leur création . Les combinaisons sont très compliquées (voir les deux tableaux ci-dessous). De plus, je ne lis pas et je ne les ai pas tous. Par exemple, je ne sais pas si les ACL POSIX sont sélectionnés à la compilation ou non du paquet binaire NTFS-3G. Mais le mieux que je sois sorti consiste à utiliser un fichier de mappage utilisateur associé à certaines options de montage pour obtenir un mappage plausible de la propriété du fichier et des autorisations entre Windows et Linux.


Avertissement : C’est uniquement ce qui fonctionne le mieux pour le partage d’une partition de données NTFS (lecteur D:sous Windows) entre Windows 8 à double démarrage et Kubuntu 14.04. Les instructions sont consignées dans une rétrospection attentive mais ne sont pas testées de manière approfondie. Il est trop fatiguant et fastidieux de répéter toute la procédure. Alors suivez-le à vos risques et périls. Mais si vous le faites, partagez votre expérience. Si vous décidez de suivre les instructions, veuillez le lire attentivement pour avoir une image complète avant d’agir. Bonne chance!


Bon, ici vous allez! Les instructions détaillées se composent de trois parties. La partie 1 doit être exécutée sous Windows et la partie 2 sous Linux. La partie 3 est pour le test.

Partie 1

La section Mappage utilisateur de la documentation NTFS-3G spécifie deux versions pour configurer le mappage utilisateur entre Windows et Linux, une version Windows et une version Linux. D'après mon expérience, la version Linux s'est soldée par un échec . Le compte Linux n'a pas été mappé sur mon compte Windows, mais un compte inconnu est apparu sous un SID . Le résultat a été un désastre puisque ce compte inconnu prend possession de tous les fichiers de mon compte Windows. Dans ce cas, les fichiers sous votre compte Windows deviennent inaccessibles, à moins que vous ne disposiez d'un privilège administratif pour reprendre votre propriété. Mais même si vous mangez, c'est toujoursune mauvaise cartographie. Cela signifie que plus tard, tous les fichiers créés sous Linux sont affectés à ce compte inconnu sous Windows et ceux sous Windows sont affectés à root sous Linux (si mes souvenirs sont exacts). Donc, sous Windows, vous devez redevenir propriétaire et sous Linux, changer de propriétaire. Ce n'est pas ce à quoi nous nous attendons. Après plusieurs tentatives sans espoir de résoudre le problème, j'ai abandonné et me suis tourné vers la version Windows. Celui-là a fonctionné. Les instructions détaillées extraites de la section correspondante de la documentation NTFS-3G sont les suivantes:

  1. Téléchargez l' outil usermap , extrayez-le quelque part (dans mon cas, lecteur C:), mieux en dehors de la partition NTFS (dans mon cas, lecteur D:) à partager.

  2. Ouvrez la ligne de commande Windows. Passez au répertoire extrait tools(par défaut) de l' usermapoutil. Puis exécutez la commande suivante:

    C:\tools> mapuser > UserMapping
    

    Cela génère un modèle et le redirige vers un fichier nommé UserMapping. Ouvrez le fichier avec un éditeur de texte, par exemple, le Bloc-notes. Les lignes suivantes devraient apparaître:

    # 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
    

    Vraisemblablement, le premier SIDdevrait être votre SID utilisateur, le second votre SID de groupe. Vous pouvez les vérifier respectivement par les commandes whoami /useret whoami /groups.

  3. Une fois que vous vous êtes assuré que les SID sont corrects, suivez les instructions du commentaire, c’est-à-dire remplacez userla user::SIDligne par votre nom d’utilisateur et groupla :group:SIDligne par le nom de votre groupe principal sous Linux. Sur Ubuntu, ce sont les mêmes. De plus, ajoutez le nom de votre groupe Linux également après le premier deux-points de la user::SIDligne. Donc, la ligne devrait ressembler à quelque chose user:group:SID. Il semble que s’ils ne le font pas, les fichiers créés sous Windows seront affectés à user:rootLinux.

  4. Enregistrez le fichier. Déplacez-le dans un répertoire nommé .NTFS-3G(créez-le s'il n'existe pas encore) sur la partition NTFS à partager (dans mon cas, lecteur D:).

  5. Cette étape concerne le test de la partie 3. Sur la partition NTFS partagée, créez un nouveau répertoire et un nouveau fichier.

Partie 2

Maintenant, démarrez Linux. sudoéditer le fichier /etc/fstab. Ajoutez ou modifiez la ligne de la partition NTFS partagée pour donner le résultat suivant:

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

L'essentiel est de définir le umask( dmasket fmaskpeut également fonctionner mais pas testé). Choisissez une valeur pour umaskvous, même si j'ai choisi 077. Il semble que sans ce paramètre, des autorisations complètes leur soient accordées opour les fichiers nouvellement créés.

Enregistrez le fichier. Maintenant sudo mountou remontez ( sudo umountet ensuite sudo mount) la partition NTFS partagée (dans mon cas /data):

$ sudo mount /data

Partie 3

Maintenant (toujours sous Linux) cdau point de montage (dans mon cas /data), ls -lles fichiers sont là. Vérifiez si leur propriété et leurs autorisations correspondent respectivement à celles spécifiées dans le UserMappingfichier et celles que umaskvous avez définies /etc/fstab(la correspondance entre les autorisations et umasknécessite un calcul complémentaire, voir man (1) umask pour plus d'informations). S'ils le font, félicitations, un demi-objectif est atteint. Sinon, pauvre toi. Demandez à Ubuntu ou Windows.

Créez ensuite un nouveau répertoire et un nouveau fichier. ls -lpour vérifier leur propriété et leurs autorisations. La propriété doit être votre nom d'utilisateur et votre groupe principal, comme d'habitude. Les autorisations doivent correspondre à la umask. Maintenant, redémarrez votre ordinateur et démarrez Windows. Localisez sur la partition NTFS partagée le répertoire et le fichier que vous venez de créer sous Linux. Vérifiez leurs propriétés pour voir si elles sont attribuées à votre compte Windows. Si tel est le cas, félicitations, vous avez terminé. Sinon, pas de chance. Demandez à Windows ou à Ubuntu.

EOF

réflexionniste
la source
6

Ancien fil, je le sais, mais toujours pertinent et manquant d'un conseil de cas d'utilisation particulier, composé de différentes suggestions sur divers autres forums / threads et testé sur Ubuntu GNOME 13.04 où je voulais un disque externe contenant une bibliothèque Steam ...

Par exemple, lorsque la partition NTFS se trouve sur un lecteur USB externe (ce qui signifie que la partition est montée à la volée lors de la connexion), vous pouvez utiliser la méthode suivante pour créer des partitions udev mount ntfs avec des droits d'exécution.

Ouvrez une fenêtre de terminal et faites:

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

Ensuite, collez cette ligne dans ce qui devrait être un fichier vide / nouveau (sinon, quittez nano et relancez la commande en commençant par le nom du fichier avec un numéro plus élevé, comme 91 -...):

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

Puis enregistrez et fermez. Débranchez le lecteur puis faites dans le terminal:

$ sudo service udev restart

Ensuite, branchez le lecteur et profitez-en :)

utilisateur17254
la source
1
Excellent, cela devrait être la réponse acceptée.
leftaroundabout
4

Toutes les étapes:

  1. Installer ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Démontez la partition NTFS :

    sudo umount /mnt/windows
    
  3. Utilisez ntfs-3g.usermappour générer votre UserMappingfichier:

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

    ou

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Remontez la partition NTFS pour ajouter un UserMappingfichier:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Mettez à jour votre fstabfichier:

    sudo vim /etc/fstab
    

    Mettre à jour la ligne de montage :

    1. Sauvegardez votre ligne de montage actuelle! Dupliquez la ligne et commentez-la en ajoutant un #au début.
    2. Changer ensuite: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Par suivant: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Utiliser ntfs-3get seule defaultoption)

    Ça devrait ressembler a quelque chose comme ca:

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

  6. Enfin, remontez en utilisant votre fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Faites cela une fois pour chaque partition NTFS que vous avez!

AVERTISSEMENT SOUS WINDOWS OS!

Je vérifie avec Windows 7+ et les autorisations affectent le système d'exploitation Windows! Je modifie les autorisations de mon répertoire personnel sur la partition Windows et, lorsque j'utilisais encore Windows, je pouvais voir que l'utilisateur était cassé!

Eduardo Cuomo
la source
1

Il y a une question connexe pour les périphériques USB. Cette réponse fournit un bidouillage moche si vous souhaitez monter chaque périphérique USB automatiquement avec des autorisations d'exécution.

lombrique
la source
1

Monter une partition NTFS sur un lecteur USB avec des autorisations et un propriétaire personnalisés

Sous Linux, le mode NTFS (et FAT32) est déterminé par les options de montage de la partition . Vous ne pouvez pas le changer via chmod.

Hypothèse: le lecteur USB est vu comme sdb1 , modifiez-le pour correspondre à la lettre du lecteur et au numéro de partition dans votre cas . La syntaxe générale est la suivante sdxn: où xest la lettre du lecteur et nle numéro de la partition, comme indiqué par exemplesudo lsblk -f

En train de préparer

  • Démontez la partition NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Créez un point de montage personnalisé (uniquement si vous souhaitez un nouveau point de montage), par exemple avec

    sudo mkdir -p /mnt/sd1
    
  • Vérifiez votre uidnuméro d'utilisateur (généralement 1000, parfois 1001 ou 1002 ...)

    grep ^"$USER" /etc/group
    

    et utilisez ce numéro si vous souhaitez en prendre possession (par défaut root).

Montez la partition NTFS

Exemple 1 (sans autorisations d'exécution pour les fichiers, pas d'accès pour les «autres»),

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
  • dans ce cas, vous pouvez exécuter le script this-scriptavec

    bash /mnt/sd1/this-script
    

Exemple 2 (avec des autorisations d'exécution pour les fichiers, aucun accès pour les «autres»),

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
  • Dans ce cas, vous pouvez exécuter le script this-scriptavec

    /mnt/sd1/this-script
    

    et vous pouvez aussi exécuter des programmes exécutables à partir de cet emplacement (même si cela n’est pas recommandé).

Exemple 3 (autorisations complètes pour tout le monde, ce qui est pratique mais non sécurisé lorsqu'il y a plusieurs utilisateurs),

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
la source
/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, je crains que le matériel de votre clé USB ne soit en lecture seule ou «verrouillé en grille». Mais il pourrait aussi y avoir un problème avec le système de fichiers, et si le système de fichiers est corrompu, vous pourrez peut-être le réparer en le réparant sous Windows, soit avec la méthode GUI, soit avec la ligne de commande correspondant chkdsk /f X:à ce lien ubuntuforums.org /… - Si toujours pas de chance, sauvegardez les données et essayez selon askubuntu.com/questions/144852/…
sudodus