Quel est le but des autorisations Linux telles que 111 ou 333 (c'est-à-dire que l'utilisateur peut exécuter , mais ne peut pas lire le fichier), si la capacité à exécuter n'implique pas automatiquement la capacité à lire?
Quel est le but des autorisations Linux telles que 111 ou 333 (c'est-à-dire que l'utilisateur peut exécuter , mais ne peut pas lire le fichier), si la capacité à exécuter n'implique pas automatiquement la capacité à lire?
Réponses:
J'ai joué avec et apparemment, les autorisations d'exécution n'impliquent pas les autorisations de lecture. Les binaires peuvent être exécutables sans être lisibles:
$ 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
Cependant, je ne peux pas exécuter de scripts, à moins qu'ils n'aient à la fois des bits d'autorisation de lecture et d'exécution sur:
$ 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
, puis bash essaie de s'ouvrir hw.sh
en lecture (et échoue).
cela a du sens pour les répertoires, par exemple si vous conservez des exécutables (secrets) dans un répertoire spécifique et autorisez ensuite les utilisateurs à appeler ces fichiers sans pouvoir voir le contenu du répertoire (mais en sachant qu'un fichier spécifique est là après que vous les ayez informés!). 333 par rapport à 111 permet d'écrire / supprimer des fichiers vers / depuis ces répertoires sans pouvoir voir le contenu du répertoire.
Évidemment, toutes les combinaisons ne sont pas aussi utiles, mais pour prendre celle que vous avez mentionnée spécifiquement ... Vous n'avez en fait pas besoin de read
permission pour exécuter un fichier - seulement une execute
permission - sauf si le fichier en question est un script (par exemple un shell-script ( .sh
), perl-script ( .pl
) et ainsi de suite). Les binaires normaux peuvent être exécutés avec juste l' execute
autorisation. Sur * BSD-systmes, plusieurs exécutables donnent une execute
permission sans read
permisson, en particulier sur les commandes "importantes pour la sécurité" - par exemple su
.
Alors pourquoi ne pas donner aux utilisateurs la read
permission (et juste la execute
permission)? Devenir un fichier qui ne peut pas être lu par un utilisateur, ne peut pas non plus être copié par cet utilisateur! La suppression de l' read
autorisation empêche les utilisateurs de créer leurs propres copies «personnelles» d'exécutables - qu'ils pourront plus tard abuser (par exemple obtenir SUID=root on
).
Et ne pas avoir write
-permission, empêche un fichier d'être supprimé par conséquent.
Rappelez - vous, ne pas donner ni read
-NOR write
-Permission au propriétaire est un rare bits, mais parfois il peut être une bonne idée d'éviter même le owner
de simplement la suppression d' un fichier. Bien sûr, le owner
- pour ne pas mentionner root
- peut toujours contourner de telles mesures, sinon par d'autres moyens, simplement par chmod
l'autorisation sur le dossier.
owner
juste de supprimer un fichier." - sauf que vous n'avez besoin d'aucune autorisation sur un fichier (lecture, écriture ou exécution) pour le supprimer.
/proc/${PID}/maps
puis en lisant les sections pertinentes de la mémoire /proc/${PID}/mem
? Ou la restriction des autorisations sur le fichier de l'exécutable restreint-elle également les autorisations de lecture sur ses sections pertinentes en mémoire pendant l'exécution? (Ce dernier semble peu probable, OMI.)