Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/02/2024, à 17:47

Franck-86180

droit des fichiers

bonjour,
Je pose certainement un question bête mais je sèche.
Je me lance dans le python. Que je ne connais pas. Mais il y a un début à tout!
mon script est le suivant:

import os
import datetime

# Spécifiez le chemin du répertoire de la carte SD
chemin_carte_sd = '/home/franck/sdcard'

# Vérifiez si le chemin de la carte SD existe
if os.path.exists(chemin_carte_sd):
    print("La carte SD est bien installée.")
    with open('/home/franck/sdcard/mqtt.txt','a') as f:
        current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        f.write(f'{current_time}\n')
else:
    print("La carte SD n'est pas installée ou le chemin spécifié est incorrect.")

et quand j'execute ce code j'obtient ceci:

franck@mosquitto:~ $ python3 ./test_sd.py
La carte SD est bien installée.
Traceback (most recent call last):
  File "/home/franck/./test_sd.py", line 10, in <module>
    with open('/home/franck/sdcard/mqtt.txt','a') as f:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '/home/franck/sdcard/mqtt.txt'
franck@mosquitto:~ $

le répertoire sdcard a été créé comme suit:

franck@mosquitto:~ $ cd /dev
franck@mosquitto:/dev $ dmesg | grep mmcblk0
[  307.556202] mmcblk0: mmc0:bfde SD01G 922 MiB
[  307.558125]  mmcblk0: p1
[  307.558297] mmcblk0: mmc0:bfde SD01G 922 MiB
franck@mosquitto:/dev $ ls /dev/mmcblk0
/dev/mmcblk0
franck@mosquitto:~ $ pwd
/home/franck
franck@mosquitto:~ $
franck@mosquitto:~ $ mkdir sdcard
franck@mosquitto:~ $ sudo mount -t vfat /dev/mmcblk0p1 /home/franck/sdcard
franck@mosquitto:~ $ cd sdcard/
franck@mosquitto:~/sdcard $ ls -al
total 5
drwxr-xr-x 3 root   root    512 Jan  1  1970  .
drwx------ 4 franck franck 4096 Feb  7 15:41  ..
drwxr-xr-x 2 root   root    512 Feb  7  2024 'System Volume Information'
franck@mosquitto:~/sdcard $

Et il m'est impossible de faire un "chown" sur le répertoire sdcard!
J'ai créé à la main un fichier "mqtt.tx"t dans le répertoire "sdcard"

franck@mosquitto:~ $ cd sdcard/
franck@mosquitto:~/sdcard $ touch mqtt.txt
franck@mosquitto:~/sdcard $ ls -al
total 5
drwxr-xr-x 3 root   root    512 Jan  1  1970  .
drwx------ 4 franck franck 4096 Feb  7 16:36  ..
-rwxr-xr-x 1 root   root      0 Feb  7 16:24  mqtt.txt
drwxr-xr-x 2 root   root    512 Feb  7 16:28 'System Volume Information'
franck@mosquitto:~/sdcard $

Impossible de lui modifier le propriétaire...

Ce doit être un problème de droits mais...
Je ne vois pas ou aller pour palier ce problème...
Quelqu'un a-t-il une idée

Hors ligne

#2 Le 07/02/2024, à 18:30

Astrolivier

Re : droit des fichiers

salut,

ton dossier est root, et ton fichier aussi

le plus simple

sudo chown -R franck:franck /home/franck/sdcard

ça te mettra ton dossier et les deux fichiers dedans avec franck comme propriétaire (utilisateur et groupe)

donne aussi

 echo $USER

parce que normalement tes commandes auraient du te créer te les créer sous franck et non root, comme tu n'as pas fait ça en sudo


edit

tu as monté ton system de fichier windows. démonte le avant de faire quoi que ce soit sur les droits !!!!

Dernière modification par Astrolivier (Le 07/02/2024, à 18:38)


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#3 Le 07/02/2024, à 21:28

Franck-86180

Re : droit des fichiers

voila le résultat, pas très probant...

