#1 Le 03/06/2008, à 12:36
- avr
Automount d'une clé USB fat32: tous les fichiers sont exécutables
Bonjour,
Quand j'insère ma clé USB, qui est en fat32, tous les fichiers (et répertoires) sont exécutables, c'est à dire ont: -rwxr-xr-x .
Or, j'aimerais qu'il ne soient pas exécutables, ça me gonfle de me taper plein de chmod à chaque fois. Cependant, ça m'arrangerait que les répertoires le soient, sinon on ne peut plus rentrer dedans.
Comme c'est de l'automount, je ne vois pas trop où ça se configure (et je n'aime pas trop toucher aux fichiers de conf' du style fstab... j'ai toujours l'impression que je vais tout péter). Dans la doc du site, on tombe toujours sur des solutions gnome (via le gnome-volume-manager). Je crois comprendre que pour KDE, ça se fait avec hald, mais je ne suis sûr de rien.
Donc, est-il possible, lors d'un automount de ma clé, de n'avoir que les répertoires en drwxr-xr-x et tous les autres fichers en -rw-r--r-- ? Si oui, comment?
Merci.
Hors ligne
#2 Le 03/06/2008, à 16:03
- phossele
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
en fait, FAT32 ne gère pas les droits. Donc ce que tu demandes est impossible en l'état.
Avatar par Killyoh sur Crystalxp.net
Tout le monde est capable de créer un système incapable de fonctionner.
-+- Georges Courteline -+-
Hors ligne
#3 Le 03/06/2008, à 16:10
- avr
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Ah ouais...
Et un script (bash par exemple) qui se lancerait au moment de l'automount et qui ferait des chmod comme je veux, c'est possible?
J'y avais pensé, mais je ne suis pas calé en bash et la récursivité me pose un problème que je ne vois pas comment résoudre (i.e. si répertoire rentrer dedans, changer les droits, et si répertoire(s), bah! rentrer dedans et recommencer, et anisi de suite).
Hors ligne
#4 Le 03/06/2008, à 16:16
- wblitz
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
en fait, FAT32 ne gère pas les droits
tu peux aller modifier le fichier /etc/fstab pour spécifier que tu rends inexécutables les fichiers présents sur la clé usb avec l'option "noexec". par exemple :
/dev/<device de ta clé usb> /media/ma_cle_usb vfat users,rw,noexec 0 0
qui te permettra de monter la clé sans utiliser sudo (un simple mount /media/ma_cle_usb fonctionnera), en lecture/écriture (rw) et sans les droits d'exécution (noexec)
ainsi aucun script du répertoire /media/ma_cle_usb (ou de l'un de ses sous-répertoires) ne pourra être exécuté sans avoir été copié au préalable sur un répertoire d'une autre partition. et tu pourras bien entendu toujours aller lire ce qu'il y a sur la clé.
après je ne sais pas si ça convient à ce que tu veux exactement.
"Un optimiste, c'est un homme qui plante deux glands et qui s'achète un hamac" - Jean de Lattre de Tassigny
Pensez à mettre [RÉSOLU] dans le sujet de vos posts une fois qu'ils le sont...
quelques docs
Hors ligne
#5 Le 04/06/2008, à 10:31
- avr
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
tu peux aller modifier le fichier /etc/fstab pour spécifier que tu rends inexécutables les fichiers présents sur la clé usb avec l'option "noexec". par exemple :
/dev/<device de ta clé usb> /media/ma_cle_usb vfat users,rw,noexec 0 0
Arrêtez-moi si je dis une connerie (c'est tout-à-fait possible...), mais les ports USB que j'utilise pour mes périphériques de stockage sont en façade. Avec cette méthode, que se passe-t'il si ma clé (qui est en vfat) est branchée en 2e? Si je la branche en 1er, elle se retrouve sur /dev/sdb1. Mais si, par exemple, je branche un DD externe d'abord, elle sera sur /dev/sdb2, non?
Et, comble de l'emm**dement, mon DD externe (USB aussi) est formaté en ext3, lui. Donc, si je le branche et que j'ai cette ligne dans le fstab (avec vfat), je ne risque pas d'avoir un pb?
En fait, quand je mets ma clé, j'ai cette ligne qui apparaît dans le mtab:
/dev/sdb1 /media/LEXAR\040MEDIA vfat rw,nosuid,nodev,noatime,uhelper=hal,flush,uid=1000,utf8,shortname=lower 0 0
Je suppose qu'il y a un démon qui permet de mettre toutes les options. À la limite, je pourrais lui demander qu'il mette également les bonnes options, mais i) je ne sais pas quel est ce démon et ii) je ne sais pas comment il fait.
En réalité, j'aimerais qu'il (le démon) me mette fmask à 133 et dmask à 022 quand il monte une vfat (c'est ce que j'ai dans mon fstab pour une partition d'échange Kubuntu<->Windows). Et je ne sais pas quel est ce démon...
Hors ligne
#6 Le 04/06/2008, à 16:25
- avr
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Bon, d'après la doc, ce n'est pas KDE qui se charge de l'automount (contrairement à gnome, si j'ai bien compris). Ça passe par les démons de hal, udev et dbus... Pas simple pour s'en sortir!
En passant par udev, je ne pense pas que ce que je veux (fmask=133 et dmask=022 pour les filesystems vfat) soit possible: la doc parle de mode ("MODE=XXXX") que l'on édite dans les règles (rules.d/) mais indépendamment du "type" de fichier (fichier "normal" ou répertoire).
J'ai essayé avec hal, mais franchement, j'ai du mal avec la doc. Sur le forum anglophone, il y a le post #8 qui propose quelque chose qui s'approche, mais j'ai essayé et ça ne marche pas. Peut-être à cause de versions différentes, mon fichier /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi a l'air différent de celui proposé (déjà, ce n'est pas le même nom) (le post date de juin 2006). Je n'ai pas de clé volume.policy.mount_option.umask, mais j'ai une "section":
<!-- allow these mount options for vfat -->
<match key="volume.fstype" string="vfat">
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
<append key="volume.mount.valid_options" type="strlist">utf8</append>
<append key="volume.mount.valid_options" type="strlist">shortname=</append>
<append key="volume.mount.valid_options" type="strlist">codepage=</append>
<append key="volume.mount.valid_options" type="strlist">iocharset=</append>
<append key="volume.mount.valid_options" type="strlist">umask=</append>
<append key="volume.mount.valid_options" type="strlist">dmask=</append>
<append key="volume.mount.valid_options" type="strlist">fmask=</append>
<append key="volume.mount.valid_options" type="strlist">uid=</append>
<append key="volume.mount.valid_options" type="strlist">flush</append>
</match>
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="FreeBSD">
<append key="volume.mount.valid_options" type="strlist">longnames</append>
<append key="volume.mount.valid_options" type="strlist">shortnames</append>
<append key="volume.mount.valid_options" type="strlist">nowin95</append>
<append key="volume.mount.valid_options" type="strlist">-u=</append>
<append key="volume.mount.valid_options" type="strlist">-g=</append>
<append key="volume.mount.valid_options" type="strlist">-m=</append>
<append key="volume.mount.valid_options" type="strlist">-M=</append>
<append key="volume.mount.valid_options" type="strlist">-L=</append>
<append key="volume.mount.valid_options" type="strlist">-D=</append>
<append key="volume.mount.valid_options" type="strlist">large</append>
</match>
</match>
J'ai remplacé "fmask=" (resp. "dmask=") par "fmask=133" (resp. "dmask=022"), sans succès (avec redémarrage de l'ordi pour être sûr que le démon reparte); j'ai essayé de mettre la clé
<merge key="volume.policy.mount_option.fmask" type="string">0133</merge>
comme sur le post (après le match à "Linux" de la clé correspondante -- freedsktop.org blabla --), ça ne le fait toujours pas.
Bref, je crois que je vais lâcher l'affaire... En tout cas, je regarderai les possibilité avec dbus + tard.
Hors ligne
#7 Le 05/06/2008, à 15:44
- avr
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Bon, en fait, "quelque chose" modifie les valeurs de hal, mais je ne sais pas quoi. En effet, le fichier /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi agit sur hal et la manière dont il doit gérer les volumes vfat. Or quand j'insère ma clé USB, un lshal me donne (LEXAR MEDIA est le nom de ma clé, qui est sur /dev/sdb1):
(...)
udi = '/org/freedesktop/Hal/devices/volume_label_LEXAR_MEDIA'
block.device = '/dev/sdb1' (string)
(...)
volume.mount.valid_options = {'ro', 'sync', 'dirsync', 'noatime', 'nodiratime', 'noexec', 'quiet', 'remount', 'exec', 'utf8', 'shortname=', 'codepage=', 'iocharset=', 'umask=', 'dmask=', 'fmask=', 'uid=', 'flush'} (string list)
ce sont les options du fichier original, non modifié. Mais un cat /etc/mtab renvoie:
(...)
/dev/sdb1 /media/LEXAR\040MEDIA vfat rw,nosuid,nodev,noatime,uhelper=hal,flush,uid=1000,utf8,shortname=lower 0 0
et là, on voit que mon volume est en rw (au lieu de ro définit par hal).
Si quelqu'un connaît le programme qui intervient alors, je suis preneur...
Hors ligne
#8 Le 12/07/2008, à 20:50
- tnemeth
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
et là, on voit que mon volume est en rw (au lieu de ro définit par hal).
Non, non. Dans ton extrait, "ro" n'est qu'une des options VALIDES, pas une option appliquée.
Théoriquement, pour faire ce que nous souhaitons, il faudrait faire ceci :
<device>
<match key="volume.fstype" string="vfat">
<match key="@block.storage_device:storage.hotpluggable" bool="true">
<merge key="volume.policy.mount_option.fmask=133" type="bool">true</merge>
</match>
<match key="@block.storage_device:storage.removable" bool="true">
<merge key="volume.policy.mount_option.fmask=133" type="int">true</merge>
</match>
</match>
</device>
à adpater suivant les cas. Référence : http://www.mythic-beasts.com/~mark/random/hal/
Cependant, après moultes essais, ce n'est toujours pas fonctionnel. Personnellement je l'ai mis
dans /etc/hal/fdi/policy/preferences.fdi mais cela n'a aucun effet
Du coup, la solution que j'ai trouvé est la suivante (très mauvaise, mais temporaire le temps de
trouver une réelle solution) :
OVERLOAD=0
if [ "$HAL_PROP_VOLUME_FSTYPE" = "vfat" -a "$HAL_PROP_LINUX_HOTPLUG_TYPE" = "3" ]; then
OVERLOAD=1
fi
OPTIONS=""
ADD=0
for i in "$@" ; do
OPT="$i"
if [ $ADD = 1 ]; then
OPT="$OPT,fmask=133"
ADD=0
fi
if [ $OVERLOAD = 1 -a "$OPT" = "-o" ]; then
ADD=1
fi
OPTIONS="$OPTIONS $OPT"
done
exec mount-orig $OPTIONS
J'ai mis ce code dans le fichier /bin/mount-script et j'ai renommé mount en mount-orig puis j'ai
fait un lien symbolique /bin/mount -> /bin/mount-script :
thomas@cixi:~$ ls -l /bin/mount*
lrwxrwxrwx 1 root root 12 2008-07-12 17:46 /bin/mount -> mount-script*
-rwsr-xr-x 1 root root 81368 2008-04-29 13:57 /bin/mount-orig*
-rwsr-xr-x 1 root root 735 2008-07-12 21:16 /bin/mount-script*
(prêtez attention aux permissions).
#9 Le 12/07/2008, à 23:10
- tnemeth
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Bon.
J'ai cherché dans le nainternette : visiblement ce n'est pas le pb de hal. Sous Gnome il semble qu'il est
possible de spécifier ces paramètres moyennant quelques manipulations.
Il s'avère que le pb vient plutôt de KDE. Je viens de fouiller dans les sources de KDE : c'est dans une des
bibliothèques chargées par kded : mediamanager. Et dans les sources de mediamanager relatives à hal,
il n'y a pas la possibilité de modifier fmask, umask ni dmask.
Dommage. Reste à remplir un bugreport.
#10 Le 13/07/2008, à 20:37
- Link31
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Arrêtez-moi si je dis une connerie (c'est tout-à-fait possible...), mais les ports USB que j'utilise pour mes périphériques de stockage sont en façade. Avec cette méthode, que se passe-t'il si ma clé (qui est en vfat) est branchée en 2e? Si je la branche en 1er, elle se retrouve sur /dev/sdb1. Mais si, par exemple, je branche un DD externe d'abord, elle sera sur /dev/sdb2, non?
Et, comble de l'emm**dement, mon DD externe (USB aussi) est formaté en ext3, lui. Donc, si je le branche et que j'ai cette ligne dans le fstab (avec vfat), je ne risque pas d'avoir un pb?
Pas si tu mets /dev/disk/by-uuid/[uuid_de_ta_partition] ou /dev/disk/by-label/[label_de_ta_partition] à la place de /dev/sdb1 dans le fstab.
(en théorie, mais c'est sans compter les problèmes que peuvent poser udev, hal et co.)
Hors ligne
#11 Le 15/07/2008, à 17:25
- avr
Re : Automount d'une clé USB fat32: tous les fichiers sont exécutables
Bonjour, et merci pour vos réponses. On peut dire que j'ai passé pas mal de temps sur cette histoire...
Déjà, il a fallu que je comprenne l'histoire des umask. Sur wikipédia(fr), il est marqué que umask détermine les droits par complétion de 0666 pour les fichiers et 0777 pour les répertoires (fichiers=fichiers réguliers [regular files], car sous Linux, tout est fichier...). En fait, NON! c'est par complétion de 0777 pour tous, sinon ma ligne (pour une partition fat32 sur mon dur):
UUID=blabla /dos vfat utf8,dmask=022,fmask=133,gid=46 0 1
du /etc/fstab ne me donnerai pas les droits que je veux...
En plus, j'ai effectivement compris que l'automount sous KDE, c'est vraiment le binz (vs Gnome, où à priori gnome-volume-manager fait ça très bien). La description du paquet kdebase-kio-plugins (une fois que t'as compris ce qu'est en gros un kioslave) te dit que sous KDE, ça marche avec hal (donc udev) et pmount. Comme je n'ai pas pmount, je me suis orienté vers HAL.
Et tu t'aperçois que HAL, en fait, ne gère pas l'automount, mais fournit une "liste d'objet" (object list) pour le montage. Car tu as beau modifier ton /usr/share/hal/fdi/policy/10ovendor/20-storage-methods.fdi, où tu rajoutes:
(...)
<!-- allow these mount options for vfat -->
<match key="volume.fstype" string="vfat">
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
(...)
<append key="volume.mount.valid_options" type="strlist">umask=</append>
<append key="volume.mount.valid_options" type="strlist">dmask=</append>
<append key="volume.mount.valid_options" type="strlist">fmask=</append>
(...)
</match>
puis ton /etc/hal/fdi/policy/preferences.fdi:
<!--AVR-->
<device>
<match key="volume.fstype" string="vfat">
<merge key="volume.policy.mount_option.fmask=" type="int">0133</merge>
<merge key="volume.policy.mount_option.dmask=" type="int">0022</merge>
</match>
</device>
<!--/AVR-->
eh bien tu crois que tout est bon, surtout quand lshal te donne (c'est un diff sans/avec ma clé):
+ volume.label = 'LEXAR MEDIA' (string)
(...)
+ volume.mount.valid_options = {'ro', 'sync', 'dirsync', 'noatime', 'nodiratime', 'noexec', 'quiet', 'remount', 'exec', 'utf8', 'shortname=', 'codepage=', 'iocharset=', 'umask=', 'dmask=', 'fmask=', 'uid=', 'flush'} (string list)
//Ça, c'était /usr/share/hal/fdi/policy/10ovendor/20-storage-methods.fdi
+ volume.mount_point = '/media/LEXAR MEDIA' (string)
(...)
+ volume.policy.mount_option.dmask= = 18 (0x12) (int)
+ volume.policy.mount_option.fmask= = 91 (0x5b) (int)
//J'espère que vous avez révisé vos changements de base...
(...)
À ce stade, tu n'as déjà plus de cheveux quand tu vois que tes droits n'ont pas changé...
Google n'est pas mon ami, c'est devenu mon amoureux, et dans KDE, tu comprends que cette "object list" est géré par le media manager de KDE. Donc, tu vas dans ~/.kde/share/config/ et tu rajoutes 2 lignes à ton mediamanagerrc :
fmask=0133
dmask=0022
tu redémarres pour la 100 000e fois ton ordi (c'est ça ou redémarrer des démons, mais faut trouver combien, lesquels, dans quel ordre, etc. et tu crois -naïf!- que tu ne gagneras pas de temps à trouver combien, lesquels, dans quel ordre) et...
...tu trouves ce bug.
(cf. les derniers commentaires: c'est pas prêt d'être prêt...)
Conclusion: c'est pas possible, à moins d'installer le patch du rapporteur de ce bug et de te taper la compilation de kde. Rien que ça.
2 remarques:
1) j'ai choisi KDE car, quand j'ai commencé avec Linux/ubuntu, j'ai cru comprendre qu'il était "highly" configurable. Pour un truc aussi "trivial" que modifier les droits par défaut des hotplugs, je ne comprends pas que ce ne soit pas fait.
2) En fait, pour comprendre l'imbrication de tout ça, quand tu ne connais pas (le fil date d'il y a 1 mois, et j'avais pas mal cherché avant pour éviter un RTFM), c'est méchamment le bordel. Le lien entre udev, pmount, hal, KDE, Ubuntu, qui fait quoi, quand... c'est au final assez mal documenté. Être obligé de regarder les sources de KDE pour comprendre comment fonctionne kio_media_mounthelper (ne demandez pas, j'ai pas compris comment il attribue les options de montage), c'est...trop.
Et j'ai toujours ma question en suspend:
Qui écrit dans le mtab???
ex: l'uid. Une fois ma clé branchée, j'ai:
cat /etc/matb
(...)/dev/sdb1 /media/LEXAR\040MEDIA vfat rw,nosuid,nodev,noatime,uhelper=hal,flush,uid=1000,utf8,shortname=lower 0 0
L'uid est à 1000. Or, dans mes fichiers de configuration de hal, j'ai
<!-- allow these mount options for vfat -->
<match key="volume.fstype" string="vfat">
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
(...)
<append key="volume.mount.valid_options" type="strlist">uid=</append>
<append key="volume.mount.valid_options" type="strlist">flush</append>
</match>
pour /usr/share/hal/fdi/pollicy/10ovendor/20-storage-methods.fdi (mais rien sur sa valeur); rien dans /etc/hal/fdi/policy/preferences.fdi à propos de l'uid; et juste un
uid=true
dans mon mediamanagerrc. Cool. De "true", il passe à 1000. Si vous savez pourquoi...
Hors ligne