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 24/09/2020, à 15:28

Nuliel

à quoi sert la permission d'exécuter?

Bonjour,
J'ai découvert aujourd'hui qu'on peut exécuter des programmes qui n'ont pas la permission d'exécuter, du moment qu'il a la permission de lecture.
Exemple pour bash:

./monprogramme

demande le droit d'exécution,

bash monprogramme

non.
On peut faire la même chose avec des programmes C compilés.
Du coup, question toute bête: à quoi sert vraiment la permission d'exécuter?

Hors ligne

#2 Le 24/09/2020, à 16:36

rogn...

Re : à quoi sert la permission d'exécuter?

Je suis étonné que bash monprogramme ne te demande rien mais... à moitié car "bash" va en fait chercher un exécutable avec les droits x comme exécutable.

ls -l $(which bash)
-rwxr-xr-x 1 root root 928016 10 juil. 18:57 /usr/bin/bash

Donc va exécuter comme si tu faisais

programme <fichier à lire>

#3 Le 25/09/2020, à 08:32

bruno

Re : à quoi sert la permission d'exécuter?

Très bonne question wink

Pour les scripts, dès lors que le fichier est accessible en lecture on peut l'exécuter en appelant l'interpréteur du langage utilisé :

python truc.py
perl machin.pl
bash bidule.sh
php bitonio.php

etc.
ou implicitement si l'interpréteur est spécifié dans le shebang du fichier . Par exemple si le fchier truc.py commence par :

#!/usr/bin/env python3

on peut exécuter avec

./truc.py

qui utilisera automatiquement python 3.

Rendre le script exécutable a d'abord un côté pratique. Il suffit d’appeler le script par son nom sans avoir à se préoccuper du langage utilisé, ni de sa version, dès lors que le shebang est correctement établi.
C'est d'autant plus utile lorsque le script se trouve dans le PATH (ex : /usr/local/bin) ou qu'il doit être appelé par un autre script, un démon, une tâche cron, une unité systemd, etc.

Un autre intérêt est la possibilité d'avoir des scripts exécutables mais non accessibles en lecture ou d'associer cela avec SUID, SGID.

Nuliel a écrit :

On peut faire la même chose avec des programmes C compilés.

Tu as un exemple ?

#4 Le 25/09/2020, à 08:58

Nuliel

Re : à quoi sert la permission d'exécuter?

Merci rogn... et bruno pour vos réponses.
Effectivement, on se ramène au final à des programmes exécutables.
Effectivement, dans le cas de l'utilisation du suid/sgid, empêcher la lecture tout en gardant l'exécution est utile

Pour des programmes 64 bits, on peut faire

/lib64/ld-linux-x86-64.so.2 ./programme

et programme n'a pas besoin d'avoir le bit exécutable pour être exécuté (j'ai testé avec un programme assez simple)

Hors ligne

#5 Le 25/09/2020, à 09:40

bruno

Re : à quoi sert la permission d'exécuter?

Ah bien vu ! J’aurais du y penser puisqu'il suffit de faire :

file programme

pour savoir quel interpréteur utiliser pour exécuter programme.
Mais bon c'est moins pratique que de taper juste programme wink

#6 Le 25/09/2020, à 21:59

Nuliel

Re : à quoi sert la permission d'exécuter?

J'annonce qu'il y a une deuxième méthode pour lancer un programme compilé, je pourrai annoncer la réponse dès que je l'aurais trouvé (dans moins d'une semaine)

Hors ligne

#7 Le 26/09/2020, à 06:48

diesel

Re : à quoi sert la permission d'exécuter?

Je trouve ça très nul qu'on puisse exécuter un programme dont le bit exécutables est désactivé.

Ça veut dire, en gros, que quasiment n'importe qui peut exécuter n'importe quoi sur la machine. C'est grave. sad

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#8 Le 26/09/2020, à 07:17

bruno

Re : à quoi sert la permission d'exécuter?

diesel a écrit :

Ça veut dire, en gros, que quasiment n'importe qui peut exécuter n'importe quoi sur la machine. C'est grave.

Non il faut que le fichier soit accessible en lecture à l'utilisateur et que sont exécution ne soit pas restreinte par un autre mécanisme (ACL, apparmor, SELinux, SUID, StickyBit, etc.)

