web-dev-qa-db-fra.com

'cat': impossible d'ouvrir le fichier: permission refusée

J'essaie de copier le répertoire entier / vers un autre emplacement. En faisant cp récursivement, il échoue sur certains fichiers tels que: -

/ # ls -lrt /sys/module/nf_conntrack_ipv4/uevent
--w-------    1 root     root          4096 Mar  7 06:29 /sys/module/nf_conntrack_ipv4/uevent
/ #
/ # cat /sys/module/nf_conntrack_ipv4/uevent
cat: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied
/ # cp /sys/module/nf_conntrack_ipv4/uevent /tmp
cp: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied

Si je crée un fichier avec uniquement les autorisations w et que je tente de le copier/le cataloguer, je ne vois aucun problème à cet endroit. Cependant, pour certains fichiers comme celui mentionné ci-dessus, je ne parviens pas à le copier ni à le lire, même si j'essaie en tant qu'utilisateur root. De plus, la chose étrange est que la taille du fichier mentionné ci-dessus est mentionnée comme étant 4096, ce qui est similaire à celui que nous avons pour le répertoire. Est-ce que ce fichier est spécial?

Je suppose qu'il me manque quelque chose ici et que j'ai besoin de quelques informations pour en savoir plus sur de tels fichiers ou de tels comportements. Aidez-moi à comprendre pourquoi je ne suis pas autorisé à lire le contenu de tels fichiers.

2
Rahul

Dans un système de fichiers classique, par exemple ext4, si vous ne disposez que de l'autorisation w dans un fichier, vous ne pourrez pas le lire (cat), vous aurez besoin de lire (r) pour cela. . Notez que root peut lire n’importe quel fichier, quels que soient les bits d’autorisation.

Maintenant, /sys est un point de montage de sysfs spécial fourni par le noyau Linux, qui est en fait un système de fichiers virtuel et fonctionne différemment des systèmes de fichiers normaux. /sys contient les informations relatives au périphérique du système.

La modification de quelque chose dans /sys modifierait directement la structure de données interne du noyau, de sorte que cela dépendrait de ce que le noyau autoriserait ou refuserait.

Pour /sys/module/nf_conntrack_ipv4/uevent, seul le bit w est défini pour le propriétaire (root), même si vous ajoutez r bit pour root (qui est une très mauvaise idée), lors de la lecture du fichier, vous obtiendrez une erreur d'E/S car, de par sa conception, le noyau ne permettrait à personne de lire les événements du module nf_conntrack_ipv4.

10
heemayl

Pour éviter les systèmes de fichiers spéciaux tels que /sys et /proc, vous devez donner l'option suivante à cp:

-x, --one-file-system
    stay on this file system

(cité de la page de manuel )

Si vous avez plusieurs systèmes de fichiers réels, par exemple, / et /home, vous devrez ensuite donner plusieurs commandes cp.

Veillez à ne pas copier de et dans au même endroit. . Cela peut conduire à des boucles infinies où vous faites des copies de copies de copies de ...

4
Stig Hemmer