Che cos'è un caso d'uso valido per un'autorizzazione di file "solo esecuzione"?


20

Stavo leggendo su chmod e le sue modalità ottali . Ho visto che 1è solo eseguire. Che cos'è un caso d'uso valido per un'autorizzazione di sola esecuzione? Per eseguire un file, si vorrebbe in genere l'autorizzazione a leggere ed eseguire.

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo

Risposte:


41

Gli script Shell richiedono l'esecuzione dell'autorizzazione di lettura, ma i file binari non:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

Visualizzare i contenuti di un file ed eseguirli sono due cose diverse. Con gli script di shell, queste cose sono correlate perché vengono "eseguite" "leggendole" in una nuova shell (o quella corrente), se perdonerai la semplificazione. Questo è il motivo per cui devi essere in grado di leggerli. I binari non usano quel meccanismo.

Per le directory, l'autorizzazione di esecuzione è leggermente diversa; significa che puoi fare cose su file all'interno di quella directory (es. leggerli o eseguirli). Quindi supponiamo che tu abbia una serie di strumenti in /toolscui desideri che le persone possano usarlo, ma solo se ne sono a conoscenza. chmod 711 /tools. Quindi le cose eseguibili /toolspossono essere eseguite esplicitamente (ad es. /tools/mytool), Ma ls /tools/verranno negate. Allo stesso modo, i documenti potrebbero essere memorizzati in /private-docscui potrebbe essere letto se e solo se i nomi dei file sono noti.


1
Per inciso, non ha più senso impostare solo l'esecuzione sui binari di sistema a meno che non si esegua ftp anonimo.
Giosuè

1
Inoltre, l'impostazione del bit eseguibile su una directory consente cddi farlo.
gardenhead

1
È inoltre possibile eseguire
phuclv

1
A proposito, non è necessario includere stdio.hqui l' intestazione C. Suggerisco di rimuoverlo.
Spikatrix

1
@Kevin: Probabilmente perché il mancato funzionamento lse il completamento della scheda rendono fastidiosi i lavori di manutenzione e forniscono poco o nessun vantaggio per la sicurezza. La maggior parte dei file a cui un utente malintenzionato potrebbe essere interessato si trovano comunque in posizioni standard note o le loro posizioni possono essere scoperte indirettamente dai dati in altri file (altrimenti come potrebbero i programmi che utilizzano legittimamente quei file dove trovarli?).
Ilmari Karonen,

4

Su Gentoo, ai programmi eseguibili setuid (impostati per essere eseguiti con le autorizzazioni del proprietario invece del loro invocatore) viene negato l'accesso in lettura (modalità 4711). Questo per aggiungere uno strato di protezione contro lo sfruttamento di bug per favorire l'escalation dei privilegi.

Se un utente malintenzionato privo di privilegi è in grado di leggere un file setuid e è a conoscenza di un bug che consente un attacco in stile restituito a libc , potrebbe essere in grado di utilizzare il contenuto del file per prevedere dove è probabile che determinate funzioni o librerie utili siano messo in memoria quando viene invocato il programma.

I sistemi moderni spesso includono protezioni aggiuntive più efficaci, come ASLR , ma le restrizioni presenti nelle piattaforme a 32 bit possono renderle più facilmente sfruttabili.


Si noti che la protezione si applica solo alle distribuzioni basate sull'origine. Con le distribuzioni basate su binari, l'attaccante può semplicemente guardare la propria copia del programma per capire dove sono le cose interessanti.
Marco

Un binario solo eseguibile può anche avere password incorporate. L'utente può eseguire il programma e può inviare la password al server, ma l'utente non sarà in grado di ottenere la password da esso (il sistema non dovrebbe consentire nemmeno loro di eseguire core dump).
Barmar,

1

Sembra che il valore di "esegui solo" non sia molto utile per un file, ma può essere usato per impedire a uno di leggere il contenuto di una directory.

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied

1
Vale la pena ricordare che il motivo per cui è utile è perché puoi ancora leggere foo / bar se conosci il nome del file. L'ho usato sui server web.
Casuale 832

0

È necessario disporre delle autorizzazioni di lettura ed esecuzione per eseguire uno script. Leggere il contenuto di uno script è ciò che gli consente di eseguirlo, quindi devi essere in grado di farlo read and execute. Altrimenti, non puoi eseguire uno script senza di esso.

Che cos'è un caso d'uso valido per un'autorizzazione di sola esecuzione?

Sicurezza. Alcuni potrebbero voler proteggere i propri file e impedire ad altri di eseguirli o utilizzarli.


2
chmod 000Considera le autorizzazioni per nessuno tranne root. A volte non è necessario andare così in profondità solo per la protezione - dipende dalle intenzioni dell'utente. Al fine di, diciamo "re-chmod" il file torna alle autorizzazioni leggibili e scrivibili che dovresti fare attraverso root. Se non riesci ad accedere root, si rivelerà difficile.
Jordan Savell,

2
Supponiamo che tu abbia una serie di strumenti in /toolscui desideri che le persone possano usarlo, ma solo se ne sono a conoscenza. chmod 711 /tools. Poi le cose eseguibili in /tools può essere eseguito in modo esplicito, ma ls /tools/verrà negato.
DopeGhoti

1
Buona risposta! Mi ha insegnato qualcosa anche lì. Perché i file binari non necessitano dell'autorizzazione in lettura per essere eseguiti?
Jordan Savell,

2
Perché visualizzare i contenuti di un file ed eseguirli sono due cose diverse. Gli script della shell vengono "eseguiti" "leggendoli" in una nuova shell (se perdonerai la semplificazione), motivo per cui devi essere in grado di leggerli. I binari non usano quel meccanismo.
DopeGhoti

1
Ah buon senso. Ho pensato che fosse qualcosa di diverso - grazie!
Jordan Savell,
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.