Exécution du script sh: «Autorisation refusée» malgré le bit exécutable et les droits root

17

J'ai installé Debian dans VirtualBox (pour diverses expériences qui ont généralement cassé mon système) et j'ai essayé de lancer le script du module complémentaire invité VirtualBox. Je me suis connecté en tant que root et j'ai essayé de lancer autorun.sh, mais j'ai obtenu «Autorisation refusée». ls -lmontre que le script a des droits exécutables.

Désolé, je ne peux pas copier la sortie - VirtualBox n'a absolument aucune utilité sans l'addon, car ni un répertoire partagé, ni un presse-papiers partagé ne fonctionnent. Mais juste pour que vous soyez sûr, j'ai copié les droits à la main:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

Au début, je pensais que le script pouvait exécuter quelque chose qui donnait l'erreur. J'ai essayé de remplacer /bin/shpar quelque chose comme #/pathtorealsh/sh -xv, mais je n'ai eu aucune sortie - il semble que le script ne puisse même pas être exécuté.

Je n'ai même aucune idée de ce qui pourrait en être la cause.

Salut ange
la source
2
On dirait que cela devrait fonctionner. Essayez de l'exécuter explicitement avec bash: `bash -x ./autorun.sh". Peut-être que cela vous donnera un indice supplémentaire.
nobar
2
De quoi est produit mount | grep noexec?
cuonglm
1
@Gnouc, vous avez raison, les «cdrom» montés ont l' noexecensemble. Vous pouvez probablement le poster comme réponse; en attendant j'essaye de le remonter avec un droit d'exécution. Hm, je ne savais même pas que le système de fichiers pouvait avoir un tel attribut.
Hi-Angel
Et si vous essayez de l'exécuter en allant sh ./autorun.shce qui se passe?
infixé le

Réponses:

29

Votre système de fichiers est peut-être monté avec un noexecjeu d'options, vous ne pouvez donc pas exécuter de fichiers exécutables. De la documentation de montage :

noexec

N'autorisez pas l'exécution directe de fichiers binaires sur le système de fichiers monté. (Jusqu'à récemment, il était de toute façon possible d'exécuter des binaires en utilisant une commande comme /lib/ld*.so / mnt / binary. Cette astuce échoue depuis Linux 2.4.25 / 2.6.0.)

Essayer:

mount | grep noexec

Vérifiez ensuite si votre système de fichiers est répertorié en sortie.

Si oui, vous pouvez résoudre ce problème en remontant le système de fichiers avec l' execoption:

mount -o remount,exec filesystem
cuonglm
la source
Ça n'a pas marché pour moi. J'ai dû démonter puis remonter normalement. Ensuite, cela a bien fonctionné.
datakid
@datakid: Quel est votre fs?
cuonglm
J'ai ce problème avec Debian 9, certains fichiers sont refusés si les scripts s'exécutent en tant que root, mais ils s'identifient en tant que root ... comme un comportement Windows, si je supprime et que le script a fonctionné! = [
Luciano Andress Martini
Je recevais un message très étrange, qui s'est avéré être à cause de noexec: "sh: 75: script.sh: Autorisation refusée"
tmm1
2

bash -x ./filename.filetypedevrait marcher. Cela a fonctionné pour moi lorsque j'ai obtenu une autorisation refusée en tant qu'utilisateur root.

Stephen Howe
la source
Non, car au final, le problème s'est avéré être l' noexecoption de montage, cela ne fonctionnera pas, car il pourrait y avoir plus de fichiers à exécuter; c'est-à-dire que le filename.filetypesouffle coupé essayant d'exécuter d'autres fichiers à partir du même système de fichiers. Vous pouvez facilement le vérifier avec un test simplifié: créez un script à deux lignes qui affiche "bonjour", puis se rappelle simplement, mais ne définissez pas de droits exécutables. Si vous l'exécutez avec -x, il afficherait "bonjour", mais la ligne d'appel récursive déclencherait une erreur.
Hi-Angel
1

Ma solution à ce problème consiste à utiliser la source . J'étais sur un volume de stockage de données très importantes. Ce volume est monté en noexec. J'ai un script shell simple qui est exécutable mais qui a un problème d'autorisation.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Testé uniquement sur mon Ubuntu.

Kemin Zhou
la source