Risposte:
Un file con -rwx-wx-wx
autorizzazioni 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.
chmod 111 hello ; gdb ./hello
dice ./hello: Permission denied.
; r
diceNo executable file specified.
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
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.
chmod
| chown
è stato eseguito