Linux capabilities - Ping Operation not permitted

De Ikoula Wiki
Révision datée du 19 mars 2021 à 13:01 par Mgrelet794f6 (discussion | contributions) (Page créée avec « <span data-link_translate="he"></span><span data-link_translate="ro"></span><span data-link_translate="ru"></span><span data-link_translate="pl"></span><span data-link_tra... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Jump to navigation Jump to search

Introduction

La gestion des capabilities est un mécanisme de sécurité du noyau Linux afin d'assurer un confinement d’exécution des applications s’exécutant sur le système, ce en affinant les possibilités d'appliquer le principe du moindre privilège.
Nous allons voir comment manipuler les capabilities, c'est-à-dire donner quelques privilèges à un exécutable afin qu'il ne tourne pas avec l'identité root.

Déroulé

Dans notre exemple nous prendrons la commande ping, voici le résultat avec un utilisateur non-root :

$ ping www.ikoula.com
ping: icmp open socket: Operation not permitted

En tant que root, nous allons ajouter la capacité cap_net_raw dans les sets Permitted et Effective (pe) du binaire ping.
Cet ajout se fait avec la commande setcap :

# setcap cap_net_raw=pe /bin/ping

Nous pouvons vérifier avec la commande getcap :

# getcap /bin/ping
/bin/ping = cap_net_raw+ep

Testons maintenant avec notre utilisateur :

$ ping -c 1 www.ikoula.com
PING www.ikoula.com (109.238.9.4) 56(84) bytes of data.
64 bytes from www.ikoula.com (109.238.9.4): icmp_seq=1 ttl=120 time=14.2 ms

--- www.ikoula.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 14.192/14.192/14.192/0.000 ms


Notre utilisateur peut désormais utiliser la commande ping.
Le problème est que la capability cap_net_raw de ping est appliquée pour tous nos utilisateurs.
En effet, nous avons placé la capability dans le set Permitted et nous l'avons activée dans le set Effective.
De cette façon, ping s’exécutera de la même manière quelque soit l'utilisateur non-root qui appelle le binaire.


Afin de pousser la restriction au niveau utilisateur, nous allons placer des capabilities à activer pour un utilisateur donné dans le set Inheritable du processus de son shell.
Vérifions les valeurs par défaut de notre utilisateur :

$ /sbin/getpcaps $$
Capabilities for `87903': =


La commande getpcaps suivie du PID affiche les capabilities du processus attaché au PID, la variable $$ renvoie le PID du shell en cours d'exécution, dans notre cas 87903.
On peut voir que notre utilisateur n'a aucune capabilities d'ajoutées par défaut.

En tant que root, nous allons ajouter capability cap_net_raw au set Inheritable du shell de notre utilisateur dans le fichier /etc/security/capability.conf :

cap_net_raw nom_de_votre_utilisateur
none *


Vérifions ensuite avec notre utilisateur :

$ /sbin/getpcaps $$
Capabilities for `87903': = cap_net_raw+i


En tant que root, nous allons modifier les capabilities positionnées le set Inheritable sur le binaire ping :

# setcap cap_net_raw=ie /bin/ping


Vérifions :

# getcap /bin/ping
/bin/ping = cap_net_raw+ei


Vous pouvez désormais utiliser la commande ping avec votre utilisateur voulu sans que les autres utilisateurs puissent l'utiliser.




Cet article vous a semblé utile ?

0



Vous n'êtes pas autorisé à publier de commentaire.