Parece que puedo ejecutar scripts (.sh) con y sin ellos configurados como ejecutables. Entonces, ¿dónde importa exactamente esto?
Digamos que tiene el archivo que myscript
contiene lo siguiente:
#!/bin/bash
echo "Hello, World!"
Si hace que este archivo sea ejecutable y lo ejecute ./myscript
, el núcleo verá que los dos primeros bytes son #!
, lo que significa que es un archivo de script. El núcleo usará el resto de la línea como intérprete y pasará el archivo como primer argumento. Entonces, se ejecuta:
/bin/bash myscript
y bash lee el archivo y ejecuta los comandos que contiene.
Por lo tanto, para bash (o cualquier intérprete que requiera su script) para "ejecutar" el script, solo necesita poder leer el archivo.
Entonces, para los scripts, el bit de ejecución solo hace que sea un poco más conveniente ejecutarlo. Mientras bash sea ejecutable, siempre puede ejecutar bash con el archivo de script como argumento, o ejecutar bash de forma interactiva y copiar y pegar el script línea por línea en su terminal para ejecutar los comandos.
Asegúrese de no confundir "ejecutar el script de shell" con "ejecutar un script de shell usando sh".
Esto no se verá afectado por los permisos de archivo en
file.sh
:Está ejecutando
sh
(que resuelve el programa/bin/sh
), que leefile.sh
y ejecuta su código.Los permisos de archivo tendrán efecto si realmente ejecuta el script en sí :
Tenga en cuenta que los permisos de archivos no son compatibles con sistemas de archivos que no sean Linux, como FAT. Entonces, incluso si ejecuta
chmod -x file.sh
, el archivo seguirá teniendo sus permisos anteriores.El sistema de archivos impone el permiso de ejecución. Pero los programas también pueden "ejecutar" el código al leer el contenido del archivo, lo que omite los permisos del sistema de archivos en "ejecutar".
fuente
bash
) para hacer la ejecución, para bloquear que también tendrían que quitarles suread
permiso.If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Pero, ¿cómo se otorga el permiso a diferentes usuarios al verificar el permiso ejecutable? Y obtuve tu segundo punto. Te refieres a quitarles el permiso de lectura del guión para que ni siquiera puedan procesarlo a través de bash. ¿Correcto?sudo chmod g+x myfile.sh
en el terminal para agregar permisos de ejecución para el grupo del archivo. Ver Tutorial de permisos de archivos . Para administrar los permisos de varios usuarios simultáneamente, debe usar grupos; consulte, por ejemplo, Administración de grupos .No pienses en eso de la manera que. ¿Puedo ejecutar este archivo? Piénselo de la manera que: ¿Quién puede ejecutar este archivo?
Si la computadora es suya y el archivo es suyo, estoy seguro de que puede ejecutarlo. Es posible que desee profundizar en comandos como chmod y chown , y permisos de archivos.
Espero que eso ayude.
fuente
La
exec
syscall del kernel de Linux fallaEACCES
si el archivo no es ejecutableSi bien puede hacerlo
sh myprog.sh
(que solo lee los archivos e interpreta), intentar ejecutar el programa./myprog.sh
no puede funcionar, ya que cuando lo hace:exec
llamada del sistema en./myprog.sh
exec
llamada al sistema del kernel de Linux como se explica en: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -la-primera-línea-de-un-pyt / 40938801 # 40938801Esto se puede verificar con
main.c
:y
myprog.sh
:Si
myprog.sh
no es ejecutable,main
falla con:Probado en Ubuntu 17,10,
gcc -std=c99
.POSIX 7 menciona que en:
Se pueden encontrar más razones en: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the
fuente