J'ai une configuration réseau très sensible et je ne veux vraiment pas la gâcher. Mon réseau est composé d'un groupe d'utilisateurs qui ont le privilège sudo.
Je veux les empêcher de courir
service NetworkManager restart
service network restart
commandes.
Existe-t-il un moyen d'y parvenir?
networking
etnetwork-manager
? Aussi, pourquoi vos utilisateurs y ont-ilssudo
accès? Ils ne devraient pas, sauf si vous voulez qu'ils aient des privilèges root complets.Réponses:
L'utilisation de CmndAlias
ALL
ne sera jamais sûreIl y a 1000 façons de fonctionner
service network restart
sans fairesudo service network restart
. Voici un exemple de ce qu'un utilisateur méchant pourrait essayer:Si vous fournissez aux utilisateurs l'
ALL
alias de commande, puis essayez de créer une liste noire, ils pourront toujours trouver un moyen de la contourner. Blacklist bash, et ils utiliseront python. Liste noire python, et ils utiliseront Perl. Mettez Perl en liste noire et ils utiliseront PHP. Personne ne veut ça!Si vous ne voulez vraiment pas que quelqu'un fasse quelque chose, vous devez faire comme Thomas le dit et créer une liste blanche des choses qu'il est autorisé à faire.
Configuration d'une liste blanche avec une exception
Un exemple de petite liste blanche avec exclusion peut être trouvé vers le bas de
man sudoers
:(En fait, cet exemple de la page de manuel n'est pas sûr et peut être exploité pour changer le mot de passe de root! Voir les commentaires ci-dessous pour savoir comment.)
Nous pouvons essayer d'adapter cela à votre cas, de proposer toutes les
service
commandes au groupe du personnel, mais d' exclure lesservice network
commandes qui vous concernent:(Le
ALL
dans cette position fait référence à Host_Alias, pas à Cmnd_Alias - confus n'est-ce pas?)L'utilisateur ne pourra pas exécuter
sudo bash
ousudo tee
ousudo wget
ousudo /path/to/malicious_script
. Vous pouvez ajouter à la liste blanche plus de commandes d'administration pour vos utilisateurs si vous faites attention. Soyez précis!Remarque: J'ai ajouté l'
*
avant le motnetwork
ci-dessus, juste au cas où un drapeau inoffensif serait ajouté à l'service
outil à l'avenir. Imaginons qu'un--verbose
indicateur ait été ajouté à l'avenir, les utilisateurs pourront alors exécuter ce qui suit:Nous avons donc besoin de
*
pour consommer tous les drapeaux avant le nom du service. Le seul inconvénient est que cela pourrait bloquer d'autres services qui ne gênent pas réellement les utilisateurs, par exemple un service appelésafe-network
ounetwork-monitor
serait également rejeté.Autoriser les utilisateurs à modifier un fichier à l'aide des autorisations de groupe
Ci-dessous, vous trouverez différentes tentatives d'utilisation de
rnano
throughsudo
pour permettre aux utilisateurs de modifier un ou plusieurs fichiers. Mais en réalité, ils sont plus complexes et plus dangereux qu'ils ne devraient l'être.Une solution beaucoup plus simple et plus sûre consiste à modifier les autorisations de groupe sur les fichiers spécifiques pour lesquels vous souhaitez ouvrir les droits de modification. Voici quelques exemples:
Si vous avez besoin d'un contrôle plus précis (par exemple: accès pour seulement 3 utilisateurs, mais pas pour tous les membres du personnel), vous pouvez créer un nouveau groupe à l'aide de la
addgroup
commande et y ajouter seulement quelques utilisateurs.Permettre aux utilisateurs de modifier un fichier via
sudo
Le reste de cette réponse est devenu une enquête sur la facilité avec laquelle il est possible de laisser des trous dans votre
sudo
configuration lorsque vous essayez d'offrir de la flexibilité à vos utilisateurs. Je ne recommanderais pas de faire l'une des choses suivantes!Si vous souhaitez autoriser vos utilisateurs à modifier un fichier spécifique, vous pouvez essayer d'utiliser
rnano
:rnano
ne leur permettra que de modifier le fichier spécifié. Cela est important pour empêcher un utilisateur malveillant de modifier un service différent (par exemple/etc/init.d/urandom
) et d'y ajouter une ligne qui s'exécuteraitservice network restart
.Malheureusement, je n'ai pas trouvé de moyen de restreindre
rvim
suffisamment (l'utilisateur peut toujours ouvrir n'importe quel fichier en utilisant:e
), nous sommes donc coincés avecnano
.Malheureusement, permettre aux utilisateurs de modifier plusieurs fichiers est beaucoup plus difficile ...
Laissez les utilisateurs éditer plusieurs fichiers (beaucoup plus difficile qu'il ne devrait l'être)
1. Approches dangereuses
Attention aux caractères génériques! Si vous offrez trop de flexibilité (ou toute flexibilité), elle peut être exploitée:
Dans ce cas, un utilisateur malveillant pourrait modifier tout autre script de service parvenu, puis l'exécuter:
(Sudo empêche
.
et..
développe réellement la commande, mais malheureusement pas les arguments.)J'espérais que quelque chose comme ça pourrait fonctionner, mais ce n'est toujours pas sûr:
Étant donné
sudo
qu'actuellement ne propose que des modèles globaux , cela*
correspondra à tout - ce n'est pas une expression régulière!(Edit: J'ai envisagé si vous pouviez vous en sortir avec ce qui précède dans votre situation, car il n'y a pas de sous-dossiers en dessous
sites-available
. Nous avons demandé qu'un caractère soit mis en correspondance après le dossier, et/..
devrait échouer après un nom de fichier. Cependant, ce n'est pas un solution réalisable, carrnano
accepte plusieurs arguments. Et en général, cela ne serait pas sûr sur un dossier qui avait des sous-dossiers!)Même si nous n'avons pas de sous-dossiers, et que nous excluons toutes les lignes contenant
/../
, la règle offrant un*
glob pourrait toujours être exploitée, carrnano
accepte plusieurs arguments (en les parcourant<C-X>
, et l'espace est heureusement accepté par le*
glob.2. Pousser l'enveloppe (également finalement dangereux)
Et si nous rejetons toutes les lignes contenant des espaces ou essayons d'atteindre
/..
? Ensuite, une solution finale réalisable pourrait être la suivante:Nous acceptons tout ce qui est "sous" le dossier mais nous rejetons également tout appel à
rnano
si/..
ou/.
ousont passés, ou si le dossier est ciblé directement. (Techniquement, l'
/.
exclusion rend l'/..
exclusion redondante, mais j'ai laissé les deux pour plus de clarté.)J'ai trouvé le dossier et les
/.
exclusions étaient nécessaires car sinon l'utilisateur pourrait cibler le dossier lui-même. Maintenant, vous pourriez penserrnano
que bloquerait si pointé vers un dossier, mais vous auriez tort. En fait, ma version (2.2.6-1ubuntu1) démarre avec un léger avertissement et un fichier vide, puis<C-X>
me demande d'entrer le nom de fichier dans lequel je souhaite enregistrer, ouvrant un nouveau vecteur d'attaque! Eh bien, au moins, il a refusé d'écraser un fichier existant (dans le seul test que j'ai fait). Quoi qu'il en soit, puisqu'il n'y a aucun moyen de mettre les sous-dossiers sur liste noire avec sudo, nous devons conclure que cette approche est à nouveau dangereuse. Désolé les utilisateurs!Cette découverte m'a fait douter de la rigueur du
nano
mode "restreint" de. Ils disent qu'une chaîne n'est aussi forte que son maillon le plus faible. Je commence à ressentir la combinaison de lasudo
liste noire de la magie noire et je ne suisrnano
peut-être pas plus sûr qu'une chaîne de marguerites.3. Approches sûres mais limitées
Les globes sont très restreints - ils ne nous permettent pas de faire correspondre plusieurs fois une classe de personnage. Vous pouvez proposer plusieurs modifications de fichiers si tous vos noms de fichiers ont la même longueur (dans ce cas,
host
suivis d'un seul chiffre):Mais si vous souhaitez autoriser l'utilisateur à modifier divers fichiers, vous devrez peut-être spécifier explicitement chaque fichier:
Ne soyez pas tenté d'utiliser un
*
à tout moment. Voir les sections 1. et 2. ci-dessus pour savoir pourquoi! N'oubliez pas: une petite fiche peut compromettre l'ensemble du compte superutilisateur et l'ensemble du système.4. Écrivez votre propre vérificateur d'arguments (la sécurité est maintenant de votre responsabilité)
J'espère qu'ils ajouteront un support regexp à
sudo
l'avenir; il pourrait résoudre de nombreux problèmes s'il est utilisé correctement. Mais nous pouvons également avoir besoin de la possibilité de vérifier les propriétés des arguments (pour autoriser uniquement les fichiers, uniquement les dossiers ou uniquement certains indicateurs).Mais il existe une alternative pour créer de la flexibilité dans sudo. Passez la balle:
Ensuite, écrivez votre propre
staffedit
script ou exécutable pour vérifier si les arguments transmis par l'utilisateur sont légaux, et exécutez leur demande uniquement s'ils le sont.la source
ALL=(ALL:ALL) ALL
trop manquant de sémantique, mais j'ai toujours supposé quelque part qu'il aurait un vérificateur d'argument décent ... J'avais tort. C'est vraiment très limité. Même l'exclusion des racines passwd offert dans l'homme-page peut être rompu avec un argument de ligne de commande simple,sudo passwd -q root
. Eh bien, les auteurs de sudo répertorient [quelques alternatives] (sudo.ws/sudo/other.html) sur leur site Web. J'espère qu'ils ajouteront le support regexp à l'avenir.rnano
dans votre description ici parce que c'est une version de nano qui n'a pas de fonction «enregistrer sous»? Je ne connais pas le programme.$ man nano
alors/-R<Enter>
-q
doit venir après:sudo passwd root -q
. L'exemple Pete peut être durci en excluant*root*
.sudoedit
pour activer en toute sécurité la modification de fichier avecsudo
.Tout d'abord, ouvrez le fichier sudoers avec
sudo visudo
. L'ajout deuser ALL=!/usr/sbin/service
volonté, IIRC, interdira laservice
commande pour l'utilisateuruser
.Sources: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell
la source
J'ai trouvé la solution.
J'ai ouvert le terminal et me transforme en utilisateur root avec
su -
puis j'ai tapévisudo
pour modifier.puis à la fin j'ai écrit des lignes comme
Ensuite, j'ai enregistré et fermé et redémarré aussi.
Maintenant, si je tape comme
service network restart
ouservice NetworkManager restart
alors ce ne me permet pas et donne une erreur commeet de même pour le
service network restart
commandement également.la source
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
, puissudo /etc/init.d/network-not-in-sudo restart
). C'est pourquoi il est beaucoup plus sûr de créer des inclusions au lieu d'exclusions dans le fichier sudoers, par exemple indiquer avec quels services ils sont autorisés à interagir.La vraie réponse à cela est que vous ne pouvez pas vraiment empêcher cela. Vous pouvez empêcher quelqu'un non malveillant d'exécuter accidentellement cette commande via les méthodes décrites dans les autres réponses, mais si quelqu'un veut vraiment l'exécuter et figure sur la liste des sudoers, il peut l'exécuter. Par exemple, ils pourraient faire ce qui suit:
joe@box:~$ sudo bash root@box:~# service network restart
Ou une autre commande amusante qu'ils pourraient utiliser pour contourner vos restrictions dans le fichier sudoers:
sudo visudo
En bref, si vous pouvez sudo et que cela ne se limite pas à l'exécution de commandes particulières, vous pouvez faire à peu près tout ce que vous voulez. Même si vous les limitez à un ensemble de commandes donné, vous devez vous assurer qu'il n'est pas possible pour l'utilisateur de copier une autre commande qu'il voulait exécuter sous le même nom que celle qu'il était autorisé à exécuter ( comme en écrasant la commande qu'ils ont l'autorisation d'exécuter.)
la source
Utilisez Firejail pour restreindre les utilisateurs avec des bacs à sable.
https://github.com/netblue30/firejail/
Définissez firejail comme shell au lieu de bash dans / etc / passwd, pour chaque utilisateur que vous souhaitez restreindre. Il est très facile à utiliser et possède une bonne documentation.
Exemple:
la source