Pourquoi avons-nous besoin de la commande fakeroot? Pouvons-nous simplement utiliser les commandes sudo ou su?

La page de manuel dit:

fakeroot – exécuter une commande dans un environnement simulant les privilèges root pour manipulation de fichiers

About.com dit:

Donne une fausse racine Ce package est destiné à activer quelque chose comme: dpkg-buildpackage -rfakeroot, cest-à-dire supprimer la nécessité de devenir root pour une construction de package. Cela se fait en définissant LD_PRELOAD à libfakeroot.so, qui fournit des wrappers autour de getuid, chown, chmod, mknod, stat, …, créant ainsi un faux environnement racine. Si vous ne le faites pas « Je ne comprends rien de tout cela, vous navez pas besoin de fakeroot!

Ma question est de savoir ce que sp Un objectif spécial résout-il quun simple su ou sudo ne « t? Par exemple, pour reconditionner tous les paquets installés dans ubuntu, nous donnons la commande suivante:

$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

Pouvons-nous faire la commande ci-dessus avec sudo ou su au lieu de fakeroot comme ceci:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

EDIT:

Exécution:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

me donne cette erreur:

le répertoire de contrôle a mauvaises autorisations 700 (doivent être> = 0755 et < = 0775)

Une raison pour laquelle?

Commentaires

  • cest une bonne idée, pour des raisons de sécurité, déviter de faire en root tout ce qui pourrait être fait en tant quutilisateur normal, même si vous pouvez exécuter sudo ou su car il sagit de votre machine. fakeroot a deux usages 1) il trompe les programmes en leur faisant croire que vous êtes bien un utilisateur root, ce que certains logiciels propriétaires mal écrits peuvent exiger même sils ne sont pas nécessaires (généralement un développeur Windows est devenu Linux) et 2) il permet démuler le mode de fichier et les changements de propriété que vous ne pourriez ‘ faire autrement, principalement pour créer un fichier tar avec les autorisations correctes et la propriété, utile par exemple lors de lemballage de logiciels.
  • Je pense que la note dans lextrait de About.com résume le tout: Si vous ne ‘ Je ne comprends rien de tout cela, vous n’avez pas besoin de fakeroot! Si vous pouvez ‘ penser à une situation où fakeroot est utile, alors vous nen avez littéralement pas besoin ‘. Mais les gens qui en ont besoin comprennent parfaitement le cas dutilisation.

Réponse

Imaginez que vous êtes un développeur / mainteneur de paquet, etc. travaillant sur un serveur distant. Vous voulez mettre à jour le contenu dun paquet et le reconstruire, télécharger et personnaliser un noyau depuis kernel.org et le compiler, etc. En essayant de faire ces choses, vous découvrirez que certaines étapes nécessitent que vous ayez root droits (UID et GID 0) pour différentes raisons (sécurité, autorisations ignorées, etc.). Mais il nest pas possible dobtenir les droits root, car vous travaillez sur une machine distante (et de nombreux autres utilisateurs ont le même problème que vous). Cest exactement ce que fakeroot fait: il prétend un UID et GID efficace de 0 à lenvironnement qui les requiert.

En pratique, vous n’obtenez jamais de réels privilèges root (contrairement à su et sudo que vous mentionnez).

Commentaires

  • donc, je ne peux ‘ utiliser pour modifier les paramètres système ?? cuz la commande que nous ‘ exécuterons pensera quelle ‘ sexécute en tant que root et fera tout ce que nous voulons. gagné ‘ t-il?
  • @mrid Notez le  » En pratique, vous nobtenez jamais de vrais privilèges root « . Donc la réponse est non

Answer

Pour voir clairement la différence entre fakeroot et un vrai sudo / su, il suffit de faire:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

Tant que vous êtes dans le shell fakeroot, cela ressemble à si vous êtes root – tant que vous nessayez pas de faire quoi que ce soit qui a vraiment besoin de privilèges root. Et cest exactement ce dont un outil demballage a besoin pour créer des emballages qui auront du sens sur nimporte quelle machine.

