Je voudrais créer un nouvel utilisateur et lui donner un accès sudo. Pour être précis, je veux qu'il utilise sudo vim
et édite httpd.conf. J'ai écrit ceci dans sudoers:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
J'ai cependant entendu dire que cela pouvait être risqué. Pourquoi est-ce problématique? Quelle est la gravité du problème?
vim
, l'utilisateur est libre d'ouvrir et d'écrire dans n'importe quel fichier qu'il souhaite./etc/httpd/confs/httpd.conf
. Utilisez ensuitechgrp [OPTION] GROUPNAME FILE
pour modifier la propriété du groupe/etc/httpd/confs/httpd.conf
. Quelque chose commegroupadd vimportant
pour créer le nouveau groupe etchgrp -v vimportant /etc/httpd/confs/httpd.conf
changer la propriété du groupe. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
page de manuel.sudo
accès à vim, l'utilisateur pourra utiliser vim en tant que root. Dans vim, vous pouvez exécuter des commandes UNIX ( Comment exécuter des commandes Unix à partir de Vim? ) Afin qu'un utilisateur puisse faire quelque chose commeuseradd <myuser>
,rm -rf /
ou bien d'autres choses.Réponses:
Bien que vous restreigniez les arguments de la ligne de commande, rien n'empêche l'utilisateur d'utiliser vim pour ouvrir, modifier et écraser tout fichier aléatoire une fois qu'il s'exécute en tant que root.
L'utilisateur peut exécuter
sudo vim /etc/httpd/conf/httpd.conf
puis:r /etc/sudoers
REMARQUE: Sauf restriction par SELinux, l'utilisateur peut lire n'importe quel fichier de cette façon!user ALL=(ALL) NOPASSWD: ALL
:w /etc/sudoers
Je peux imaginer des dizaines de façons similaires dont votre utilisateur peut désormais accéder, modifier ou détruire votre système.
Vous n'aurez même pas de piste d'audit sur les fichiers qui ont été modifiés de cette manière, car vous ne le verrez que modifier votre configuration Apache dans les messages du journal sudo. Il s'agit d'un risque de sécurité dans l'octroi de
sudo
privilèges à n'importe quel éditeur.C'est plus ou moins la même raison pour laquelle l'octroi de droits de niveau racine sudo à des commandes telles que
tar
etunzip
est souvent non sécurisé, rien ne vous empêche d'inclure des remplacements pour les binaires du système ou les fichiers de configuration du système dans l'archive.Un deuxième risque, comme de nombreux autres commentateurs l'ont souligné, est qu'il
vim
permet des échappements shell , où vous pouvez démarrer un sous-shell depuis vim qui vous permet d' exécuter n'importe quelle commande arbitraire . Depuis votre session sudo vim, ceux-ci s'exécuteront en tant que root, par exemple l'échappement shell::!/bin/bash
vous donnera un shell racine interactif:!/bin/rm -rf /
fera de bonnes histoires dans le pub.Que faire à la place?
Vous pouvez toujours utiliser
sudo
pour permettre aux utilisateurs de modifier des fichiers dont ils ne sont pas propriétaires de manière sécurisée.Dans votre configuration sudoers, vous pouvez définir une commande réservée spéciale
sudoedit
suivie du chemin d'accès complet (caractère générique) aux fichiers qu'un utilisateur peut modifier:L'utilisateur peut ensuite utiliser le
-e
commutateur dans sa ligne de commande sudo ou utiliser lasudoedit
commande:Comme expliqué dans la page de manuel :
Le
sudoers
manuel contient également une section complète sur la façon dont il peut offrir une protection limitée contre les échappements de shell avec les optionsRESRICT
etNOEXEC
.et
la source
sudo tar
etsudo unzip
causais aussi des problèmes. Merci.:!rm -rf /
, whoops!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
Et boum. L'accès root à tar est une vulnérabilité.:sh
puis boum, carotte racinaireCette configuration permet à cet utilisateur de modifier ce fichier. Pour ce faire, il démarre un
vim
éditeur avec les droits root.Une fois la
vim
commande lancée, l'utilisateur peut faire ce qu'il veut avec cet éditeur. - Il peut ouvrir un fichier différent ou même lancer un shell à partir de vim.Par conséquent, l'utilisateur peut désormais afficher et modifier des fichiers arbitraires et exécuter des commandes arbitraires sur votre système.
la source
Serrures de sécurité
Certains programmes, comme par exemple
less
,vi
,vim
etmore
, aux autres programmes à exécuter à partir d' une commande shell que l' on appelle évasion Shell ou échapper à l'interpréteur de commandes. Dans ces cas, vous pouvez utiliserNOEXEC
pour empêcher certains programmes d'autoriser l'exécution d'autres privilèges de programmes. Exemple:Cela permettrait à l'utilisateur de modifier ou non et de visualiser en mode privilégié n'importe quel fichier sur le système exécutant vim et plus, mais désactiverait la possibilité d'exécuter d'autres programmes avec des privilèges à partir de l'interpréteur de commandes d'échappement
vim
.sudo
Comprend surtout plusieurs verrous de sécurité (par défaut) qui peuvent empêcher les tâches dangereuses, telles que la redirection de la sortie standard de l'exécution d'un programme (STDOUT
) vers des fichiers en dehors du répertoire de base de l'utilisateur.S'il est défini dans le fichier
/etc/sudoers
qu'un utilisateur peut exécuter avec des privilèges/usr/bin/vim
, c'est-à-dire quelque chose comme ceci:sudo
permet à l'utilisateur régulier défini de s'exécuter/usr/bin/vim
des manières suivantes:Mais être empêché d'exécuter vim comme suit:
la source
La réponse simple:
Voici une commande Vim:
Ils ont maintenant un shell racine.
la source
Une amélioration incrémentielle possible de la sécurité serait de remplacer:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
avec
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
puis faites exécuter l'utilisateur à la
sudo rvim /etc/httpd/confs/httpd.conf
place.Vim prend en charge un mode restreint déclenché avec l'option de ligne de commande -Z ou en démarrant le programme en tant que rvim. Lorsque le mode restreint est activé, "toutes les commandes utilisant un shell externe sont désactivées". Cette approche n'empêcherait pas l'utilisateur d'utiliser une
:split file
commande ex pour ouvrir d'autres fichiers, mais au moins devrait empêcher des commandes shell délibérément malveillantes comme:!rm -rf /
.la source
Je suis d'accord avec la réponse de HBruijn selon laquelle l'exécution de vim en tant que root ouvre le système très largement et sudoedit serait une solution plus sûre.
Mais même alors, votre système serait probablement encore assez ouvert. En supposant au moins qu'un processus apache avec des privilèges root sera lancé sur la base de cette configuration. Il existe un million de façons de configurer apache de telle manière qu'il exécute des programmes externes. À titre d'exemple, considérons l'argument pipe de la directive CustomLog . Le manuel indique explicitement:
Évidemment, si vos utilisateurs peuvent écrire la configuration, ils peuvent changer ce programme en ce qu'ils veulent, par exemple quelque chose qui exécute un script shell pour leur accorder des autorisations supplémentaires.
Pour cette raison, j'ai récemment piraté ensemble un moyen d'utiliser les capacités de telle manière qu'apache puisse gagner la capacité spéciale de se lier à un port privilégié même s'il s'exécute autrement en tant qu'utilisateur normal. De cette façon, les utilisateurs peuvent modifier la configuration et même lancer le serveur, et sont toujours en grande partie sûrs. Le seul problème est qu'ils peuvent lier n'importe quel processus sur n'importe quelle IP. Un certain degré de confiance demeure, car ils pourraient éventuellement trouver un moyen de planter le sshd du système, puis de lancer leur propre version dans le but d'obtenir le mot de passe root.
la source
Il convient de noter que même un
sudoedit {.../whatever.conf}
peut constituer un risque pour la sécurité.Créer un script shell
/tmp/make_me_root.sh
et appelez ce script dans votre fichier de configuration. Je connais plusieurs exemples où cette approche fonctionne:
samba -> commande log nt token
syslog-ng -> programme: Envoi de messages à des applications externes
Apache -> CustomLog
Je suppose que l'on peut étendre cette liste sans fin.
Il vous suffit de redémarrer le service. Bien sûr, une fois que vous êtes root, vous inverserez ces lignes de configuration afin de brouiller vos traces.
la source
Bien sûr, ce n'est pas du tout plus sûr. Comme dit précédemment, sudoedit est la manière la plus simple et la plus appropriée de le faire.
Ce que je veux ajouter, c'est que vim permet de lancer un shell, donc, non seulement peut éditer n'importe quel fichier système, il permet également de lancer un shell et de faire où il veut.
Essayez simplement de lancer un vim et tapez: sh
la source