¿Qué significa el indicador NOEXEC al montar directorios en RHEL?

11

Estoy tratando de entender la bandera NOEXEC al montar.

Tengo un problema de ejecución dentro del directorio / tmp en otra máquina que no puedo acceder al cajero automático donde el directorio / tmp está montado en una unidad diferente a '/' y NOEXEC está presente. Quería intentar recrear este escenario en mi máquina, pero no tengo un segundo disco duro. Intenté hacer el siguiente comando:

mount --bind /test1 /test2

Luego eliminé la bindbandera y agregué NOEXECen / etc / fstab. Luego, creé un archivo en / test2 llamado test.sh donde solo echos 'hola mundo'. Intento ejecutarlo y dice 'permiso denegado'. Luego corrí chmod 777 test.shy pude ejecutar el archivo muy bien. ¿Pensé que la bandera NOEXEC no debería permitirme ejecutar nada?

¿ mount --bind /test1 /test2No es lo mismo que montar desde un disco físico completamente diferente? Como en / test1 y / test2 están en unidades diferentes?

usuario972276
fuente
Sospecho que puede ser víctima de alguna peculiaridad de Bind Mount. Mira esta respuesta .
Kamil Maciorowski

Respuestas:

7

El indicador de opción 'NOEXEC' en el mountcomando no permite la ejecución de archivos binarios ejecutables en el sistema de archivos montado 1 . Sin embargo, cuando un script (un archivo de texto que comienza con la línea she-bang; es decir, una línea que comienza con #!) se entrega a algunos shells (bash), ejecutará el ejecutable nombrado en esa línea (por ejemplo, /usr/bin/perl) y pasará el ruta del script de shell como primer argumento. El intérprete real podría no estar en ese punto de montaje.
__________
1 El mountcomando generalmente monta un sistema de archivos . (Podría decirse que el loop-back o los bindmontajes pueden considerarse una excepción a esta generalidad). En algunos casos (por ejemplo, /tmp), este sistema de archivos contendrá solo un directorio.

KJ4IPS
fuente
Entonces, aunque el archivo sh reside en / test2, ¿se está ejecutando en / bin / sh, no / test2? En la otra máquina, hay un proceso de Java que escribe scripts de shell en el directorio / tmp y luego los ejecuta. Creo recordar los scripts de shell que está creando #!/bin/shen la parte superior. No sé cómo se ejecuta el script de shell además de pasar por Java y las referencias / bin / sh. Si hace referencia a / bin / sh y el directorio bin tiene privilegios de ejecución, ¿por qué los scripts de shell no se ejecutarían como lo hicieron en mi prueba?
user972276
Todo depende de la llamada al shell / programa, los scripts de shell no son ELF y no se pueden ejecutar directamente, sin embargo, algunos shells no permitirán que se ejecute un script en un FS que está montado NOEXEC, simplemente morirán. No estoy seguro de cuál es el comportamiento de / bin / sh en este caso. (Especialmente porque no sé cuál estás usando, hay algunos sabores).
KJ4IPS
Ahora que lo pienso, cuando usa el shell, ¡el sistema nota el #! línea, y llama al interpereter apropiado (/ bin / bash /tmp/file.sh), pero si el bit de Java solo está llamando (/tmp/file.sh), eso no va a funcionar.
KJ4IPS
la instancia de java no está en el directorio / tmp y necesitaría usar un intérprete para ejecutar scripts de shell ¿verdad? A menos que Java tenga esa funcionalidad incorporada, lo que significa que la ejecución aún no ocurriría en el directorio / tmp.
user972276
En mi opinión, su respuesta afirma erróneamente que es el trabajo del shell leer un shebang. Mira esta respuesta .
Kamil Maciorowski