Je comprends que cela puisse paraître curieux ou peu logique, mais le bit d'exécution n'est là que pour des raisons pratiques (cf #3). Sur les fichiers ce n'est pas une « permission » à proprement parler.

@nuliel : il y a certainement plusieurs moyens pour lancer un programme compilé (ELF) qui n'est pas exécutable, à commencer par les outils de développement et de débogage.

#9 Le 26/09/2020, à 12:30

erresse

Re : à quoi sert la permission d'exécuter?

C'est un peu un faux débat, car en fait, lorsque tu exécutes un script qui n'est pas marqué comme exécutable, ce n'est pas le script que tu lances, mais l'interpréteur qui lui, lit le script et l'exécute.
Dans ce cas, le script n'est rien d'autre qu'un "document" utilisé par un programme, il n'est pas réellement un programme lui-même...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 26/09/2020, à 13:10

bruno

Re : à quoi sert la permission d'exécuter?

erresse a écrit :

C'est un peu un faux débat, car en fait, lorsque tu exécutes un script qui n'est pas marqué comme exécutable, ce n'est pas le script que tu lances, mais l'interpréteur qui lui, lit le script et l'exécute.

Et quand le script est marqué comme exécutable, que se passe-t-il ?
Et bien ce n'est pas le script que tu lances mais l'interpréteur précisé dans le shebang qui exécute le script.

erresse a écrit :

Dans ce cas, le script n'est rien d'autre qu'un "document" utilisé par un programme, il n'est pas réellement un programme lui-même...

Un script est un programme.
Tu veux sans doute faire la distinction entre un programme sous forme de fichier texte interprété par un autre programme (Bash, Python, Perl, Php, Ruby, etc.) et un programme binaire compilé. Mais dans ce débat sur l'utilité du bit d'exécution, cette distinction n'a pas lieu d'être.

#11 Le 26/09/2020, à 14:00

diesel

Re : à quoi sert la permission d'exécuter?

Nous sommes bien d'accord.

Il n'empêche que j'aimerais bien pouvoir interdire l'exécution de tout ce que je n'ai pas autorisé (ou ce que canonical n'a pas autorisé). Je vous vois venir, vous allez me dire que snap est fait pour ça... Faut quand-même pas déconner.

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#12 Le 26/09/2020, à 14:22

bruno

Re : à quoi sert la permission d'exécuter?

snap… pouah

Si tu crées un fichier exécutable en 700 (rwx------), toi seul pourra l'exécuter.
Les exécutables installés par les paquets le sont par tout le monde sauf restriction supplémentaire (demande d'élévation des privilèges).
Je ne vois pas où est le problème…

#13 Le 26/09/2020, à 16:44

Nuliel

Re : à quoi sert la permission d'exécuter?

Sans le droit de lecture (à défaut d'avoir le droit d'exécution), on ne peut pas lancer le programme. Donc pas d'inquiétude diesel.
Non non, snap n'a rien à voir, je cherche seulement à comprendre les permissions sous linux. En fait j'ai des cours sur la sécurité des systèmes, d'où la question.

Hors ligne

#14 Le 26/09/2020, à 16:51

erresse

Re : à quoi sert la permission d'exécuter?

bruno a écrit :

Un script est un programme.
Tu veux sans doute faire la distinction entre un programme sous forme de fichier texte interprété par un autre programme (Bash, Python, Perl, Php, Ruby, etc.) et un programme binaire compilé. Mais dans ce débat sur l'utilité du bit d'exécution, cette distinction n'a pas lieu d'être.

C'est vrai aussi, en fait je voulais juste expliquer que le script marqué exécutable est plus ou moins considéré comme un programme exécutable. En définitive, ce bit ne sert qu'à ça, indiquer au système que ce fichier contient des instructions par opposition à un simple fichier texte.
Si tu retires ce bit sur un vrai exécutable binaire, en double-cliquant dessus, il te l'ouvre comme un fichier texte au lieu de l'exécuter.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#15 Le 26/09/2020, à 19:25

diesel

Re : à quoi sert la permission d'exécuter?

bruno a écrit :

snap… pouah

Si tu crées un fichier exécutable en 700 (rwx------), toi seul pourra l'exécuter.
Les exécutables installés par les paquets le sont par tout le monde sauf restriction supplémentaire (demande d'élévation des privilèges).
Je ne vois pas où est le problème…

Ben..., le problème est que quelqu'un de mal intentionné réussisse à installer un exécutable malveillant (sans le bit d'exécution) et réussisse à le lancer malgré tout.

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne