web-dev-qa-db-fra.com

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

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

J'ai tenté de modifier les autorisations en exécutant chmod 755 script.sh, 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é.

124
Nathan Osman

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
78
htorque

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'option permissions lors du montage (lorsqu'aucune compatibilité avec Windows n'est requise). Cela 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 de 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.

83
JanC

Pour les partitions NTFS, utilisez l'option permissions dans fstab.

Commencez par démonter la partition ntfs.

Identifiez votre UUID de partition avec blkid

Sudo blkid

Puis éditez /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, auto, monteront automatiquement la partition lorsque vous démarrez et users permet aux utilisateurs de monter et de démonter.

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

35
Panther

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
20
dbrews

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

bash script.sh

Notez que le script appelle d'autres scripts ou fichiers 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 ou similaire.

13
loevborg

Selon la section Propriété et autorisations de la documentation NTFS-3G, nous pouvons utiliser les options de montage pour contrôler le fichier , l'accès et . 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 au moment de la compilation du paquet binaire NTFS-3G. Mais le mieux que je sois sorti consiste à utiliser un fichier ser Mapping associé à certaines options de montage pour obtenir un mappage plausible de la propriété du fichier et des autorisations entre Windows et Linux.


Avertissement : il s’agit uniquement de 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 de jouer. 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 ser Mapping 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. Mon expérience a été que la version de Linux a fini avec un miss . Le compte Linux était non mappé sur mon compte Windows, mais un compte inconnu apparaissait 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 cette situation, à moins que vous ne disposiez d'un privilège administratif pour reprendre votre propriété, les fichiers de votre compte Windows deviennent inaccessibles. Mais même si vous le mangez, c'est toujours un mauvais mappage. 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 sermap , 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. Accédez au répertoire extrait tools(par défaut) de l'outil usermapname__. Puis exécutez la commande suivante:

    C:\tools> mapuser > UserMapping
    

    Cela génère un modèle et le redirige vers un fichier nommé UserMappingname__. Ouvrez le fichier avec un éditeur de texte, par exemple Notepad, vous devriez voir les lignes suivantes:

    # 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, tandis que le second serait votre SID de groupe. Vous pouvez les vérifier respectivement avec les commandes whoami /user et whoami /groups.

  3. Une fois que vous vous êtes assuré que les SID sont corrects, suivez les instructions du commentaire, autrement dit, remplacez userdans la ligne user::SID par votre nom d'utilisateur et groupdans la ligne :group:SID par votre nom de groupe principal sous Linux. Sur Ubuntu, ce sont les mêmes. De plus, ajoutez le nom de votre groupe Linux également après les premiers points de la ligne user::SID. La ligne devrait donc ressembler à quelque chose comme user:group:SID. Il semble que s’ils ne le font pas, les fichiers créés sous Windows seront affectés à user:root sous Linux.

  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édite 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 umask(dmasket fmaskpeuvent également fonctionner sans être testés). Choisissez une valeur pour umaskque vous aimez, même si j'ai choisi 077. Il semble que sans ce paramètre, des autorisations complètes seront accordées à oname__thers pour les fichiers nouvellement créés.

Enregistrez le fichier. Maintenant Sudo mount ou remount (Sudo umount puis 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 -l les fichiers qui s'y trouvent. Vérifiez si leur propriété et leurs autorisations correspondent respectivement à celles que vous avez spécifiées dans le fichier UserMappinget le umaskdéfini dans /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 -l pour 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 à umaskname__. 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

8
reflectionalist

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 recherchais un disque externe contenant une bibliothèque Steam ...

Lorsque la partition NTFS se trouve sur un lecteur USB externe, par exemple (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 démarrant 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 :)

6
user17254

Toutes les étapes:

  1. Installez ntfs-3g:

    Sudo apt-get install -y ntfs-3g
    
  2. Démonter _ ntfs _ partition :

    Sudo umount /mnt/windows
    
  3. Utilisez ntfs-3g.usermap pour générer votre fichier UserMapping:

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

    ou

    Sudo ntfs-3g.usermap /dev/sdb1
    
  4. Remount NTFS partition pour ajouter le fichier UserMapping:

    mount -a
    Sudo mkdir /mnt/windows/.NTFS-3G
    Sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Mettez à jour votre fichier fstab:

    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 next: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Utilisez ntfs-3g et uniquement l'option default)

    Ça devrait ressembler a quelque chose comme ca:

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

  6. Enfin, remontez en utilisant votre fstab:

    Sudo umount /mnt/windows
    Sudo mount -a
    

Faites ceci une fois pour chaque NTFS partition 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'utilise à nouveau Windows, je constate que l'utilisateur est en panne!

4
Eduardo Cuomo

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.

1
lumbric

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, modifier pour correspondre à la lettre de lecteur et au numéro de partition dans votre cas . La syntaxe générale est la suivante: sdxn, où x est la lettre du lecteur et n est le numéro de partition vu par exemple par Sudo lsblk -f

Préparation

  • 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 le numéro uid de votre ID utilisateur (généralement 1000, parfois 1001 ou 1002 ...)

    grep ^"$USER" /etc/group
    

    et utilisez ce numéro si vous souhaitez récupérer la propriété (la valeur par défaut est root).

Montez la partition NTFS

Exemple 1 (sans autorisation d'exécution pour les fichiers, pas d'accès pour '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-script avec

    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-script avec

    /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
1
sudodus