Je pensais qu'il pourrait être avantageux d'avoir un utilisateur avec des autorisations supérieures à l'utilisateur root.
Vous voyez, je voudrais garder toutes les activités et presque tous les privilèges d’utilisateur root existants exactement tels qu’ils sont maintenant.
Cependant, je souhaiterais que la possibilité de refuser des privilèges s’enracine de manière extrêmement isolée au cas par cas.
L'un des avantages de cette solution me permettrait d'empêcher l'installation de certains fichiers indésirables lors des mises à jour. Ceci n'est qu'un exemple d'un avantage possible.
Comme les mises à jour d'apt-get sont exécutées à la racine ou avec les privilèges sudo, apt-get peut remplacer certains fichiers indésirables lors des mises à jour.
Si je pouvais refuser ces privilèges à ces fichiers particuliers, je pourrais les définir comme lien simulé vers /dev/null
ou éventuellement avoir un fichier fictif vierge qui pourrait avoir des autorisations qui empêcheraient le fichier d'être remplacé lors de la mise à jour.
De plus, je ne peux pas m'empêcher d'être rappelé d'une phrase qui a été dite dans une interview avec l'un des créateurs d'Ubuntu, quand le gars a dit quelque chose sur la façon dont les utilisateurs ont davantage confiance en "nous" (faisant référence aux développeurs Ubuntu) "parce que nous avons root "qui était une référence à la façon dont les mises à jour du système sont effectuées avec la permission du root.
Changer simplement la procédure d'installation pour dire que contourner ce problème n'est absolument pas ce qui m'intéresse ici. Maintenant que mon esprit a le goût d’avoir le pouvoir de refuser l’accès root, je voudrais trouver un moyen d’y arriver simplement pour le faire.
Je viens de penser à cela et je n’ai pas passé autant de temps sur l’idée jusqu’à présent et je suis assez confiant que cela pourrait être compris. Cependant, je suis curieux de savoir si cela a déjà été fait ou s'il ne s'agit peut-être pas d'une idée ou d'un concept nouveau.
Fondamentalement, il semble qu'il devrait y avoir un moyen d'avoir un super-utilisateur qui aurait une permission au-delà de celle du système à un degré près.
Remarque: Bien que je pense que la réponse acceptée correspond le mieux aux critères, j'aime beaucoup la réponse de @CR. également.
J'aimerais créer un utilisateur réel plus haut sur l'arbre (moi), mais je suppose que je devrai simplement m'asseoir un jour lorsque j'aurai le temps de le comprendre.
De plus, je n'essaie pas de choisir Ubuntu ici; Je ne l'utiliserais pas comme distribution principale si je me sentais négatif à ce sujet.
la source
apt
d'écrire (sur) des fichiers peut conduire à une erreur et à l'abandon du processus de mise à jour.apt
refusera alors de faire des mises à jour ou des installations jusqu'à ce que le "problème" soit résolu.Réponses:
L'utilisateur que vous souhaitez s'appelle LSM: module de sécurité Linux. Les plus connus sont SELinux et AppArmor.
Ainsi, vous pouvez empêcher certains fichiers binaires (et leurs processus enfants) d'effectuer certaines tâches (même si leur UID est
root
). Mais vous pouvez autoriser ces opérationsgetty
et ses processus enfants afin de pouvoir le faire manuellement.la source
Vous comprenez mal le concept d'
root
utilisateur.En clair,
root
c'est au "sommet de l'arbre".Et si vous décidiez un jour d'avoir un "super super utilisateur", puis le mois prochain un "super super super utilisateur" (!). Jusqu'où voulez-vous aller dans l'arbre? Comment mélangeriez-vous toutes les autorisations et la hiérarchie pour que cela fonctionne? Qui est toujours au top? Quelqu'un doit être au sommet, et c'est
root
. Fin de l'histoire.Les solutions proposées ici - y compris AppArmor et SELinux - ne changent pas vraiment cela. Ils permettent simplement un contrôle plus fin du grain sur les
root
autorisations et les processus.Il me semble que votre processus de mise à jour ne convient pas au résultat souhaité. Mais ce n'est pas du tout la faute de l'
root
utilisateur. Plutôt que de trop compliquer les choses, considérez-leroot
comme le plus haut utilisateur, et ensuite, vous devez travailler à la baisse.Je sais que certaines personnes noteront cela, mais il n'y a pas de niveau supérieur dans la hiérarchie des utilisateurs, et toutes les autres solutions donnent simplement un contrôle légèrement différent du fonctionnement des
root
autorisations. Mais ils ne créent pas un nouvel utilisateur, avec des autorisations plus élevées.Vous ne pouvez pas avoir un utilisateur avec "plus d'autorisations" que
root
parce queroot
représente le plus haut niveau d'autorisations possible. Utiliser une phrase telle que "plus de contrôle que root" est une contradiction -root
contrôle total et toutes les autorisations possibles, donc rien ne peut être fait au-dessus.la source
root
. C'est tout le problème. L'utilisateur que vous souhaitez créer est essentiellement l'utilisateur root. Vous devez aborder cette question dans l'autre sens, par exemple en créant un utilisateur doté deroot
privilèges, puis en interdire à certains utilisateurs pour lesquels vous souhaitez un contrôle plus fin. Ce que vous demandez ("plus de contrôle que la racine") n'est pas possible, ni même une chose!root
n’est pas autorisé à accéder directement au matériel. Si vous désactivez le chargement des modules du noyau, vous pouvez garder root bloqué sur le matériel (/dev/mem
et ainsi de suite). Pas vraiment pertinent pour les autorisations de système de fichiers, car vous n'utiliseriez pas d'apt-get ayant parlé directement à votre contrôleur SATA ou NVMe ... Mais techniquement, il existe un état "plus d'autorisations queroot
" et s'appelle le mode noyau. : PSi vous souhaitez simplement empêcher la modification / suppression de fichiers ou de répertoires, définissez simplement le drapeau immuable sur ceux-ci.
Même root ne pourra rien leur faire à moins que le drapeau ne soit supprimé. Il est également possible d'utiliser le système conteneur / espace de noms pour empêcher l'accès root, mais cela semble excessif pour ce dont vous avez besoin.
la source
apt-get
réussir à remplacer le fichier, tout en maintenant ce fichier intact? C'est un peu contradictoire j'ose dire.apt-get
à penser qu'il a réussi , mais en laissant un ou plusieurs fichiers inchangés. Ils ne disent pas quels fichiers ni pourquoi, mais comme vous le dites, ils sont quelque peu contradictoires et sujets à un "comportement étrange" à l'avenir.Au lieu d'avoir un super-super utilisateur, vous pouvez limiter root. voir Quelles sont les différentes façons de définir les autorisations de fichiers, etc. sur gnu / linux
Il y a aussi AppArmor et SELinux.
Et / ou configurez
sudo
-le afin de ne pas perdre tous les privilèges root. Vous pouvez le configurer de sorte qu'un utilisateur ne puisse exécuter que des commandes pré-convenues, avec des arguments pré-convenus.Vous pouvez également utiliser la virtualisation pour limiter root:
Voir aussi
etckeeper
: cette révision d'outil contrôle le/etc
répertoire et se synchronise avec apt. Par défaut, il n'est pas sécurisé. Une installation malveillante peut le saboter, mais vous pouvez également le forcer à transmettre les modifications à un référentiel de sauvegarde pare-feu.Utilisation du contrôle de révision en général, avec un référentiel de sauvegarde pare-feu. Cette aide en cas de corruption accidentelle et intentionnelle et de défaillance matérielle.
Les référentiels de sauvegarde avec pare-feu peuvent se trouver sur une autre machine, sur Internet ou sur une autre machine virtuelle (ou hôte de machine virtuelle).
la source
Pour des logiciels tels que APT , qui, en fonctionnement normal, nécessitent l’accès à la quasi-totalité du système, les restrictions sont problématiques. Même si vous l'empêchez d'accéder à certaines parties du système, le distributeur malveillant dispose probablement de suffisamment de possibilités pour contourner le problème. Par exemple, en remplaçant une bibliothèque ou tout simplement un fichier binaire ou en ajoutant un changement de configuration malveillant, que la racine non restreinte utilisera éventuellement.
En fonction du nombre de restrictions imposées, certains scripts d'installation risquent de ne pas fonctionner correctement.
Pour restreindre les applications et les utilisateurs, vous pouvez écrire une stratégie AppArmor ou SELinux. Cette politique dépend davantage de votre distribution: les bases basées sur Debian prennent mieux en charge AppArmor, tandis que les distributions basées sur Fedora / RHEL activent SELinux par défaut.
AppArmor et SELinux fonctionnent tous deux sur des stratégies de liste blanche , qui contiennent des règles permettant (ou interdisant) des actions spécifiques. Les stratégies sont appliquées à un processus lors de l' exécution . De même, les utilisateurs peuvent être restreints lorsqu'une stratégie est appliquée à leurs processus lors de la connexion. Une politique bien pensée ne peut être contournée (si les bogues du noyau ne sont pas pris en compte). Les processus confinés exécutés en tant que root (uid 0) sont limités par la stratégie configurée et ne peuvent pas être modifiés sauf autorisation explicite dans la stratégie.
Le langage de stratégie AppArmor définit une règle de refus , qui peut être utilisée pour créer une stratégie de liste noire . AppArmor est un bon point de départ pour consulter les pages de manuel d' AppArmor , son wiki et la configuration existante de votre distribution
/etc/apparmor.d/
.Le matériel d’administration et de développement SELinux est fourni dans le wiki SELinux . La politique de référence de SELinux est hébergée sur github.
la source
Je n'arrive pas à croire que personne n'ait mentionné le fait d'épingler ...
Il y a quelques années, Microsoft a publié un correctif qui empêchait les ordinateurs Windows 10 de communiquer avec nos anciens contrôleurs de domaine Samba NT4. Lorsque le problème a été détecté, nous avons épinglé le package Samba pour rester à la version actuelle, et
apt
nous fonctionnions toujours correctement.Une procédure pas à pas complète de Debian explique bien le processus:
Dans
/etc/apt/preferences
(ou dans un nouveau fichier sous/etc/apt/preferences.d/
), ajoutez du texte pour spécifier quel package et quelle version:Consultez la documentation pour connaître la syntaxe exacte, mais c’est la façon rapide et incorrecte de déterminer la version d’un paquet. Root peut le contourner, comme le peut toujours faire root, mais cela résout le problème des gestionnaires de paquets qui essaient de mettre à jour automatiquement les paquets sur vous.
NOTE: Cette réponse suppose que vous avez un problème XY.
la source
C'est en fait assez simple.
Root est votre "super super utilisateur"
Créez un compte appelé "admin" et donnez-lui toutes les autorisations de root, à l'exception de celles que vous ne souhaitez pas.
Créez ensuite un utilisateur appelé bob et laissez-le "devenir administrateur". En utilisant su ou même sudo.
Maintenant, vous avez un utilisateur normal (bob), un super utilisateur qui peut faire des choses admin (admin) et un super super utilisateur (root).
Si vous voulez changer le nom "root" en quelque chose d'autre, vous pouvez même le faire. Techniquement, seul l’identifiant (0) compte.
la source
Si vous souhaitez simplement empêcher l'installation de fichiers spécifiques, limiter le nombre d'autorisations root n'est pas la solution. Il convient également de noter que les réponses classiques (fichiers immuables ou LSM) ne fonctionneront pas pour votre cas d'utilisation particulier, car APT (et la plupart des autres gestionnaires de paquets) renfloueront s'ils ne peuvent pas installer de fichiers.
La vraie question que vous voulez poser est la suivante:
Existe-t-il un moyen d'empêcher APT d'installer des fichiers spécifiques?
C'est quelque chose de complètement différent de ce que vous demandez à plusieurs niveaux.
Maintenant, en ce qui concerne cette question, je ne suis pas tout à fait sûr à 100%, mais je sais qu'un certain nombre d'autres gestionnaires de paquets ont des options pour empêcher l'installation de fichiers spécifiques (par exemple, le système Portage de Gentoo a l'option
INSTALL_MASK=
, qui accepte style correspondant à des modèles de choses à ne pas installer). Je serais plus que disposé à parier qu'une telle option existe pour APT (ou éventuellement dpkg elle-même).la source
Placez une copie de sauvegarde dans un endroit sûr. Après toute installation / mise à jour, remplacez immédiatement les fichiers spécifiques de cette sauvegarde. Ainsi, aucune erreur ne vous empêche de tout installer, mais vous récupérez toujours le ou les fichiers que vous souhaitez conserver.
la source
Travailler à partir d'un lecteur monté
Notez que ceci est principalement une réponse conceptuelle, mais je pense que cela devrait fonctionner et être dans l’esprit de ce que vous voulez réaliser.
Laissez le système X votre système de travail et le système Y un autre système que vous contrôlez.
Maintenant, vous avez votre «racine active» qui peut presque tout faire et votre «super racine», le compte racine actuel du système Y, qui peut tout faire.
la source
Vous pouvez exécuter un hyperviseur de type 1 tel que l'hyperviseur Xen et héberger votre système d'exploitation normal en tant qu'invité virtualisé. L'hyperviseur contrôle le système d'exploitation invité virtuel à un niveau "plus profond" que la racine car il contrôle le matériel (virtuel) sur lequel le système d'exploitation invité s'exécute.
Vous pouvez programmer l'hyperviseur pour qu'il manipule le système d'exploitation invité de différentes manières, notamment en modifiant les autorisations, en créant et en appliquant des sauvegardes, en raccordant certaines modifications ou instructions dans le système d'exploitation invité pour injecter des fonctionnalités supplémentaires, une validation, etc. Ce serait un moyen valide et potentiellement utile. pour implémenter un système de type Unix avec un "utilisateur" (en réalité une fonction de l'hyperviseur) pour "faire des choses que même root ne peut pas faire"
Mon sentiment que cette approche est probablement exagérée si
la source
Jetez un coup d'œil aux espaces de noms cgroups et Linux en tant que méthode alternative pour atteindre ce type d'objectif, ainsi qu'à des outils basés sur ces groupes, tels que Docker et lxd .
Ces outils vous permettent, entre autres, de limiter les parties du système de fichiers qu'un processus exécutant en tant que "root" peut voir, de limiter les processus visibles par celui-ci et de ne fournir que certaines fonctionnalités à l'utilisateur "root".
la source
DÉSINSTALLER
sudo
Que diriez-vous de désinstaller
sudo
et de lien symbolique/bin/su
vers/bin/false
? Ajoutez à cela le fait de vous assurer queroot
vous ne pouvez pas vous connecter viassh
et que vous avez verrouillé le système.Cela rend
root
le Super * Super User, et tout le monde est subordonné à cela.Pour les fichiers remplacés lors des mises à jour, ne faites simplement aucune mise à jour. De façon plus réaliste, modifier les permissions des fichiers
440
ou444
ils ne peuvent pas être écrits. Ou mettez-les dans un référentiel git afin qu'ils soient effacés s'ils sont écrasés.la source
sudoers
fichier de sorte que seuls les utilisateurs sélectionnés puissent accéder aux commandes présélectionnées.