En fait, lorsque vous utilisez fakeroot pour lempaquetage, ce que vous voulez faire est de faire en sorte que les outils que vous exécutez sous fakeroot voient vos fichiers comme appartenant à root. Ni plus ni moins. Donc, en fait, su ou sudo ne fonctionnera pas pour obtenir la bonne propriété de fichier.

Commentaires

  • Le trucage nest-il pas dangereux? Si je crée un fichier avec le bit suid et rx perm, le fichier sera créé appartenant à root, exécutable par nimporte qui, en tant que root! Ou peut-être que la définition du bit suid ne fonctionnera pas?
  • Pas bon. Jai essayé moi-même. La principale raison de fakeroot est dobtenir la propriété root: root dans les packages intégrés sans être réellement root. les paquets installés auront les bonnes perms, cependant.
  • Tout était très déroutant jusquà ce que je lis le commentaire de @ ntzrmtthihu777 ‘!
  • Désolé, Je ne ‘ pas comprendre la description. Pourquoi ne pas patcher les outils pour quils ne se plaignent ‘ si vous nêtes pas root? Comme question connexe: après tout, les fichiers que vous créez sous fakeroot ne sont pas réellement détenus par root. Ne ‘ que cela impliquerait que lorsque jinstalle un tel fichier .deb, tous mes /usr les fichiers sont la propriété de lutilisateur appelé fakeroot?
  • @ JohannesSchaub-litb, non que ‘ est le point. Les fichiers nappartiennent pas à root, mais dans un shell fakeroot, ils ressemblent à ce quils sont. Lorsque le package .deb est créé dans ce shell, le propriétaire du fichier est lu dans le système de fichiers (qui fakeroot intercepte et renvoie root) et stocké dans lemballage. Lors de linstallation du package, dpkg nécessite alors un accès root car le package indique que le fichier doit appartenir à root.

Réponse

Puisque les réponses sont difficiles à comprendre (pour moi-même) et quil a fallu réfléchir pour les comprendre ( ce commentaire ma fait comprendre), je « m va donner une meilleure explication, espérons-le.

1. Que se passe-t-il dans fakeroot

Rien de plus que ce qui se passe avec votre propre utilisateur. Absolument rien de plus. Si vous fakeroot (qui une fois appelé vous donne un nouveau shell, comme le ferait sudo), faites semblant de faire des choses pour lesquelles vous aviez besoin dune autorisation, et quittez, absolument rien ne se passerait.

Si vous y réfléchissez, cest une perte de temps totale. Pourquoi feriez-vous des trucs qui ne se produiraient pas? Cest fou. Vous auriez pu simplement ne rien faire et il ny aurait eu aucune différence, car il ny en a aucune trace.

Attendez une minute …

2. La trace of fakeroot

Il pourrait être une trace à gauche de fakeroot. Regardons les commandes dans Réponse de MortenSickel qui est plutôt sympa et mérite un vote positif:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

À première vue, il ressemble à avoir utilisé fakeroot était une perte de temps totale. En fin de compte, si vous naviez pas utilisé fakeroot, vous auriez eu la même chose chose.

La chose subtile ici est la suivante:

$ cat root.tst Wow I have root access 

Ce qui signifie que le contenu du fichier se souvient toujours dêtre une racine. Vous pourriez dire que ne pas utiliser fakeroot aurait produit les mêmes résultats. Vous avez raison, cet exemple est trop simple.

Prenons un autre exemple:

$ fakeroot # touch x # touch y # chown myuser:myuser x # ls -l > listing # exit $ ls -l total 4 -rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y $ cat listing total 0 -rw-rw-r-- 1 root root 0 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 root root 0 Jan 7 21:39 y 

