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é.
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
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.
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.
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
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.
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.
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:
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.
Ouvrez la ligne de commande Windows. Accédez au répertoire extrait tools
(par défaut) de l'outil usermap
name__. 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
name__. 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 SID
devrait ê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
.
Une fois que vous vous êtes assuré que les SID sont corrects, suivez les instructions du commentaire, autrement dit, remplacez user
dans la ligne user::SID
par votre nom d'utilisateur et group
dans 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.
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:
).
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.
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
(dmask
et fmask
peuvent également fonctionner sans être testés). Choisissez une valeur pour umask
que vous aimez, même si j'ai choisi 077
. Il semble que sans ce paramètre, des autorisations complètes seront accordées à o
name__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
Maintenant (toujours sous Linux) cd
au 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 UserMapping
et le umask
défini dans /etc/fstab
(la correspondance entre les autorisations et umask
né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 à umask
name__. 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.
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 :)
Toutes les étapes:
Installez ntfs-3g
:
Sudo apt-get install -y ntfs-3g
Démonter _ ntfs _ partition :
Sudo umount /mnt/windows
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
Remount NTFS partition pour ajouter le fichier UserMapping
:
mount -a
Sudo mkdir /mnt/windows/.NTFS-3G
Sudo mv UserMapping /mnt/windows/.NTFS-3G/
Mettez à jour votre fichier fstab
:
Sudo vim /etc/fstab
Mettre à jour la ligne de montage :
#
au début.UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
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 0
UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0
Enfin, remontez en utilisant votre fstab
:
Sudo umount /mnt/windows
Sudo mount -a
Faites ceci une fois pour chaque NTFS partition que vous avez!
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!
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.
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