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.


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

Ç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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.