È possibile leggere un file eseguibile?


9

Se un file dispone di autorizzazioni, -rwx-wx-wxpuò essere letto da altri utenti e gruppi o può essere solo eseguito e scritto? C'è un modo per leggere un file eseguibile eseguendolo?


Nessun modo standard che posso dire.
Tim

Risposte:


18

Un file con -rwx-wx-wxautorizzazioni dispone delle autorizzazioni di lettura / scrittura / esecuzione per il proprietario e delle autorizzazioni di scrittura / esecuzione (ma non di lettura) per tutti gli altri.

Se si tratta di uno script (di solito un file di testo con #!a nella prima riga), non può essere eseguito da altri, poiché l'esecuzione di uno script esegue davvero l'interprete, che deve essere in grado di leggere lo script. (L'interprete deve essere un binario, non un altro script.) (In realtà, questo non è vero per tutti i sistemi; Ubuntu, con un kernel Linux 3.2.0, consente all'interprete stesso di essere uno script interpretato. Sembra esserci un limite di circa 4 livelli. Non è probabile che sia rilevante per questa domanda.)

Se è un eseguibile binario, può essere eseguito direttamente, ma il suo contenuto non può essere letto. Ciò significa, ad esempio, che qualcuno diverso dal proprietario può eseguirlo come comando, ma non può prendere una copia dell'eseguibile.

Naturalmente l'esecuzione richiede la lettura, ma viene letta dal kernel, non dall'utente. Potresti essere in grado di ottenere alcune informazioni sul contenuto dell'eseguibile esaminando la memoria del processo mentre è in esecuzione, ma dubito che potresti ricostruire il file eseguibile binario. E se l'eseguibile è setuid, non è possibile esaminare la memoria del processo (a meno che non si abbia accesso all'account con cui è in esecuzione).

Per inciso, -rwx-wx-wxè un insieme molto strano di autorizzazioni; protegge il file dalla lettura di chiunque non sia il proprietario, ma consente a chiunque di modificarlo. Non riesco a pensare a un caso in cui avrebbe senso.


Solo una domanda casuale astratta: gli strumenti di profiling / debugging funzionerebbero sui dirigenti con solo permessi eseguibili?
Sairam,

@Sairam: l'esperimento dice di no: chmod 111 hello ; gdb ./hellodice ./hello: Permission denied.; rdiceNo executable file specified.
Keith Thompson il

Per un non eseguibile, qualcosa come -rw - w - w- può essere utile per qualcosa come un file di registro in cui si desidera che le persone siano in grado di scrivere informazioni nel registro senza essere in grado di leggerlo. Naturalmente, potrebbero semplicemente svuotare il file, ma questo è un problema separato.
Dave,

6

Con tali autorizzazioni, solo il proprietario del file può eseguirlo.

Altri utenti possono scrivergli, ma non eseguirlo (poiché l'esecuzione in questo caso implica essere in grado di leggerlo) ma possono scriverlo come una sorta di scatola nera:

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

4
Uno script di shell richiede READ e l'accesso EXECUTE per essere eseguito. Tuttavia, un binario compilato NON lo fa. Quindi un binario compilato con le autorizzazioni sopra potrebbe essere eseguito da chiunque!
mdpc,

1
Suppongo che ciò sollevi la domanda su ciò che l'OP sta cercando di realizzare, cioè perché il binario compilato dovrebbe essere scrivibile? L'insieme delle autorizzazioni (733) in realtà ha impiegato un momento per capire, dal momento che è così non standard.
cjc,

2

La semplice risposta è no : solo execsyscall può leggere un file senza richiedere l' accesso in lettura (sebbene richieda l' accesso in esecuzione ). Un opencon O_RDONLYo O_RDWRdeve fallire.


1

Ovviamente qualsiasi file può essere letto dall'utente root.

Inoltre, il caricatore di sistema, la gestione della memoria, lo swapper, ecc .... leggeranno un file con autorizzazione 'x', altrimenti non potrebbe essere eseguito.

Possibili buchi nella divulgazione dei contenuti eseguibili potrebbero essere il file / proc per il processo, i file core o usando un debugger.


questo è vero solo se un chmod| chownè stato eseguito
warren il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.