¿Se puede leer un archivo ejecutable?

9

Si un archivo tiene permisos, ¿ -rwx-wx-wxpuede ser leído por otros usuarios del grupo o solo puede ejecutarse y escribirse? ¿Hay alguna forma de leer un archivo ejecutable ejecutándolo?

Tom
fuente
No hay forma estándar que pueda decir.
Tim

Respuestas:

18

Un archivo con -rwx-wx-wxpermisos tiene permisos de lectura / escritura / ejecución para el propietario, y permisos de escritura / ejecución (pero no lectura) para todos los demás.

Si es un script (generalmente un archivo de texto con un #!en la primera línea), entonces no puede ser ejecutado por otros, porque ejecutar un script realmente ejecuta el intérprete, que debe poder leer el script. (El intérprete debe ser un binario, no otro script.) (En realidad, eso no es cierto para todos los sistemas; Ubuntu, con un núcleo Linux 3.2.0, permite que el intérprete mismo sea un script interpretado. Parece que hay un límite de aproximadamente 4 niveles. Es probable que eso no sea relevante para esta pregunta).

Si es un ejecutable binario, se puede ejecutar directamente, pero su contenido no se puede leer. Esto significa, por ejemplo, que alguien que no sea el propietario puede ejecutarlo como un comando, pero no puede obtener una copia del ejecutable.

Por supuesto, la ejecución requiere lectura, pero la lee el núcleo, no el usuario. Es posible que pueda obtener información sobre el contenido del ejecutable examinando la memoria del proceso mientras se ejecuta, pero dudo que pueda reconstruir el archivo ejecutable binario. Y si el ejecutable es setuid, no puede examinar la memoria del proceso (a menos que tenga acceso a la cuenta en la que se está ejecutando).

Por cierto, -rwx-wx-wxes un conjunto muy extraño de permisos; protege el archivo para que nadie más que el propietario pueda leerlo, pero permite que cualquiera lo modifique. No puedo pensar en un caso en el que eso tenga sentido.

Keith Thompson
fuente
Solo una pregunta aleatoria abstracta: ¿Funcionarían las herramientas de creación de perfiles / depuración en los ejecutivos con solo permisos ejecutables?
Sairam el
@Sairam: el experimento dice que no: chmod 111 hello ; gdb ./hellodice ./hello: Permission denied.; rdiceNo executable file specified.
Keith Thompson el
Para un archivo no ejecutable, algo como -rw - w - w- puede ser útil para algo como un archivo de registro en el que desea que las personas puedan escribir información en el registro sin poder leerlo. Por supuesto, podrían simplemente vaciar el archivo, pero ese es un problema separado.
Dave
6

Con esos permisos, solo el propietario del archivo puede ejecutarlo.

Otros usuarios pueden escribirle, pero no ejecutarlo (ya que la ejecución en este caso implica poder leerlo) pero pueden escribirle como una especie de recuadro negro:

user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh 
user1:/tmp$ ./testfile.sh  
server.example.com

user1:/tmp$ chmod 733 testfile.sh 
user1:/tmp$ ls -l testfile.sh 
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh

user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh 
cat: testfile.sh: Permission denied

user2:/tmp$ echo 'echo hello' >> testfile.sh 
user2:/tmp$ ./testfile.sh  
./testfile.sh: Permission denied

user2:/tmp$ logout

user1:/tmp$ ./testfile.sh
server.example.com
hello
cjc
fuente
44
Un script de shell requiere acceso de LECTURA y EJECUCIÓN para ejecutarse. Sin embargo, un binario compilado NO. Por lo tanto, un binario compilado con los permisos anteriores podría ser ejecutado por cualquiera.
mdpc
1
Supongo que esto plantea la pregunta sobre lo que el OP está tratando de lograr, es decir, ¿por qué el binario compilado podría escribirse? El conjunto de permisos (733) realmente me tomó un momento para darme cuenta, ya que no es tan estándar.
cjc
2

La respuesta simple es no : solo execsyscall puede leer un archivo sin requerir acceso de lectura (aunque exige el acceso de ejecución ). Un opencon O_RDONLYo O_RDWRdebe fallar.

yrk
fuente
1

Por supuesto, cualquier archivo puede ser leído por el usuario root.

Además, el cargador del sistema, la administración de memoria, el intercambiador, etc. leerán un archivo con el permiso 'x', de lo contrario no se podría ejecutar.

Los posibles agujeros en la divulgación de contenido ejecutable podrían ser el archivo / proc para el proceso, los archivos principales o el uso de un depurador.

mdpc
fuente
esto solo es cierto si un chmod| chownse ha realizado
warren