Pourquoi apt-get nécessite sudo?

12

C'est probablement une question stupide, mais j'ai récemment réalisé que je n'ai aucune idée pourquoi il n'y a pas de fonctionnalité mono-utilisateur avec apt-get.

Des réponses que je ne cherche pas:

  • Msgstr "C'est parce qu'apt écrit dans les répertoires au niveau du système". C'est le niveau de la surface pourquoi, mais je cherche un niveau plus profond. Y a-t-il quelque chose qui bloque fondamentalement un environnement mono-utilisateur (à la pip + virtualenv)?
  • "Vous pouvez simplement construire à partir de la source". Il s'agit d'une solution de contournement, mais ne répond pas à ma question. Je ne veux pas résoudre un problème à court terme et j'ai quand même un accès root sur toutes mes machines.
PattimusPrime
la source
J'espère que vous savez que vous pouvez créer n'importe quel paquet à partir des sources de votre répertoire personnel.
jobin
D'accord, mais je cherche la raison sous-jacente de la limitation apt-get. Construire à partir de la source ne répond pas à cela.
PattimusPrime
1
Je pense que la question que vous posez vraiment est "Pourquoi la plupart des logiciels Linux ne sont-ils pas déplaçables?". Il serait parfaitement possible d'autoriser apt-get à installer le logiciel dans les répertoires locaux de l'utilisateur, mais comme la plupart des logiciels ne le prennent pas en charge, cela ne servirait à rien.

Réponses:

10

Pourquoi apt-get nécessite sudo?

Pas toujours. Vous pouvez parfaitement l'utiliser apt-getsans sudo. Il y a des cas où vous n'en avez pas du tout besoin sudo, comme utiliser apt-get downloadqui télécharge un paquet dans votre répertoire actuel , apt-get sourcequi télécharge les fichiers sources debian dans votre répertoire actuel, changelogqui télécharge et imprime le journal des modifications d'un paquet donné, et toute commande qui a le --simulate/ --dry-run/ --no-act(dans le cas où installvous en avez besoin également --no-download).

En effet, ces actions / commandes ne nécessitent pas d'écrire des répertoires système.

Maintenant, pourquoi a-t-on apt-getbesoin sudo? En fait, ce n'est pas le cas. Vous pouvez abandonner apt-get, télécharger un package avec wgetet utiliser dpkg --extractet extraire le package dans le répertoire de votre choix. Il y a aussi --instdirce qui devrait fonctionner pour le paquet binaire uniquement.

Maintenant, pourquoi ce n'est pas la valeur par défaut? Parce que c'est une douleur. Pour faire ce que vous voulez, nous aurions besoin de reconditionner chaque paquet deux fois, un pour la bonne façon et un autre pour faire ce que vous voulez. Lors de la construction, les binaires doivent normalement savoir où se trouvent les fichiers et les bibliothèques dont ils ont besoin (dans certains cas, ils sont codés en dur lors de la compilation).

Maintenant, que pouvez-vous faire à la place? Il suffit de chrooter un environnement à la virtualenv, où vous pouvez installer des packages sans root.

Résumé, ce n'est pas la façon dont apt-get était censé être utilisé, et je ne connais pas d'autre gestionnaire de paquets similaire à apt-get qui vous permette de le faire. À la fin de la journée, apt-getc'est juste un frontal pour dpkg qui pourrait faire une partie de cela.

Braiam
la source
3

Les informations contenues dans le package lui-même déterminent l'emplacement d'installation des fichiers. Vous devez donc à la sudofois écrire dans /et modifier la base de données du package.

Lorsque vous installez des packages, vous installez des fichiers binaires précompilés et des fichiers de configuration et de méta et des scripts associés qui sont des parties essentielles du package. Ces scripts et fichiers de configuration sont étroitement liés aux dépendances et au reste du système. Vous ne voudriez pas les changer à la légère à moins de savoir exactement ce que vous faites.

Si vous êtes sur un système, par exemple au travail, où vous n'avez pas sudoaccès, vous pouvez compiler à partir de la source et définir le répertoire d'installation sur votre domicile. Ensuite, ce n'est pas nécessaire sudo. Lorsque vous installez à partir de la source, vous ne modifiez généralement pas la base de données du package.

