Un fichier exécutable peut-il être lu?

9

Si un fichier dispose d'autorisations, -rwx-wx-wxpeut-il être lu par d'autres utilisateurs et des utilisateurs du groupe, ou peut-il uniquement être exécuté et écrit? Existe-t-il un moyen de lire un fichier exécutable en l'exécutant?

À M
la source
Aucun moyen standard que je puisse dire.
Tim

Réponses:

18

Un fichier avec des -rwx-wx-wxautorisations a des autorisations de lecture / écriture / exécution pour le propriétaire et des autorisations d'écriture / exécution (mais pas de lecture) pour tout le monde.

S'il s'agit d'un script (généralement un fichier texte avec un #!sur la première ligne), il ne peut pas être exécuté par d'autres, car l'exécution d'un script exécute vraiment l'interpréteur, qui doit pouvoir lire le script. (L'interpréteur doit être un binaire, pas un autre script.) (En fait, ce n'est pas vrai pour tous les systèmes; Ubuntu, avec un noyau Linux 3.2.0, permet à l'interpréteur lui-même d'être un script interprété. Il semble y avoir une limite de environ 4 niveaux. Ce n'est probablement pas pertinent pour cette question.)

S'il s'agit d'un exécutable binaire, il peut être exécuté directement, mais son contenu ne peut pas être lu. Cela signifie, par exemple, qu'une personne autre que le propriétaire peut l'exécuter en tant que commande, mais ne peut pas récupérer une copie de l'exécutable.

Bien sûr, l'exécution nécessite une lecture, mais elle est lue par le noyau, pas par l'utilisateur. Vous pourrez peut-être obtenir des informations sur le contenu de l'exécutable en examinant la mémoire du processus en cours d'exécution, mais je doute que vous puissiez reconstruire le fichier exécutable binaire. Et si l'exécutable est setuid, vous ne pouvez pas examiner la mémoire du processus (sauf si vous avez accès au compte sous lequel il s'exécute).

Soit dit en passant, -rwx-wx-wxest un ensemble très étrange d'autorisations; il protège le fichier contre toute lecture autre que le propriétaire, mais permet à quiconque de le modifier. Je ne peux pas penser à un cas où cela aurait du sens.

Keith Thompson
la source
Juste une question aléatoire abstraite: les outils de profilage / débogage fonctionneraient-ils sur des exécutables avec uniquement des autorisations exécutables?
Sairam
@Sairam: L'expérience dit non: chmod 111 hello ; gdb ./hellodit ./hello: Permission denied.; rditNo executable file specified.
Keith Thompson
Pour un fichier non exécutable, quelque chose comme -rw - w - w- peut être utile pour quelque chose comme un fichier journal où vous voulez que les gens puissent écrire des informations dans le journal sans pouvoir les lire. Bien sûr, ils pourraient simplement vider le fichier, mais c'est un problème distinct.
Dave
6

Avec ces autorisations, seul le propriétaire du fichier peut l'exécuter.

D'autres utilisateurs peuvent y écrire, mais pas l'exécuter (car l'exécution dans ce cas implique de pouvoir le lire) mais ils peuvent l'écrire comme une sorte de boîte noire:

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
cjc
la source
4
Un script shell nécessite l'accès en lecture et en exécution pour s'exécuter. Cependant, un binaire compilé ne fonctionne PAS. Ainsi, un binaire compilé avec les autorisations ci-dessus pourrait être exécuté par n'importe qui!
mdpc
1
Je suppose que cela soulève la question de ce que l'OP essaie d'accomplir, c'est-à-dire pourquoi le binaire compilé serait-il accessible en écriture? L'ensemble des autorisations (733) a effectivement pris un moment pour que je le comprenne, car il n'est pas standard.
cjc
2

La réponse simple est non : seul execsyscall peut lire un fichier sans avoir besoin d'un accès en lecture (bien qu'il soit obligatoire d' exécuter l' accès). Un openavec O_RDONLYou O_RDWRéchouera.

yrk
la source
1

Bien sûr, n'importe quel fichier peut être lu par l'utilisateur root.

De plus, le chargeur du système, la gestion de la mémoire, le swapper, etc .... liront un fichier avec l'autorisation 'x', sinon il ne pourra pas être exécuté.

Les trous possibles dans la divulgation du contenu exécutable pourraient être le fichier / proc du processus, les fichiers principaux ou l'utilisation d'un débogueur.

mdpc
la source
cela n'est vrai que si un chmod| chowna été jouée
warren