franck@mosquitto:~/sdcard $ cd ..
franck@mosquitto:~ $ sudo umount /dev/mmcblk0p1
franck@mosquitto:~ $ sudo chown -R franck:franck /home/franck/sdcard
franck@mosquitto:~ $ ls -al
drwxr-xr-x 2 franck franck 4096 Feb  7 15:41 sdcard
franck@mosquitto:~ $ sudo mount -t vfat /dev/mmcblk0p1 /home/franck/sdcard
franck@mosquitto:~ $ ls -al
drwxr-xr-x 3 root   root    512 Jan  1  1970 sdcard
franck@mosquitto:~ $ sudo umount /dev/mmcblk0p1
franck@mosquitto:~ $ chown -R franck:franck /home/franck/sdcard
drwxr-xr-x 2 franck franck 4096 Feb  7 15:41 sdcard
franck@mosquitto:~ $ mount -t vfat /dev/mmcblk0p1 /home/franck/sdcard
mount: /home/franck/sdcard: must be superuser to use mount.
       dmesg(1) may have more information after failed mount system call.
franck@mosquitto:~ $
franck@mosquitto:~ $ ls -al
drwxr-xr-x 3 root   root    512 Jan  1  1970 sdcard
-rwxr-xr-x 1 franck franck  512 Feb  7 16:13 test_sd.py
franck@mosquitto:~ $

Je peux changer de propriétaire/groupe quand le système de fichier n'est pas monté mais quand je le monte,
le répertoire repasse root:root

Je comprends pas!

Hors ligne

#4 Le 07/02/2024, à 21:52

ylag

Re : droit des fichiers

Bonsoir,

Franck-86180 a écrit :

Je peux changer de propriétaire/groupe quand le système de fichier n'est pas monté mais quand je le monte, le répertoire repasse root:root

Par défaut, Linux ne peut gérer les droits de façon conventionnelle pour un système de fichier vfat.
Sauf erreur de ma part, il faut probablement passer les options de montage qui marchent bien avec la commande mount pour ce type de système de fichier.

Voir cette page de la doc pour plus d'infos : https://doc.ubuntu-fr.org/mount_fstab

A+

Dernière modification par ylag (Le 07/02/2024, à 22:21)

Hors ligne

#5 Le 07/02/2024, à 22:05

Franck-86180

Re : droit des fichiers

donc, je dois formater la carte SD en EXT4 par exemple....
Mais dans ce cas là, je ne pourrai pas la lire sur windows, non?

De plus, je ne sais pas formater une carte SD... pas malin

Dernière modification par Franck-86180 (Le 07/02/2024, à 22:24)

Hors ligne

#6 Le 07/02/2024, à 22:19

ylag

Re : droit des fichiers

Bonsoir,

Il faudrait plutôt passer les bons paramètres au montage du système de fichier ; voir le paragraphe 2.2.2 Système de fichier non linux et suivants de la doc citée à mon message précédent.

A+

Dernière modification par ylag (Le 07/02/2024, à 22:29)

Hors ligne

#7 Le 08/02/2024, à 13:54

ylag

Re : droit des fichiers

Bonjour,

Pour un périphérique de stockage externe, tel qu'une carte SD devant être utilisée sur Linux et Windows, on pourrait considérer l'utilisation du système de fichier exFAT ?

https://doc.ubuntu-fr.org/exfat

A+

Hors ligne

#8 Le 08/02/2024, à 14:34

krodelabestiole

Re : droit des fichiers

à ma connaissance, linux ne sait pas gérer individuellement les permissions des fichiers et répertoires contenus sur les systèmes de fichiers microsoft : que ce soit fat, fat32, ntfs ou exfat.
on ne peut que définir les permissions pour l'ensemble de la partition via les options de montage.

microsoft à conçu exFAT spécifiquement pour les supports flash (sdcard, clé usb ...) mais ça ne change rien à ce problème.

Hors ligne

#9 Le 08/02/2024, à 15:31

Astrolivier

Re : droit des fichiers

pour info, une clef usb fat32 montée automatiquement par udev sur kubuntu donne ça (mount)

/dev/sda1 on /media/poney2204/3195-82B1 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

et on peut écrire ce qu'on veut dedans (rw)

Dernière modification par Astrolivier (Le 08/02/2024, à 15:32)


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#10 Le 08/02/2024, à 18:28

ylag

Re : droit des fichiers

Bonjour,

On me corrigera si j'ai tort, mais si le système de fichier vfat en question se trouve bien sur le périphérique /dev/mmcblk0p1, la commande suivante, passée sans sudo, devrait le monter en lecture/écriture pour l'utilisateur courant, franck, dans /media/franck /media/franck/<label_ou_UUID_du_système_de_fichier> :

udisksctl mount -b /dev/mmcblk0p1

A+

Dernière modification par ylag (Le 09/02/2024, à 13:43)

Hors ligne

