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 bind
drapeau et ajouté NOEXEC
dans / 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.sh
et 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 /test2
pas 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?
la source
Réponses:
L'option 'NOEXEC' de la
mount
commande 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
mount
commande monte généralement un système de fichiers . (On peut dire que le bouclage ou lesbind
montages 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.la source
#!/bin/sh
en 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?