Les scripts shell nécessitent l'autorisation de lecture pour être exécutés, mais les fichiers binaires ne le font pas:
$ 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
L'affichage du contenu d'un fichier et son exécution sont deux choses différentes. Avec les scripts shell, ces choses sont liées car elles sont "exécutées" en les "lisant" dans un nouveau shell (ou le shell actuel), si vous pardonnez la simplification. C'est pourquoi vous devez pouvoir les lire. Les binaires n'utilisent pas ce mécanisme.
Pour les répertoires, l'autorisation d'exécution est un peu différente; cela signifie que vous pouvez effectuer des opérations sur les fichiers de ce répertoire (par exemple, les lire ou les exécuter). Supposons donc que vous ayez un ensemble d'outils en ce sens /tools
que vous voulez que les gens puissent l'utiliser, mais seulement s'ils les connaissent. chmod 711 /tools
. Ensuite, les choses exécutables /tools
peuvent être exécutées explicitement (par exemple /tools/mytool
), mais ls /tools/
seront refusées. De même, des documents pourraient être stockés dans /private-docs
lesquels pourraient être lus si et seulement si les noms de fichiers sont connus.
cd
faire.stdio.h
ici. Je suggère de le retirer.ls
travail de complétion et de tabulation rend le travail de maintenance ennuyeux, et il offre peu ou pas d'avantages de sécurité réels. La plupart des fichiers qui pourraient intéresser un attaquant se trouvent de toute façon à des emplacements standard connus, ou leurs emplacements peuvent être découverts indirectement à partir de données dans d'autres fichiers (sinon comment les programmes qui utilisent légitimement ces fichiers sauraient-ils où les trouver?).Sur Gentoo, les programmes exécutables setuid (configurés pour s'exécuter avec les autorisations de leur propriétaire au lieu de leur invocateur) se voient refuser l'accès en lecture (mode 4711). Il s'agit d'ajouter une couche de protection contre l'exploitation des bogues pour faciliter l'escalade de privilèges.
Si un attaquant non privilégié peut lire un fichier setuid, et qu'il connaît un bogue qui permet une attaque de retour à la libc , il pourra peut-être utiliser le contenu du fichier pour prédire où certaines fonctions ou bibliothèques utiles sont susceptibles de se trouver. placé en mémoire lorsque le programme est appelé.
Les systèmes modernes incluent souvent des protections supplémentaires plus efficaces, comme l' ASLR , mais les restrictions présentes dans les plates-formes 32 bits peuvent les rendre plus facilement exploitables.
la source
Il semble que la valeur de "exécuter uniquement" n'ait pas beaucoup d'utilité pour un fichier, mais elle peut être utilisée pour empêcher l'un de lire le contenu d'un répertoire.
la source
Vous devez avoir des autorisations de lecture et d'exécution pour exécuter un script. La lecture du contenu d'un script est ce qui lui permet de s'exécuter, vous devez donc pouvoir le faire
read and execute
. Sinon, vous ne pouvez pas exécuter un script sans lui.Sécurité. Certains peuvent vouloir protéger leurs fichiers et empêcher d'autres de les exécuter ou de les utiliser.
la source
chmod 000
Considérerons autorisations à personne , saufroot
. Parfois, vous n'avez pas besoin d'aller aussi loin que pour la protection - cela dépend des intentions de l'utilisateur. Afin de, disons "re-chmod" le fichier revenir à des autorisations lisibles et inscriptibles que vous auriez à faire à traversroot
. Si vous n'êtes pas en mesure d'accéderroot
, cela se révélera difficile./tools
que vous voulez que les gens puissent l'utiliser, mais seulement s'ils les connaissent.chmod 711 /tools
. Ensuite , les choses exécutables en/tools
peuvent être exécutés de façon explicite, maisls /tools/
sera refusée.