Sudoers ou super-utilisateurs sont des utilisateurs avec des privilège root. Un utilisateur sudoers a la possibilité d’exécuter une ou plusieurs commandes en tant que root. Il suffit de précéder la commande avec la commande sudo
( abréviation de substitute user do ).
sudo "commande"
En tant qu’administrateur, dans quelques cas je ne souhaite pas que le super utilisateur ait tout le pouvoir du compte root. Par exemple je ne veux pas qu’il touche aux firewalld local ( firewalld ),de créer des nouveaux comptes utilisateurs ou bien la plus important de switcher au compte root avec la commande sudo -su
.
[superuser@Linux ~]$ sudo su
[root@Linux superuser]#
Heureusement, il y a un moyen pour contrôler ce que les sudoers peuvent faire, c’est par le fichier /etc/sudoers
.
Dans cette article, nous allons voir comment interdire l’exécution de certain commande root par les utilisateurs sudoers.
Le fichier sudoers
Comme on a vu précédemment, les autorisations pour utiliser sudo
sont définies dans le fichier /etc/sudoers
.
Le fichier sudoers est un fichier que les administrateurs Linux utilisent pour attribuer des droits système aux utilisateurs du système. Cela permet à l’administrateur de contrôler qui fait quoi.
Empêcher les utilisateurs sudo d’exécuter des commandes
En tant que root, éditer le fichier /etc/sudoers
ou bien tous simplement taper la commande visudo
:
# vi /etc/sudoers
Disant que je ne veux pas qu’un utilisateur sudo soit capable d’éditer le fichier /etc/sudoers :
user1 ALL=(ALL) ALL, !/usr/sbin/visudo, !/etc/sudoers
Essayons d’éditer le fichier sudoers
avec l’utilisateur user1
:
[user1@Linux ~]$ sudo visudo
[sudo] password for test:
Sorry, user user1 is not allowed to execute '/sbin/visudo' as root on Linux.
[user1@Linux ~]$ sudo vi /etc/sudoers
/bin/vi: line 23: /usr/libexec/vi: Permission denied
Comme vous pouvez le constater, notre utilisateur n’arrive pas à éditer le fichier /etc/sudoers
alors qu’il a le droits sudo.
Vous pouvez bloquer ce que vous voulez. Prenons un autre exemple, je souhaite que l’utilisateur ayant les droits sudo soit incapable de toucher le pare-feu local firewalld.
user1 ALL=(ALL) ALL, !/bin/systemctl stop firewalld, !/bin/systemctl disable firewalld, !/usr/bin/firewall-cmd
[user1@Linux ~]$ sudo firewall-cmd --zone=public --add-port=53/tcp --permanent
Sorry, user user1 is not allowed to execute '/bin/firewall-cmd --zone=public --add-port=53/tcp --permanent' as root on Linux.
Comme vous avez pu le constater, l’utilisateur n’a pas pu autoriser le port 53 ( DNS) avec la commande firewalld-cmd
.
Interdire de switcher au compte root
Bien sur tous ce qu’on a vu précédemment ne valent rien si l’utilisateur sudoers passe au root via la commande sudo -su
:
[superuser@Linux ~]$ sudo su
[root@Linux superuser]#
Voici donc comment interdire de switcher au compte root :
user1 ALL=(ALL) ALL, !/bin/su
Maintenant essayons de switcher au compte root :
[user1@Linux ~]$ sudo su
[sudo] password for user1:
Sorry, user user1 is not allowed to execute '/bin/su' as root on Linux.
Comme vous pouvez le constater notre user1
n’arrive pas à switcher vers root.
Par contre ce n’est pas suffisant, l’utilisateur peut toujours switcher vers root en tapant la commande : sudo -s
[user1@Linux ~]$ sudo su
[root@Linux user1]#
Par contre, j’ai trouvé un solution, il suffit de d’ajouter NOEXEC
comme montré ci-dessous :
test ALL=(ALL) NOEXEC: ALL, !/usr/bin/firewall-cmd, !/bin/systemctl stop firewalld, !/bin/systemctl disable firewalld, !/usr/sbin/visudo, !/etc/sudoers, !/etc/sudoers.d/*, !/bin/su, !/usr/bin/dnf update, !/usr/bin/yum update
Maintenant vous pouvez être rassuré que l’utilisateur ne peux ni exécuter les commandes que vous spécifier ni de switcher au compte root.
Installation d’un certificat SSL sur un serveur Nginx
ufw : comment désactiver le pare-feu sur Ubuntu
Find : 11 Exemples pratiques pour chercher les fichiers
Le fonctionnement du routeur
Fail2Ban : How to protect Linux services