Cuando trato de correr ./script.sh
me sale Permission denied
pero cuando corro bash script.sh
todo está bien.
¿Qué hice mal?
bash
shell-script
permissions
mount
Piotr Stapp
fuente
fuente
getfacl script.sh
?Respuestas:
Permisos POSIX incorrectos
Significa que no tiene establecido el bit de permiso de ejecución
script.sh
. Cuando se ejecutabash script.sh
, solo necesita permiso de lecturascript.sh
. Consulte ¿Cuál es la diferencia entre ejecutar "bash script.sh" y "./script.sh"? para más información.Puede verificar esto ejecutando
ls -l script.sh
.Es posible que ni siquiera necesite comenzar un nuevo proceso de Bash. En muchos casos, simplemente puede ejecutar
source script.sh
o. script.sh
ejecutar los comandos de script en su shell interactivo actual. Probablemente desee iniciar un nuevo proceso Bash si el script cambia el directorio actual o modifica el entorno del proceso actual.Listas de control de acceso
Si los bits de permiso POSIX están configurados correctamente, la Lista de control de acceso (ACL) puede haberse configurado para evitar que usted o su grupo ejecuten el archivo. Por ejemplo, los permisos POSIX indicarían que el script de shell de prueba es ejecutable.
Sin embargo, intentar ejecutar el archivo da como resultado:
El
getfacl
comando muestra la razón por la cual:En este caso, mi grupo principal es el
domain users
que ha revocado los permisos de ejecución al restringir la ACL consudo setfacl -m 'g:domain\040users:rw-' t.sh
. Esta restricción puede ser levantada por cualquiera de los siguientes comandos:Ver:
Sistema de archivos montado con la opción noexec
Finalmente, la razón en este caso específico para no poder ejecutar el script es que el sistema de archivos en el que reside el script se montó con la
noexec
opción. Esta opción anula los permisos POSIX para evitar que se ejecute cualquier archivo en ese sistema de archivos.Esto se puede verificar ejecutando
mount
para enumerar todos los sistemas de archivos montados; las opciones de montaje se enumeran entre paréntesis en la entrada correspondiente al sistema de archivos, p. ej.Puede mover el script a otro sistema de archivos montado o volver a montar el sistema de archivos permitiendo la ejecución:
Nota: He utilizado
/tmp
como ejemplo aquí, ya que hay buenas razones de seguridad para mantenerse/tmp
montado con elnoexec,nodev,nosuid
conjunto de opciones.fuente
Tratar
chmod 755 script.sh
esto hará que el archivo sea ejecutable. Entonces intenta,
./script.sh
Espero que esto funcione.
fuente
En mi win7 con admin ejecutando cmd; Tengo archivos .sh asociados con cygwin64 / bin / bash, pero fue bloqueado por cmd. Ninguna de las sugerencias anteriores ayudó (chmod, setfacl, mount).
La solución a continuación funcionó, es un administrador de acl-fixer martillo de administración cada vez que las carpetas / archivos se vuelven inaccesibles para el administrador en win7, que a menudo es):
fuente