Voyons ce qui sest passé. Jai fait semblant dêtre root, ce qui est totalement inefficace, et jai créé x et y. Jai prétendu x appartenir à myuser et y appartenir à root. Ils appartiennent tous les deux à myuser (comme nous pouvons le voir à la fin), mais jai juste fait semblant que ce soit comme ça.

Jai ensuite créé une liste et enregistré mon imagination dans un fichier. Plus tard, quand je regarde le fichier, je peux voir à qui jimaginais que les fichiers devraient appartenir. Encore une fois, ils ne sont pas réellement la propriété de personnes que jimaginais, je lai simplement imaginé.

3. Alors … Pourquoi voulez-vous cela à nouveau?

Vous pouvez dire que je n « ai pas vraiment besoin de faire semblant d » être root pour créer cette liste. Jaurais pu simplement créer la liste, puis la modifier pour la refléter mon imagination. Vous avez raison, vous n’avez pas besoin de fakeroot pour cela. En fait, sachant que fakeroot ne fait rien, vous ne pouvez pas avoir acquis une capacité que vous naviez pas auparavant.

Mais , et cest tout ce que fakeroot, la modification de la liste peut ne pas être triviale.Comme cest le cas pour un package qui peut être installé sur votre système, vous disposez dun tar ed, gzip ed, xz ed, bzip2 ed ou tout autre format qui garde vos fichiers ensemble et mémorise leurs autorisations et leurs propriétaires. Pouvez-vous facilement modifier le fichier compressé et modifier la propriété dun fichier? Je ne sais pas pour vous, mais je ne peux pas penser à un moyen.

Pourrait-il y avoir un outil conçu qui, une fois que tout est compressé, modifie le fichier compressé et édite par programmation les propriétés et les autorisations ? Oui, il pourrait. Donc, soit vous pouvez simuler les propriétés avant la compression, soit les changer après. Les gens de Debian ont décidé que le premier était plus simple.

4. Pourquoi ne pas simplement utiliser sudo?

Tout d’abord, vous n’avez pas besoin des privilèges root pour créer des logiciels et vous n’avez pas besoin des privilèges root pour les compresser. Donc, si vous nen avez pas besoin, vous devez vraiment être un utilisateur Windows pour même penser à obtenir cette autorisation. Mais le sarcasme mis à part, vous n’avez peut-être même pas de mot de passe root.

De plus, disons que vous avez les droits root. Et disons que vous voulez faire comme si un fichier devrait avoir un accès en lecture uniquement au racine. Donc, vous sudo, changez en fait le propriétaire du fichier et les permissions en root, vous sortez du shell racine et essayez de tout empaqueter. Vous échouez parce que maintenant vous ne pouvez plus lire le fichier puisque vous navez pas daccès root. Vous devez donc sudo et compresser et construire le package en tant que root. Effectivement, vous devez faire tout en tant que root.

Ceci est Bad TM .

En tant que conditionneur, vous n’avez pas besoin d’autorisations root et vous ne devriez pas l’obtenir. Quand vous installez un package, vous devrez peut-être installer un fichier (A) en tant que root et cest là que vous avez besoin des autorisations root. Tout ce que fakeroot fait est de rendre cela possible. Il permet au packager de lister A comme appartenant à root pour larchiveur, de sorte que lorsque le package est décompressé par lutilisateur, larchiveur demande lautorisation root et crée A appartient à root.

Commentaires

  • Excellente rédaction, cela rend les choses claires.
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. Cela ma aidé alors que je narrêtais pas de penser ‘ pourquoi ne pas le modifier après? ‘.
  • Merci, cela dissipe la confusion que jai eue après avoir lu la réponse de @Morten ‘

Réponse