chasses
la source
Merci de répondre! Je connais et utilise les solutions de contournement, mais ce que j'essaie de comprendre, c'est pourquoi je les utilise. Je pense que vous dites que le problème est que le chemin d'installation est codé en dur par les responsables du package - pourquoi cela ne peut-il pas être changé?
PattimusPrime
2

Ce n'est pas une question stupide.

Niveaux de privilège dans un système d'exploitation

Ubuntu - et en fait tout système d'exploitation moderne - a le concept de différents niveaux de privilèges pour différents logiciels. Les logiciels lancés par les utilisateurs s'exécutent généralement sous un niveau de privilège basé sur l'utilisateur qui, pour des raisons de sécurité, n'a pas l'accès requis pour modifier le système - il ne peut modifier que les fichiers appartenant à cet utilisateur.

Afin d'effectuer toute modification du système d'exploitation qui pourrait avoir un impact sur le système dans son ensemble, plutôt que seulement sur les fichiers de l'utilisateur, un niveau de privilège plus élevé est requis, ce qui sous Linux est appelé privilèges de "superutilisateur" (ou couramment appelé "root"). Ce niveau de privilège a un accès illimité à l'ensemble du système d'exploitation lui permettant de modifier - ou détruire - tous les fichiers pour tous les utilisateurs.

Le rôle d'apt-get

Lorsque vous installez un logiciel via apt-get, vous installez un logiciel qui sera disponible à l'échelle du système . Autrement dit, le logiciel ne sera pas simplement placé dans le répertoire de base d'un utilisateur pour être exécuté uniquement par cet utilisateur, mais il sera installé dans un répertoire d'application à l'échelle du système (comme dans / usr, / etc, / var, etc.) ) pour être exécuté par tous les utilisateurs. Pour modifier ces répertoires, vous avez besoin des privilèges de superutilisateur. Aucun utilisateur non privilégié ne peut modifier ces répertoires, sinon des logiciels non privilégiés pourraient perturber le système.

Si vous essayez d'installer quelque chose en utilisant apt-get sans donner les privilèges de super-utilisateur apt-get, le premier obstacle qu'il ne parviendra pas à surmonter est d'obtenir un verrou pour écrire dans son propre catalogue de logiciels. Étant un utilitaire à l'échelle du système, apt-get maintient un catalogue de logiciels installés, qui nécessite naturellement des privilèges de superutilisateur pour éditer afin qu'un logiciel non privilégié ne puisse pas jouer avec. Mais même si vous pouviez en quelque sorte surmonter cet obstacle (par exemple, en modifiant les autorisations de fichier), de nombreuses étapes supplémentaires lors de l'installation du logiciel échoueront toujours, car la routine d'installation dépendra de l'écriture dans plusieurs répertoires système.

