Que signifie l'indicateur NOEXEC lors du montage de répertoires sur RHEL?

11

J'essaie de comprendre le drapeau NOEXEC lors du montage.

J'ai un problème d'exécution dans le répertoire / tmp sur quelqu'un d'autre que je ne peux pas accéder à atm où le répertoire / tmp est monté sur un lecteur différent de '/' et NOEXEC est présent. Je voulais essayer de recréer ce scénario sur ma machine, mais je n'ai pas de deuxième disque dur. J'ai essayé de faire la commande suivante:

mount --bind /test1 /test2

J'ai ensuite supprimé le binddrapeau et ajouté NOEXECdans / etc / fstab. Ensuite, j'ai créé un fichier dans / test2 appelé test.sh où il fait juste écho à 'hello world'. J'essaie de l'exécuter et il a dit «autorisation refusée». J'ai ensuite couru chmod 777 test.shet j'ai pu exécuter le fichier très bien. Je pensais que le drapeau NOEXEC ne devrait pas me permettre d'exécuter quoi que ce soit?

N'est-ce mount --bind /test1 /test2pas la même chose que le montage à partir d'un disque physique complètement différent? Comme dans / test1 et / test2 sont sur des disques différents?

user972276
la source
Je soupçonne que vous pourriez être victime d'une particularité de la monture de liaison. Voir cette réponse .
Kamil Maciorowski

Réponses:

7

L'option 'NOEXEC' de la mountcommande ne permet pas l'exécution de binaires exécutables dans le système de fichiers monté 1 . Cependant, quand un script (un fichier texte qui commence par une ligne she-bang, c'est-à-dire une ligne qui commence par #!) est donné à certains shells (bash), il exécutera l'exécutable nommé sur cette ligne (par exemple, /usr/bin/perl) et passera le chemin du script shell comme premier argument. L'interprète réel n'est peut-être pas sur ce point de montage.
__________
1 La mountcommande monte généralement un système de fichiers . (On peut dire que le bouclage ou les bindmontages peuvent être considérés comme une exception à cette généralité.) Dans certains cas (par exemple, /tmp), ce système de fichiers ne contiendra qu'un seul répertoire.

KJ4IPS
la source
Donc, bien que le fichier sh réside dans / test2, il est exécuté dans / bin / sh, pas / test2? Sur l'autre machine, il existe un processus java qui écrit des scripts shell dans le répertoire / tmp puis les exécute. Je pense que je me souviens des scripts shell qu'il crée a #!/bin/shen haut. Je ne sais pas comment le script shell est exécuté autre que son passage par Java et les références / bin / sh. S'il fait référence à / bin / sh et que le répertoire bin a des privilèges d'exécution, pourquoi les scripts shell ne s'exécuteraient-ils pas comme lors de mon test?
user972276
Tout dépend de l'appel du shell / programme, les scripts shell ne sont pas des ELF et ne peuvent pas être exécutés directement, cependant certains shells, ne permettront pas à un script sur un FS monté NOEXEC de s'exécuter, ils mourront. Je ne suis pas sûr du comportement de / bin / sh dans ce cas. (Surtout que je ne sais pas lequel vous utilisez, il y a quelques saveurs).
KJ4IPS
À bien y penser, lorsque vous utilisez le shell, le système remarque le #! et appelle l'interpereter approprié (/ bin / bash /tmp/file.sh), mais si le bit java est juste en train d'appeler (/tmp/file.sh), cela ne fonctionnera pas.
KJ4IPS
l'instance java n'est pas dans le répertoire / tmp et aurait besoin d'utiliser un interpréteur pour exécuter des scripts shell non? À moins que java n'ait cette fonctionnalité intégrée, ce qui signifie que l'exécution ne se produira toujours pas dans le répertoire / tmp.
user972276
À mon avis, votre réponse prétend à tort que c'est le travail de la coquille de lire un shebang. Voir cette réponse .
Kamil Maciorowski