Après avoir lu quelques jolies réponses à cette question , je ne sais toujours pas pourquoi vous voudriez prétendre que vous êtes root sans obtenir aucun des avantages d'être réellement root.
Jusqu'à présent, ce que je peux comprendre, c'est que fakeroot est utilisé pour donner la propriété à un fichier qui doit être root lorsqu'il est décompressé / taré. Ma question, est pourquoi ne pouvez-vous pas simplement faire ça avec chown?
Une discussion de Google Groupes ici souligne que vous avez besoin de fakeroot pour compiler un noyau Debian (si vous voulez le faire à partir d'un utilisateur non privilégié). Mon commentaire est que, la raison pour laquelle vous devez être root pour compiler est probablement parce que les autorisations de lecture n'ont pas été définies pour les autres utilisateurs. Si c'est le cas, n'est-ce pas une violation de sécurité que fakeroot autorise pour la compilation (ce qui signifie que gcc peut maintenant lire un fichier qui était pour root)?
Cette réponse décrit ici que les appels système réels sont effectués avec le vrai uid / gid de l'utilisateur , donc là encore où fakeroot aide-t-il?
Comment fakeroot arrête-t-il les escalades de privilèges indésirables sur Linux? Si fakeroot peut inciter tar à créer un fichier appartenant à root, pourquoi ne pas faire quelque chose de similaire avec SUID?
D'après ce que j'ai rassemblé, fakeroot est juste utile lorsque vous souhaitez changer le propriétaire de tous les fichiers de package que vous avez créés pour rooter. Mais vous pouvez le faire avec chown, alors où suis-je manquant dans ma compréhension de la façon dont ce composant est censé être utilisé?
Réponses:
Parce que vous ne pouvez pas le faire avec
chown
, du moins pas en tant qu'utilisateur non root. (Et si vous exécutez en tant que root, vous n'avez pas besoinfakeroot
.) C'est tout l'intérêt defakeroot
: permettre aux programmes qui s'attendent à être exécutés en tant que root de s'exécuter en tant qu'utilisateur normal, tout en prétendant que les opérations nécessitant la racine réussissent.Ceci est généralement utilisé lors de la construction d'un package, afin que le processus d'installation du package en cours d'installation puisse se poursuivre sans erreur (même s'il s'exécute
chown root:root
, ouinstall -o root
, etc.).fakeroot
se souvient de la fausse propriété qu'il prétendait donner aux fichiers, donc les opérations ultérieures qui regardent la propriété voient cela au lieu de la vraie; cela permet auxtar
exécutions suivantes, par exemple, de stocker des fichiers appartenant à root.fakeroot
netar
fait rien pour faire quoi que ce soit, il préserve les modifications que le build veut faire sans laisser ces changements prendre effet sur le système hébergeant le build. Vous n'avez pas besoinfakeroot
de produire une archive tar contenant un fichier appartenant à root et suid; si vous avez un binaireevilbinary
, l'exécutiontar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, en tant qu'utilisateur normal, créera une archive tar contenantevilbinary
, détenue par root et suid. Cependant, vous ne pourrez pas extraire cette archive tar et conserver ces autorisations à moins que vous ne le fassiez en tant que root: il n'y a pas d'escalade de privilèges ici.fakeroot
est un privilège de-outil d'escalade: il vous permet d'exécuter une build en tant qu'utilisateur normal, tout en préservant les effets que la build aurait eu si elle avait été exécutée en tant que root, permettant à ces effets d'être rejoués plus tard. L'application des effets «pour de vrai» nécessite toujours des privilèges root;fakeroot
ne fournit aucune méthode pour les acquérir.Pour comprendre l'utilisation de
fakeroot
plus en détail, considérez qu'une génération de distribution typique implique les opérations suivantes (parmi beaucoup d'autres):La première partie échoue évidemment si vous n'êtes pas root. Cependant, lors de l'exécution sous
fakeroot
, en tant qu'utilisateur normal, le processus devientfakeroot
prétend qu'il réussit et se souvient du changement de propriétairetar
(ou quel que soit l'archiveur utilisé) demande au système quelle est la propriété du fichier,fakeroot
modifie la réponse pour correspondre à la propriété enregistrée précédemmentAinsi, vous pouvez exécuter une génération de package sans être root, tout en obtenant les mêmes résultats que si vous exécutiez vraiment en tant que root. L'utilisation
fakeroot
est plus sûre: le système ne peut toujours rien faire que votre utilisateur ne puisse pas faire, donc un processus d'installation non autorisé ne peut pas endommager votre système (au-delà de toucher vos fichiers).Dans Debian, les outils de construction ont été améliorés afin de ne plus en avoir besoin, et vous pouvez construire des paquets sans
fakeroot
. Ceci est supporté pardpkg
directement avec laRules-Requires-Root
directive (voirrootless-builds.txt
).Pour comprendre l'objectif
fakeroot
et les aspects de sécurité de l'exécution en tant que root ou non, il peut être utile de considérer l'objectif de l'empaquetage. Lorsque vous installez un logiciel à partir de la source, pour une utilisation à l'échelle du système, vous procédez comme suit:Lorsque vous empaquetez un logiciel, vous retardez la deuxième partie; mais pour le faire avec succès, vous devez toujours «installer» le logiciel, dans le package plutôt que sur le système. Ainsi, lorsque vous empaquetez un logiciel, le processus devient:
Maintenant, un utilisateur termine le processus en installant le package, qui doit être fait en tant que root (ou encore, un utilisateur avec les privilèges appropriés pour écrire aux emplacements appropriés). C'est là que le processus privilégié retardé est réalisé, et c'est la seule partie du processus qui nécessite des privilèges spéciaux.
fakeroot
aide aux étapes 2 et 3 ci-dessus en nous permettant d'exécuter des processus d'installation de logiciels et de capturer leur comportement, sans exécuter en tant que root.la source
tar --mode --owner
pour chaque fichier ajouté à l'archive (et fonctionne également avec d'autres programmes). Les problèmes potentiels surviennent si / lorsque vous décompressez un fichier tar ou une archive non approuvé en tant que root, pas lors de sa création.NON. La fausse racine vous permet d'exécuter des outils de manipulation et de génération de rapports, il rendra compte de manière cohérente. Cependant, il n'accordera pas réellement ces autorisations. Il semblerait que vous les ayez (faux). Cela ne changera rien en dehors de l'environnement.
Il est utile, si vous souhaitez créer une structure de répertoires, qui contient la propriété et les autorisations, qui ne peuvent pas être définies par votre utilisateur, que vous utilisiez ensuite tar, zip ou tout autre package.
Cela n'augmente pas vraiment les autorisations, c'est faux. Il ne vous laisse rien faire (supprimer, écrire, lire) que vous ne pourriez pas faire autrement. Vous pourriez produire le paquet (en théorie) sans lui. Vous pourriez obtenir un faux rapport (
ls
) sans lui.Ce n'est pas un défaut de sécurité, car il ne permet pas l' accès, ou tout ce que vous ne pouvez pas faire sans. Il fonctionne sans privilège. Tout ce qu'il dose, c'est intercepter les appels à
chown
,chmod
etc. Cela en fait une non-opération, sauf qu'il enregistre ce qui se serait passé. Il intercepte également les appels versstat
etc. afin de signaler les autorisations et la propriété, à partir de sa propre base de données interne, comme si les autres commandes avaient été exécutées. C'est utile, car si vous zippez ensuite le répertoire, il aura les fausses autorisations. Si vous décompressez ensuite, en tant que root, les autorisations deviendront réelles.Tous les fichiers qui n'étaient pas lisibles / inscriptibles auparavant resteront non lisibles / inscriptibles. Tous les fichiers spéciaux (par exemple, les appareils) créés n'auront aucun pouvoir spécial. Tout set-uid (à un autre utilisateur), les fichiers ne seront pas set-uid. Toute autre élévation de privilèges ne fonctionnera pas.
Il s'agit d'un type de machine virtuelle: une machine virtuelle, en général, peut simuler n'importe quel environnement / système d'exploitation, mais ne peut rien faire à l'hôte, ce qu'aucune autre application ne pourrait faire. Dans la machine virtuelle, vous pouvez sembler faire n'importe quoi. Vous pouvez réinventer le système de sécurité pour qu'il soit identique ou différent, mais tout cela existera sur l'hôte, en tant que ressources détenues par l'utilisateur / groupe du processus exécutant l'environnement virtuel.
la source
Il y a déjà deux bonnes réponses très détaillées ici, mais je soulignerai simplement que le paragraphe d'introduction de la page de manuel originale 1 l' explique en fait assez clairement et de manière concise:
fakeroot
Fakeroot permet à un utilisateur non root de créer des archives contenant des fichiers appartenant à root, ce qui est un élément essentiel de la génération et de la distribution de packages logiciels binaires sous Linux. Sans cela
fakeroot
, les archives de packages devraient être générées lors de l'exécution en tant que racine réelle, afin qu'elles contiennent la propriété et les autorisations de fichier appropriées. Ce serait un risque pour la sécurité. La création et le conditionnement de logiciels potentiellement non fiables représentent une énorme exposition s'ils sont effectués avec des privilèges root. Grâce àfakeroot
, un utilisateur non privilégié avec des fichiers non privilégiés peut toujours générer des archives contenant des fichiers appartenant à root. 2Mais ce n'est pas un risque pour la sécurité, car rien dans l'archive n'appartient réellement à root tant que les fichiers ne sont PAS EXTRAITS . Et même alors, les fichiers ne seront extraits avec leurs autorisations root intactes que si cela est fait par un utilisateur privilégié. Cette étape - où une
fakeroot
archive assistée contenant des fichiers "root" est extraite par un utilisateur privilégié - est où la "fausse" racine devient enfin réelle. Jusque-là, aucun privilège root réel n'est jamais obtenu ou contourné.Remarques
fakeroot
s'ils étaient installés, y comprisfakeroot-ng
etpseudo
. Mais à mon humble avis, ni la page de manuel d '«imitateur» n'est presque aussi claire pour aller droit au but sur cette question. Restez avec l'original, un seul et uniquefakeroot
OGD'autres distributions / systèmes d'emballage surmontent ce problème en n'utilisant simplement pas la propriété root dans leurs archives de packages. Sur Fedora, par exemple, un logiciel peut être compilé, installé et empaqueté par un utilisateur non privilégié sans nécessiter
fakeroot
. Tout se fait dans l'espace de l'utilisateur$HOME/rpmbuild/
, et des étapes normalement privilégiées commemake install
se redirigent (via des mécanismes comme--prefix
etDESTDIR
) vers une$HOME/rpmbuild/BUILDROOT/
hiérarchie qui pourrait être considérée comme une sorte d'espace "fakechroot" (sans réellement l'utiliserfakechroot
).Mais même pendant
make install
, tout est exécuté comme et appartenant à l'utilisateur non privilégié. La propriété et les autorisations des fichiers extraits seront définies surroot,root
et0644
(ou0755
pour les exécutables) par défaut, sauf si elles sont remplacées dans le.spec
fichier de définition de package ( ), auquel cas elles sont stockées en tant que métadonnées dans le package final. Étant donné qu'aucune autorisation ou propriété n'est réellement appliquée jusqu'au processus d'installation (privilégié) du package rpm, ni root nifakeroot
n'est nécessaire pendant l'empaquetage. Maisfakeroot
c'est vraiment juste un chemin différent vers ce même résultat.la source
fakeroot-ng
prétend remplacerfakeroot
, mais en pratique, elle ne l'a pas remplacée, et AFAIKfakeroot
est toujours l'outil utilisé par défaut dans Debian (si nécessaire).fakeroot
page de manuel, et Google m'a largué chezfakeroot-ng
(masquerading asfakeroot(1)
), et je suppose que j'ai trop présumé. Mais je vois maintenant que fakeroot-ng n'a pas été mis à jour depuis 2014 , alors que fakeroot est toujours actif . Il y a apparemment aussi un pseudo qui a disparu il y a quelques années, mais qui est maintenant au point mort. Je modifierai ma réponse en conséquence.fakeroot
page de manuel sur le site de Debian mène àfakeroot-ng
la version de par défaut. Consultez le dernier paragraphe de lafakeroot-ng
pour une touche amusante ;-).