En utilisant Linux, il est possible d'installer un logiciel sans privilèges de superutilisateur, mais vous devez l'écrire vous-même (par exemple, des scripts shell) ou le compiler vous-même et exécuter directement les exécutables compilés. Il est plus facile de l'installer à l'échelle du système en utilisant apt-get (et d'autres utilitaires basés sur APT comme aptitude, synaptic ou le centre de logiciels Ubuntu) si vous y avez accès.

thomasrutter
la source
Merci d'avoir répondu et merci pour la minutie. Je comprends la nature à l'échelle du système d'apt-get, mais ce que j'essaie de comprendre, c'est pourquoi il doit en être ainsi.
PattimusPrime
1
Il ne devait pas en être ainsi. Il se trouve que c'est la façon dont Ubuntu (et Debian) ont été conçus. Rien n'empêcherait quelqu'un de concevoir un système d'exploitation où la façon normale d'installer un logiciel serait par utilisateur.
thomasrutter
1

Pourquoi apt-get s'installe par défaut dans les répertoires / (ou similaires)?

La raison simple est que apt-getcela ne décide pas où installer le logiciel. Il est décidé par les développeurs et codé à l'intérieur de l'application elle-même.

Puis-je installer dans d'autres répertoires?

Oui, vous pouvez installer dans d'autres répertoires. Pour les logiciels open source, obtenez la source, changez le répertoire d'installation, compilez, compilez et installez-le. Il y a généralement une option dans le configurescript inclus qui vous permet de spécifier où installer. C'est généralement le cas --prefix.

Mais j'insiste sur l'utilisation d'apt-get. Que faire maintenant?

D'ACCORD. Il existe toujours un moyen de le faire avec apt-get, bien que ce soit trop pour un utilisateur final. Suis les étapes.

  1. Obtenez la source.
  2. Remplacez le répertoire d'installation par quelque chose comme $HOME.
  3. Compilez et construisez.
  4. empaquetez-le dans un fichier .deb .
  5. Créez un compte de tableau de bord.
  6. Signez le code de conduite ubuntu (je ne sais pas si celui-ci est nécessaire).
  7. créer un ppa pour vous-même .
  8. Téléchargez le paquet deb sur le ppa.
  9. ajoutez le ppa à vos sources.
  10. Courez sudo apt-get update.
  11. Courez apt-get install package.

C'était trop facile / difficile, est-il possible de sélectionner un répertoire lors de l'installation?

Oui et non.

Oui car c'est possible, certains logiciels utilisent cette méthode, la seule que je connaisse est Qt5.Il a un fichier .run qui, une fois exécuté, demande un répertoire d'installation parmi de nombreuses autres entrées.

Non car cette méthode n'utilise pas apt-get.

Puis-je le faire facilement un jour, avec apt-get?

Je ne pense pas que les développeurs apt-getet / ou les développeurs de logiciels seraient intéressés à le faire, mais certains logiciels peuvent être développés qui effectueront automatiquement les étapes de source, de modification, de compilation, de construction et d'installation en ne demandant que le répertoire d'installation.

Mon 6ème sens me dit que la commande serait

apt-dont-get install pkg1 pkg2 ...
Utilisateur enregistré
la source
Merci pour la réponse - elle est complète et répond à ma question. Cependant, je ne comprends pas pourquoi il n'y aurait aucun intérêt à développer des fonctionnalités mono-utilisateur dans apt-get. Il semble que cette fonctionnalité serait très utile dans certains cas d'utilisation.
PattimusPrime
Bonne info, mais un format Q&A dans le Q&A ...? :) Idk, vous devriez peut-être éditer dans un format standard? Juste une pensée.
chasse
@PattimusPrime De tels cas sont généralement rares, car dans la plupart des cas, les administrateurs installent tous les logiciels nécessaires et d'autres n'ont pas besoin d'installer de logiciels. De plus, le fait que la construction à partir de la source est très facile et que la mise en œuvre d'une telle fonctionnalité serait inutile tant que les développeurs de logiciels ne l'implémentent pas dans leur propre logiciel, les en empêcheront apt-get. En outre, de nombreux programmes existants dépendent d'autres programmes et les recherchent dans le répertoire / usr. La mise en œuvre d'une telle fonctionnalité nécessiterait des modifications dans tous les logiciels existants qui ont des dépendances (cela ne va pas par milliers).
Utilisateur enregistré le
Est une violation de la politique Debian pour installer des fichiers dans $ HOME. Tu ne devrais jamais faire ça. Si quoi que ce soit, utilisez /opt/packageet chmodez le répertoire à la place.
Braiam
@Braiam: J'ai vu des gens recommander l'installation de packages dans $HOME/opt/s'ils n'ont pas le privilège requis pour installer des packages dans /opt/..
Aditya
-1

Parce qu'il édite des fichiers qui sont modifiés afin que vous ne puissiez pas les utiliser. Vous pourriez être en mesure de les modifier afin que vous ne puissiez pas, je ne le recommande pas

Rarement
la source
Merci de répondre. Je cherche pourquoi il ne modifie que les fichiers chmodded. Il me semble qu'une fonctionnalité mono-utilisateur serait facile à implémenter et extrêmement utile dans certains domaines (par exemple les clusters de superordinateurs)
PattimusPrime