AFAIK, fakeroot exécute une commande dans un environnement dans lequel il semble avoir les privilèges root pour la manipulation de fichiers. Ceci est utile pour permettre aux utilisateurs de créer des archives (tar, ar, .deb etc.) avec des fichiers en eux avec des droits / propriété root. Sans fakeroot, il faudrait disposer des privilèges root pour créer les fichiers constitutifs des archives avec les autorisations et la propriété appropriées, puis les emballer, ou il faudrait construire les archives directement, sans utiliser larchiveur.

fakeroot fonctionne en remplaçant les fonctions de la bibliothèque de manipulation de fichiers (chmod (), stat () etc.) par celles qui simulent leffet que les fonctions réelles de la bibliothèque auraient eu, si lutilisateur avait vraiment été root.

Synopsis:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command] 

Cliquez ici pour en savoir plus: fakeroot

Commentaires

  • @MaskTheSmokin: Donc, fakeroot ne vous donne le pouvoir de super utilisateur que pour les opérations de manipulation de fichiers, non.
  • Cela ne donne pas vraiment super utilisateur, il ne fait que le simuler – le programme qui y est exécuté pense quil a les privilèges root, alors quil utilise toujours les privilèges normaux de lutilisateur ‘.
  • Où est la différence entre the program running in it thinks it has root privileges et le programme ayant les privilèges root? Si je peux faire un rm -rf / et le programme, lexécuter pense que jai les privilèges root …
  • @userunknown Vous pourrez peut-être contourner rm ‘ s vérifie que vous disposez des autorisations suffisantes, mais le noyau lui-même ne ‘ vous laisse pas le faire ; lappel système unlink échouait. Il ‘ nest pas à la seule application de gérer les autorisations, ou vous ‘ être en mesure décrire votre propre application qui ne ‘ t vérifier les permissions et faire ce que vous voulez avec
  • Un exemple pour élucider le besoin de fakeroot serait fantastique. Je peux voir les utilisations de fakeroot, mais je ne ‘ pas voir pourquoi les gens ne peuvent ‘ t contourner les autorisations root au point que cela ‘ est plus facile de le simuler.

Réponse

Je « lai utilisé pour les scripts de création de packages. Je nétais pas sûr que la personne exécutant le Le script a un accès au niveau racine, mais le script devait encore générer, par exemple, un fichier tar contenant des fichiers appartenant à root. La façon la plus simple de le faire était dexécuter le script de création de package sous fakeroot, ce qui a amené larchiveur à croire que le les fichiers appartiennent à root et les ont regroupés comme tels dans larchive. De cette façon, lorsque le paquet était décompressé sur la machine de destination (sur une machine complètement différente), les fichiers nappartenaient pas à des utilisateurs étranges ou inexistants.

En y réfléchissant, le seul endroit où j « ai vu cela était pour créer une sorte d » archive: rootfs des systèmes embarqués, archives tar.gz, packages rpm, packages .deb, etc.

Commentaires

  • fakeroot est un outil de contournement pour les logiciels dempaquetage bogués: il ny a aucune raison pour laquelle vous devez être root pour créer ces paquets, b ut puisquils ne vous permettent ‘ de spécifier les permissions de fichiers que de les définir directement dans le système de fichiers avant que vous nayez pas le choix

Réponse

Une utilisation courante est de découvrir à quels fichiers un binaire défaillant voulait vraiment accéder. Autrement dit, découvrir et corriger ou contourner les bogues causés par des chemins codés en dur et une mauvaise gestion des exceptions.

Réponse

Vous pouvez utilisez fakeroot sans avoir les privilèges root. Si vous aviez su et / ou sudo, vous seriez en mesure de détruire votre système avec un simple rm -rf /, mais avec fakeroot tout au plus vous supprimeriez votre répertoire personnel.

Commentaires

  • Cela ne ‘ t expliquer la nécessité de fakeroot. Vous pouvez supprimer votre répertoire personnel comme vous-même.

Réponse

La réponse simple:

su et sudo exécutent les commandes en tant que root. fakeroot ne le fait pas, en dehors de son arrangement de bac à sable partiel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *