Pourriez-vous expliquer pourquoi un fichier binaire compilé (dans, par exemple, /usr/sbin
) a une autorisation d'écriture pour l' root
utilisateur?
Pour moi, c'est compilé. Cela signifie que l'écriture directe n'a aucune utilité et peut exposer le fichier à un problème de sécurité.
Un script (par exemple un bash
fichier) peut être accessible en écriture car il s'agit essentiellement d'un fichier texte, mais pourquoi est-il le même pour un fichier compilé où aucune écriture n'est réellement nécessaire pour autant que je sache?
Merci d'avance pour vos retours.
linux
files
permissions
root
t1m0th33
la source
la source
root
a la permission d'écrire sur un fichier binaire? Si rien d'autre ne serait utile lors de la mise à niveau de ce package.memmove()
pour déplacer la dernière partie jusqu'à la fin et ouvrez un trou, puis insérez un nouveau texte dans le trou. Ou vous pouvez utiliser une série depread()
/pwrite()
pour faire de même.ETXTBSY
). Au lieu de cela, l'ancien binaire est supprimé et le nouveau binaire est écrit dans un nouveau fichier du même nom. La suppression de fichiers ne nécessite pas d'autorisations d'écriture sur eux, simplement sur le répertoire contenant (c'est-à-dire/usr/sbin/
).Réponses:
Peu importe si les fichiers
/bin
(ou tout autre répertoire standard où les exécutables sont conservés) sont accessibles en écriture par root ou non. Sur un serveur Linux que j'utilise, ils sont accessibles en écriture par root, mais sur ma machine OpenBSD, ils ne le sont pas.Tant qu'ils ne sont pas accessibles en écriture par le groupe ou par "autre"!
Il n'y a pas de problème de sécurité, par exemple
Si quelqu'un voulait l'écraser, il faudrait qu'il soit root, et si c'est le cas
root
et l'écraser, alors ils sont soitUne autre chose à considérer est que root peut écrire dans le fichier, qu'il soit protégé en écriture ou non, car ... root.
Notez également qu'un "script" est autant un exécutable qu'un fichier binaire. Un script n'a pas besoin d'être accessible en écriture "car il s'agit d'un fichier texte". Si quoi que ce soit, il devrait probablement avoir la même autorisation que les autres exécutables du même répertoire.
N'allez pas changer les autorisations sur tout maintenant! Cela peut provoquer toutes sortes de ravages et potentiellement confondre les gestionnaires de packages qui pourraient vérifier que les autorisations sont correctement définies. Cela peut également rendre le système vulnérable si vous modifiez accidentellement les autorisations de manière incorrecte sur une application critique pour la sécurité.
Supposons simplement que les autorisations sur les exécutables sont définies correctement, sauf si vous trouvez quelque chose qui semble vraiment étrange, auquel cas vous devriez probablement contacter le responsable du package pour vérifier plutôt que de commencer à changer des choses.
D'après les commentaires et sur le chat , il y a eu un appel pour un peu d'histoire.
L'historique des autorisations sur les binaires sous Linux n'est pas quelque chose que je sache. On peut supposer qu'ils ont simplement hérité des autorisations du répertoire, ou simplement de la valeur par défaut
umask
de Linux, mais je ne sais vraiment pas.Ce que je sais, c'est qu'OpenBSD installe les binaires dans le système de base 1 avec le mode d'autorisation 555 par défaut (
-r-xr-xr-x
). Ceci est spécifié dans un fragment Makefile dans/usr/share/mk/bsd.own.mk
lequel est définiBINMODE
sur 555 (sauf s'il est déjà défini). Ceci est utilisé plus tard lors de l'installation des exécutables pendantmake build
dans/usr/src
.J'ai jeté un œil au journal CVS annoté de ce fichier et j'ai constaté que cette ligne du fichier était inchangée depuis son importation depuis NetBSD en 1995.
Sur NetBSD, le fichier a été placé pour la première fois dans CVS en 1993, avec
BINMODE
la valeur 555.Le projet FreeBSD semble avoir utilisé exactement le même fichier que NetBSD depuis au moins 1994 , et avec une validation ultérieure ajoute un indice dans le message de validation que les anciens fichiers provenaient de la version 4.4BSD de Berkeley Software Distribution.
Au-delà, le CSRG de Berkeley a conservé les sources dans SCCS, mais leur référentiel est disponible sous forme Git sur GitHub 2 . Le dossier que nous traitons ici semble avoir été commis par Keith Bostic (ou quelqu'un à proximité de lui) en 1990.
Voilà donc cette histoire. Si vous voulez le pourquoi , je suppose que nous devrons demander à Keith. J'espérais un peu voir un message de validation d'un changement disant " cela doit être 555 parce que ... ", mais non.
1 Les systèmes BSD ont une division plus stricte en "système de base" et "packages tiers" (ports / packages) que Linux. Le système de base est une unité cohérente qui fournit un ensemble complet de fonctionnalités pour exécuter le système d'exploitation, tandis que les ports ou packages sont considérés comme des "logiciels locaux" et sont installés sous
/usr/local
.2 Un référentiel GitHub plus complet des versions Unix à partir des années 70 est également disponible .
la source
root
.chmod -R
sur/usr
ou/var
, et la surprise - leursudo
ne fonctionne pas ou quelque chose ne fonctionne pas ailleurs.