Modification du fichier sudoers pour restreindre les commandes d'un utilisateur


8

Est-il possible de modifier le fichier sudoers afin qu'un utilisateur puisse utiliser sudo pour n'importe quelle commande à l'exception de celle spécifiée? J'inverse est vrai, je crois, que le fichier sudoers peut être configuré de sorte qu'un utilisateur ne peut exécuter qu'une liste donnée de commandes.

EDIT: les commandes que je veux vraiment supprimer sont l'arrêt et le redémarrage ... cela me fait penser qu'il existe des appels système spéciaux pour l'arrêt et le redémarrage. Pouvez-vous retirer les appels système d'un utilisateur? Si ce n'est pas le cas, est-ce parce que le système de permission Unix résume les appels système en négligeant cela?

Réponses:


5

Une autre façon de voir les choses est que si les utilisateurs ont un accès root largement illimité, ils peuvent facilement obtenir un accès root complet.

Bien que vous puissiez peut-être travailler sur quelque chose, il serait facilement contournable.

SElinux est cependant un moyen possible, même si cela prend beaucoup de temps à apprendre.


3

Pour faire ce que vous voulez (garder le formulaire utilisateur en cours d'arrêt, de redémarrage et d'arrêt), vous devrez examiner les éléments SElinux pour empêcher l'utilisateur de faire ces appels système. Sinon, l'utilisateur exécutera simplement / bin / sh en premier, puis exécutera / bin / halt sans passer par sudo.


2
Ou l'un des programmes zillion dont vous pouvez obtenir un shell, ou leur propre script.
Ronald Pottol

3

Enregistrez tout ce qu'ils font via sudo, sans doute, vous avez un moyen de faire passer le message pour ne pas le refaire.

Defaults logfile=/var/log/sudolog 

enregistrera toutes les commandes qu'ils exécutent, google un peu pour plus d'informations.


Vous aurez besoin d'une journalisation centralisée et vous devrez leur crier s'ils exécutent un shell. Un shell peut être obtenu à partir d'un éditeur par exemple. ou homme homme etc.
James

3

Oui et non ... Vous pouvez empêcher un utilisateur d'exécuter un fichier spécifique en le précédant d'un coup (!), Mais vous ne pouvez pas empêcher un utilisateur de copier le fichier vers un autre emplacement, puis de l'exécuter à partir de là.

User_Alias    ADMINS = peter, bob, bunny, %operator

ADMINS        ALL    = !/usr/bin/su, !SHELLS

Accorder l'accès à des fichiers spécifiques en tant qu'autre utilisateur


Exemple de la façon de définir les "SHELLS" ci-dessus: Cmnd_Alias ​​SHELLS = / bin / sh, / bin / ksh, / bin / bash, / bin / zsh, \ / bin / csh, / bin / tcsh, \ / usr / bin / login, / usr / bin / su
pulcher

Un tas d'utilitaires vous permettra d'exécuter des commandes en tant que root (tar, liens et nmap du haut de ma tête), donc je pense honnêtement que la vraie solution est soit a) de mettre sur liste blanche les commandes que vous souhaitez exécuter en tant que root ou b) d'embaucher simplement quelqu'un en qui vous avez confiance
Some Linux Nerd

2

Si l'utilisateur veut vraiment redémarrer, il trouvera un moyen. sudo -s, sudo -i, sudo $EDITOR /etc/sudoers... peut être utilisé pour supprimer vos restrictions.

Et sur les systèmes de type Unix, vous êtes autorisé à redémarrer le système tant que vous êtes root (uid 0). Si vous trouvez un moyen de restreindre ces appels système, vous pouvez le faire:

utilisateur $ echo b | sudo tee / proc / sysrq-trigger

ou une variante de celui-ci. Ou redémarrez en provoquant une panique du noyau. Ou...

Enfin, avoir un accès root vous donne généralement la possibilité de supprimer toutes les restrictions en place.


Il est nul que Linux n'ait plus de niveaux de sécurité. Ils n'étaient pas parfaits, mais ils étaient faciles à installer. Ils n'ont pas empêché le redémarrage, mais ont empêché beaucoup d'autres choses. Et comme ils étaient si faciles, vous pouvez les utiliser sur tous les systèmes. Aucun ajustement et tel nécessaire.
Thomas

N'étaient-ils pas en BSD, pas en Linux?
user1686

1

bien sûr, en tant que root appelez visudo et empêchez 'user' d'exécuter / sbin / halt:

user ALL=(ALL) NOPASSWD: !/sbin/halt

Je crois que la demande visait une liste de commandes que l'utilisateur n'est PAS autorisé à exécuter
Wayne

1

Il y a un risque à procéder de cette façon: il existe souvent plusieurs façons de faire la même action. Par exemple, telnit 6 ou init 6 effectue également un redémarrage. Il pourrait y avoir un moyen de forcer le noyau à vider le noyau et à redémarrer également.


1

La ligne suivante devrait laisser l'utilisateur "jim" exécuter tout sauf / usr / bin / kill et / usr / bin / su.

jim          ALL= !/usr/bin/kill,!/usr/bin/su

0

Ceci n'est pas testé et YMMV, mais qu'en est-il de la mise en place d'une cmd_list des commandes que vous ne souhaitez pas exécuter, puis utilisez! Cmd_list pour le groupe / utilisateur spécifié?

Je n'ai pas accès à ce test et j'ai simplement regardé la page de manuel en ligne sur Sudoers Manual, donc certains experts me corrigeront ici si je me trompe

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.