Si j'étais root, je pouvais simplement créer un utilisateur / groupe factice, définir les autorisations de fichier en conséquence et exécuter le processus en tant qu'utilisateur. Cependant, je ne le suis pas, alors y a-t-il un moyen d'y parvenir sans être root?
permissions
not-root-user
jails
Tobias Kienzler
la source
la source
chroot
serait naturellement là, mais là encore, vous n'êtes pas root.Réponses:
Des questions plus similaires avec plus de réponses méritent l'attention:
REMARQUE: certaines des réponses indiquent des solutions spécifiques non encore mentionnées ici.
En fait, il existe de nombreux outils d'emprisonnement avec une implémentation différente, mais beaucoup d'entre eux ne sont pas sécurisés par conception (comme
fakeroot
,LD_PRELOAD
basés sur), ou incomplets (commefakeroot-ng
,ptrace
basés sur), ou nécessiteraient root (chroot
, ouplash
mentionnés à fakechroot étiquette d'avertissement ).Ce ne sont que des exemples; J'ai pensé à les répertorier tous côte à côte, avec une indication de ces 2 fonctionnalités ("peut être approuvé?", "Nécessite la configuration de root?"), Peut-être dans les implémentations de virtualisation au niveau du système d'exploitation .
En général, les réponses y couvrent l'ensemble des possibilités décrites et encore plus:
machines virtuelles / OS
extension du noyau (comme SELinux)
chroot
Assistants basés sur Chroot (qui doivent cependant être setUID root, car
chroot
nécessite root; ou peut-êtrechroot
pourrait fonctionner dans un espace de noms isolé - voir ci-dessous):[pour en dire un peu plus à leur sujet!]
Outils d'isolement basés sur chroot connus:
hsh-run
ethsh-shell
. ( Hasher a été conçu pour créer des logiciels de manière sûre et reproductible.)ptrace
Une autre solution d'isolement fiable (en plus d' une
seccomp
solution basée sur ) serait l'interception complète de syscallptrace
, comme expliqué dans la page de manuel pourfakeroot-ng
:Pourtant, comme vous pouvez le lire,
fakeroot-ng
lui-même n'est pas conçu à cet effet.(BTW, je me demande pourquoi ils ont choisi d'utiliser l'
seccomp
approche basée sur le chrome plutôt qu'une approche baséeptrace
sur ...)Parmi les outils non mentionnés ci-dessus, j'ai noté Geordi pour moi-même, car j'ai aimé que le programme de contrôle soit écrit en Haskell.
Outils d'isolation basés sur ptrace connus:
fakeroot-ng
seccomp
Une méthode connue pour réaliser l'isolement consiste à utiliser l'approche sandboxing seccomp utilisée dans Google Chromium . Mais cette approche suppose que vous écriviez un assistant qui traiterait certains (ceux autorisés) de l'accès aux fichiers "interceptés" et d'autres appels système; et aussi, bien sûr, faire des efforts pour "intercepter" les appels système et les rediriger vers l'assistant (peut-être, cela signifierait même une chose telle que remplacer les appels système interceptés dans le code du processus contrôlé; donc, cela ne sonne pas pour être assez simple; si vous êtes intéressé, vous feriez mieux de lire les détails plutôt que juste ma réponse).
Plus d'informations connexes (à partir de Wikipedia):
(Le dernier élément semble être intéressant si l'on recherche une
seccomp
solution générale en dehors de Chromium. Il y a aussi un article de blog qui mérite d'être lu par l'auteur de "seccomp-nurse": SECCOMP comme solution de sandboxing?. )L'illustration de cette approche du projet "seccomp-nurse" :
Un seccomp "flexible" possible dans le futur de Linux?
En 2009, il y avait également des suggestions pour patcher le noyau Linux afin qu'il y ait plus de flexibilité dans le
seccomp
mode - afin que "beaucoup d'acrobaties dont nous avons actuellement besoin puissent être évitées". ("Acrobatics" fait référence aux complications de l'écriture d'un assistant qui doit exécuter de nombreux appels système potentiellement innocents au nom du processus emprisonné et de la substitution des appels système potentiellement innocents dans le processus emprisonné.) Un article de LWN a écrit à ce sujet:Cette «seccomp flexible» rapprocherait les possibilités de Linux de fournir la fonctionnalité souhaitée dans le système d'exploitation, sans avoir besoin d'écrire des aides aussi compliquées.
(Un article de blog avec essentiellement le même contenu que cette réponse: http://geofft.mit.edu/blog/sipb/33 .)
espaces de noms (
unshare
)L'isolement via des espaces de noms (
unshare
solutions basées sur ) - non mentionné ici - par exemple, le non-partage des points de montage (combinés avec FUSE?) Pourrait peut-être faire partie d'une solution de travail pour vous qui souhaitez limiter les accès au système de fichiers de vos processus non fiables.Plus d'informations sur les espaces de noms, maintenant que leur implémentation est terminée (cette technique d'isolation est également connue sous le nme "Linux Containers", ou "LXC" , n'est-ce pas? ..):
"L'un des objectifs généraux des espaces de noms est de soutenir la mise en œuvre de conteneurs, un outil de virtualisation légère (ainsi que d'autres objectifs)" .
Il est même possible de créer un nouvel espace de noms d'utilisateurs, de sorte qu'un "processus puisse avoir un ID utilisateur normal non privilégié en dehors d'un espace de noms d'utilisateurs tout en ayant un ID utilisateur de 0 à l'intérieur de l'espace de noms. Cela signifie que le processus dispose de privilèges root complets pour les opérations à l'intérieur de l'espace de noms utilisateur, mais n'est pas privilégié pour les opérations à l'extérieur de l'espace de noms ".
Pour de vraies commandes de travail, procédez comme suit:
et programmation / compilation spéciale en espace utilisateur
Mais bien sûr, les garanties de "prison" souhaitées peuvent être mises en œuvre en programmant dans l'espace utilisateur ( sans prise en charge supplémentaire de cette fonctionnalité par le système d'exploitation ; c'est peut-être pourquoi cette fonctionnalité n'a pas été incluse en premier lieu dans la conception des systèmes d'exploitation ); avec plus ou moins de complications.
Le dessus
ptrace
- ouseccomp
sandbox à base peut être considérée comme certaines variantes de mise en œuvre des garanties en écrivant une aide sandbox qui contrôle vos autres processus, qui seraient considérés comme des « boîtes noires », arbitraire programmes Unix.Une autre approche pourrait être d'utiliser des techniques de programmation qui peuvent se soucier des effets qui doivent être interdits. (Ce doit être vous qui écrivez les programmes alors; ce ne sont plus des boîtes noires.) Pour en mentionner un, utiliser un langage de programmation pur (qui vous obligerait à programmer sans effets secondaires) comme Haskell fera simplement tous les effets du programme explicite, de sorte que le programmeur peut facilement s'assurer qu'il n'y aura pas d'effets interdits.
Je suppose qu'il existe des installations de sandbox disponibles pour ces programmes dans un autre langage, par exemple Java.
Cf. Proposition de projet "Sandboxed Haskell" .
NaCl - non mentionné ici - appartient à ce groupe, n'est-ce pas?
Certaines pages accumulant des informations sur ce sujet ont également été pointées dans les réponses:
la source
chroot
, mais cela nécessiterait probablement encore de vrais privilèges root ...Il s'agit d'une limitation fondamentale du modèle d'autorisation unix: seule la racine peut déléguer.
Vous n'avez pas besoin d'être root pour exécuter une machine virtuelle (pas vrai de toutes les technologies VM), mais c'est une solution lourde.
Linux en mode utilisateur est une solution de virtualisation Linux sur Linux relativement légère. Ce n'est pas si simple à installer; vous devrez remplir une partition racine (dans un répertoire) avec au moins au minimum nécessaire pour démarrer (quelques fichiers dans
/etc
,/sbin/init
et ses dépendances, un programme de connexion, un shell et utilitaires).la source
Je suppose que vous pouvez avoir de la chance
LD_PRELOAD
d'intercepter l'accès à certains fichiers, mais cela pourrait être vraiment délicat.la source
LD_PRELOAD
ne peut pas faire confiance (peut être contournée), mais l' interception par le biaisptrace
peut.LD_PRELOAD
solutions basées sur la confiance ne peuvent pas être approuvées comme mesure de sécurité.De la liste complète, j'ajouterais simplement:
fakeroot (du gestionnaire de paquets debian): il vise à construire des paquets avec des outils "conviviaux". Ce n'est pas un isolement complet, mais cela aide à créer des packages avec différents utilisateurs et de faux appareils et d'autres pseudo-fichiers spéciaux.
fakechroot (qui utilise fakeroot). Ce programme a de nombreux bugs. Par exemple, "/ etc / hosts" est codé en dur dans la glibc: vous ne pouvez pas le changer via cet outil.
qemu: vous devez compiler un noyau linux, mais le résultat est très rapide, et c'est une machine "fausse" (c'est-à-dire virtuelle) avec de vrais privilèges root. Vous pouvez créer et monter n'importe quelle image de démarrage.
la source
Firejail est un bel outil pour emprisonner n'importe quel processus, avec ou sans accès root avec beaucoup d'options et très flexible:
la source