Scopo di autorizzazioni come 0111 o 0333


17

Qual è lo scopo delle autorizzazioni Linux come 111 o 333 (ovvero l'utente può eseguire , ma non può leggere il file), se la capacità di eseguire non implica automaticamente la capacità di leggere?


1
Hai un esempio per tale impostazione? Penso che tu abbia ragione. Non puoi eseguire ciò che non puoi leggere. Queste combinazioni sono solo teoriche nello spazio delle autorizzazioni tra 0000 e 0777. Nota che lo 0 iniziale dovrebbe essere aggiunto per mostrare la base ottale del numero.
Ikrabbe,

6
A meno che non sia uno script (es. Shell-script) in realtà non è necessario il permesso di lettura per eseguire un comando. Un eseguibile "normale" - ad es. su, bash o vi: è sufficiente impostare il bit eseguibile per consentire a un utente di eseguirlo. Un file che non può essere letto, non può essere copiato . Pertanto, non consentendo a un utente di copiare un comando importante per la sicurezza (come su), gli viene impedito di crearne una propria copia - e anche di provare a smontarlo. * BSD ha diversi comandi con esecuzione ma senza autorizzazione di lettura.
Baard Kopperud,

Risposte:


25

Ci ho giocato e, a quanto pare, le autorizzazioni exec non implicano autorizzazioni di lettura. I file binari possono essere eseguibili senza essere leggibili:

$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw 
hello world
$ cat hw
/bin/cat: hw: Permission denied

Tuttavia, non posso eseguire script, a meno che non abbiano entrambi i bit di autorizzazione read e exec su:

$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh 
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied

4
Questo è corretto poiché il secondo esempio usa il #! per iniziare in quanto manca l'intestazione ELF e quindi richiede che il file sia leggibile affinché indovini quale eseguibile utilizzarlo. Questa è una situazione comune in cui si desidera proteggere il contenuto dei file dalla copia in altre posizioni. Un gestore di licenze è un esempio comune in cui lo vedresti.
hspaans,

1
Nota che puoi ancora leggere un binario solo eseguibile: unix.stackexchange.com/a/34294
小 太郎

6
@hspaans: lo shebang è gestito dal kernel, e al kernel non interessano le piccole cose pittoresche come i permessi. È la shell (o interprete) che necessita dell'accesso in lettura. Il kernel viene eseguito (diciamo) /bin/bash hw.sh, quindi bash tenta di aprirsi hw.shper la lettura (e non riesce).
Kevin,

2
Spero davvero che il kernel si preoccupi delle autorizzazioni. Nient'altro lo fa. Ciò che la frase spaventosa nel post di @ Kevin significa che il kernel richiede solo autorizzazioni di esecuzione per eseguire i file, indipendentemente dal fatto che utilizzino shebang.
Emil Jeřábek sostiene Monica il

2
@ EmilJeřábek Il kernel si preoccupa delle autorizzazioni quando decide cosa può fare un processo di candidatura. Ma poiché è il componente che implementa le autorizzazioni, può anche ignorarle internamente. Quindi può leggere la riga di shebang quando determina come eseguire un file interpretato o leggere in memoria il contenuto di un file binario di sola esecuzione.
Barmar,

16

ha senso per le directory, ad esempio se si mantengono eseguibili (segreti) in una directory specifica e quindi si consente agli utenti di chiamare quei file senza essere in grado di vedere il contenuto della directory (ma sapendo che un file specifico è lì dopo averli informati!). 333 rispetto a 111 consente di scrivere / eliminare file da / verso quelle directory senza poter vedere il contenuto della directory.


5
Nella mia Uni, quei permessi venivano usati per trascinare i compiti in una directory senza che gli studenti vedessero lavorare gli altri. Il docente era un vecchio sciocco.
DarkHeart,

@DarkHeart Interessante. Spero che tu abbia dovuto aggiungere un componente casuale ai nomi dei file, perché altrimenti, se questo non è un incentivo per provare a copiare dai tuoi compagni di classe, non so cosa sia.
PSkocik,

5

Ovviamente non tutte le combinazioni sono così utili, ma per prendere quella che hai menzionato in modo specifico ... In realtà non hai bisogno readdell'autorizzazione per eseguire un file - solo executeautorizzazione - a meno che il file in questione non sia uno script (es. Uno shell-script ( .sh), perl-script ( .pl) e così via). I binari normali possono essere eseguiti solo con l' executeautorizzazione. Su * BSD-systmes, diversi eseguibili danno il executepermesso senza permessi read, specialmente su comandi "importanti per la sicurezza" - ad es su.

Quindi perché non dare agli utenti read-autorizzazione (e solo execute-permisson)? Perché un file che non può essere letto da un utente, non può essere copiato neanche da quell'utente! La rimozione readdell'autorizzazione impedisce agli utenti di creare copie "personali" dei file eseguibili, che in seguito potrebbero essere in grado di abusare (ad esempio, ottenere SUID=root on).

E non avendo write-permissione, impedisce la cancellazione accidentale di un file.

Intendiamoci, non dare né il permesso readné il writepermesso al proprietario è un po 'insolito, ma a volte può essere una buona idea impedire che anche ownersolo la cancellazione di un file. Naturalmente il owner- per non parlare root- può sempre aggirare tali misure, se non in altri modi, quindi semplicemente con chmodl'autorizzazione sul file.


"potrebbe essere una buona idea impedire anche la ownersola eliminazione di un file." - tranne per il fatto che non è necessario alcun tipo di autorizzazione su un file (lettura, scrittura o esecuzione) per eliminarlo.
Celada,

Gli eseguibili solo pronti possono essere utilizzati, ad esempio, se l'eseguibile incorpora una password del database che utilizza quando viene eseguito per connettersi a un database e fare il suo lavoro, ma non vuole necessariamente rivelare la password.
Celada,

@Celada, è una vecchia domanda, ma un tale approccio non sarebbe suscettibile al dumping della memoria attraverso la ricerca degli offset della regione di memoria /proc/${PID}/mapse la lettura delle relative sezioni di memoria /proc/${PID}/mem? Oppure la limitazione delle autorizzazioni sul file dell'eseguibile limita anche le autorizzazioni di lettura nelle sezioni pertinenti in memoria durante l'esecuzione? (Quest'ultimo sembra improbabile, IMO.)
Spencer D
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.