#11 Le 08/02/2024, à 21:20

iznobe

Re : droit des fichiers

Bonjour ,

Je peux changer de propriétaire/groupe quand le système de fichier n'est pas monté mais quand je le monte,
le répertoire repasse root:root

Je comprends pas!

sudo chown -R franck:franck /home/franck/sdcard

il ne faut jamais changer les permissions du point de montage .
c ' est un mécanisme particulier , soit c' est root avec des options précises, soit c ' est udisksctl qui s' en occupe et alors l' utilisateur a les permissions , mais , en supposant que le système de fichiers gère les droits ( ce qui n' est pas le cas ici ) , ce sont les fichiers ou dossiers " contenus " dans le point de montage auquel on change les permissions .
Le pont de montage ne devrait jamais être modifié directement , on utilise pour cela les options désirées et appropriées ( en fonction du format utilisé ) pour obtenir le résultat attendu ainsi que la commande qui va bien ( soit mount , soit udisksctl ) .

Comme analogie ( peut être pas idéal mais bon ... ) , si dans un garage mécanique qui appartient à paul , pierre vends sa voiture à jacques , le garage , dans tous les cas continue à appartenir Paul . seule la voiture change de propriétaire .

Dernière modification par iznobe (Le 08/02/2024, à 21:25)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#12 Le 09/02/2024, à 04:55

Coeur Noir

Re : droit des fichiers

Bref, ce qui manque ici :

sudo mount -t vfat /dev/mmcblk0p1 /home/franck/sdcard

ce sont des options de mount pour lui dire d'attribuer le système de fichiers monté dans /home/franck/sdcard à, je suppose, l'utilisateur franck.
Ça pourrait ressembler à :

mount -t vfat -o rw,umask=007,uid=franck,gid=franck /dev/mmcblk0p1 /home/franck/sdcard

Si à chaque tentative d'ouvrir un fichier contenu dans cette clé, le système te demande si tu veux l'afficher ou l'exécuter alors il faudra affiner,
probablement avec des options de ce genre :

dmask=007,fmask=117

Pour connaître les correspondances entre nom d'utilisateuruid et noms de groupegid :

grep -E :[0-9]{4}: /etc/{passwd,group}

Le plus simple serait de ne pas monter « manuellement » cette sdcard mais de laisser ton système s'en occuper automatiquement lors de l'insertion :
la carte sera alors montée dans /media/$USER/label_ou_uuid_sdcard

Dans ton script, tu testes alors si uuid_ou_label_sdcard existe bien dans /media/$USER ( en espérant qu'il y a une équivalence pour la variable $USER )
et ce sera opportun de donner une étiquette à la partition de cette sdcard.

Autres lectures utiles : droits et permissions.

Dernière modification par Coeur Noir (Le 09/02/2024, à 05:05)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#13 Le 09/02/2024, à 06:17

jplemoine

Re : droit des fichiers

Coeur Noir a écrit :

Dans ton script, tu testes alors si uuid_ou_label_sdcard existe bien dans /media/$USER ( en espérant qu'il y a une équivalence pour la variable $USER )
et ce sera opportun de donner une étiquette à la partition de cette sdcard.

Une solution : mettre un fichier témoin (*) sur la carte et tester la présence du dit fichier (existence du fichier = montage ok)

(*) avec un nom suffisamment bizarre pour qu'il n’existe pas dans les données classique et lui enlever les  droits w afin de ne pas le supprimer par erreur.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#14 Le 10/02/2024, à 18:54

Franck-86180

Re : droit des fichiers

Merci à cœur noir.
Le mount que tu as donné fonctionne très bien.

sudo mount -t vfat -o rw,umask=007,uid=franck,gid=franck /dev/mmcblk0p1 /home/franck/sdcard

Avec ce "mount", le répertoire ne change pas de propriétaire.
Et je peux écrire, lire, modifier, supprimer un fichier, sur la machine ou sur un PC windows; j'en suis bien propriétaire.

Un grand merci, je n'aurai pas trouvé tout seul, ça c'est sur!

Voila ce que donne le "grep"

franck@mosquitto:~/sdcard $ grep -E :[0-9]{4}: /etc/{passwd,group}
/etc/passwd:franck:x:1000:1000:,,,:/home/franck:/bin/bash
/etc/group:franck:x:1000:
franck@mosquitto:~/sdcard $ 

Dernière modification par Franck-86180 (Le 10/02/2024, à 18:55)

Hors ligne