Ejecutar script sh: «Permiso denegado» a pesar del bit ejecutable y los derechos de root

17

Instalé Debian en VirtualBox (para varios experimentos que generalmente dañaban mi sistema) e intenté iniciar el script de complemento invitado de VirtualBox. Me conecté como root e intenté iniciarlo autorun.sh, pero recibí el «Permiso denegado». ls -lmuestra que el script tiene derechos ejecutables.

Lo sentimos, no puedo copiar la salida: VirtualBox no tiene ningún uso sin el complemento, ya que ni un directorio compartido ni un portapapeles compartido funcionan. Pero solo para que esté seguro, copié los derechos a mano:

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

Al principio pensé que puede ser que el script ejecute algo que dio el error. Traté de reemplazarlo /bin/shcon algo como #/pathtorealsh/sh -xv, pero no obtuve salida, parece que el script ni siquiera se puede ejecutar.

Ni siquiera tengo una idea de qué podría causarlo.

Hola angel
fuente
2
Parece que debería funcionar. Intente ejecutarlo con bash explícitamente: `bash -x ./autorun.sh". Tal vez esto le dará una pista adicional.
nobar
2
¿Cuál es la salida de mount | grep noexec?
Cuonglm
1
@Gnouc, tienes razón, el «cdrom» montado tiene el noexecset. Probablemente puedas publicarlo como respuesta; Mientras tanto, estoy tratando de volver a montarlo con los derechos de un ejecutivo. Hm, ni siquiera sabía que el sistema de archivos podría tener ese atributo.
Hola Ángel,
Y si intentas ejecutarlo yendo, sh ./autorun.sh¿qué sucede?
infijo

Respuestas:

29

Quizás su sistema de archivos esté montado con un noexecconjunto de opciones, por lo que no puede ejecutar ningún archivo ejecutable. De la documentación de montaje :

noexec

No permita la ejecución directa de ningún binario en el sistema de archivos montado. (Hasta hace poco, era posible ejecutar binarios de todos modos usando un comando como /lib/ld*.so / mnt / binary. Este truco falla desde Linux 2.4.25 / 2.6.0.)

Tratar:

mount | grep noexec

Luego verifique si su sistema de archivos aparece en la salida.

En caso afirmativo, puede resolver este problema volviendo a montar el sistema de archivos con la execopción:

mount -o remount,exec filesystem
Cuonglm
fuente
Eso no funcionó para mí. Tuve que desmontar y luego volver a montar normalmente. Entonces funcionó bien.
datakid
@datakid: ¿Cuál es tu fs?
Cuonglm
Tengo este problema con Debian 9, algunos archivos tienen permiso denegado si los scripts se ejecutan como root, pero se identifican como root ... como un comportamiento de Windows, si elimino y el script funcionó. = [
Luciano Andress Martini
Estaba recibiendo un mensaje muy extraño, que resultó ser debido a noexec: "sh: 75: script.sh: Permiso denegado"
tmm1
2

bash -x ./filename.filetypeDeberia trabajar. Funcionó para mí cuando obtuve el permiso denegado como usuario root.

Stephen Howe
fuente
No, ya que al final el problema resultó ser la noexecopción de montaje, esto no funcionará, porque podría haber más archivos que deben ejecutarse; es decir, se filename.filetypequedaría sin aliento al intentar ejecutar otros archivos desde el mismo sistema de archivos. Puede verificarlo fácilmente con una prueba simplificada: cree un script de dos líneas que imprima "hola", luego simplemente se llame a sí mismo nuevamente, pero no establezca derechos ejecutables. Si lo ejecuta con -x, imprimirá "hola", pero luego la línea de llamada recursiva provocará un error.
Hola Ángel, el
1

Mi solución a este problema es usar la fuente . Estaba en un volumen de almacenamiento de datos muy importantes. Este volumen está montado como noexec. Tengo un script de shell simple que es ejecutable pero tengo un problema de permiso.

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

source fixsamplesheet.sh # worked fine

Solo probado en mi Ubuntu.

Kemin Zhou
fuente