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?
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?
Risposte:
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
/bin/bash hw.sh
, quindi bash tenta di aprirsi hw.sh
per la lettura (e non riesce).
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.
Ovviamente non tutte le combinazioni sono così utili, ma per prendere quella che hai menzionato in modo specifico ... In realtà non hai bisogno read
dell'autorizzazione per eseguire un file - solo execute
autorizzazione - 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' execute
autorizzazione. Su * BSD-systmes, diversi eseguibili danno il execute
permesso 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 read
dell'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 read
né il write
permesso al proprietario è un po 'insolito, ma a volte può essere una buona idea impedire che anche owner
solo 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 chmod
l'autorizzazione sul file.
owner
sola eliminazione di un file." - tranne per il fatto che non è necessario alcun tipo di autorizzazione su un file (lettura, scrittura o esecuzione) per eliminarlo.
/proc/${PID}/maps
e 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.)