GNU/Linux >> Tutoriels Linux >  >> Linux

Création d'un socket brut en Python sans privilèges root

Il n'existe aucun moyen pour un processus non privilégié (Python ou autre) d'élever ses propres privilèges. C'est en quelque sorte la pierre angulaire d'avoir tout ce truc d'utilisateurs privilégiés/non privilégiés. En ce qui concerne les sockets raw, à partir de la page de manuel raw(7) :

Seuls les processus avec un ID utilisateur effectif de 0 ou la capacité CAP_NET_RAW sont autorisés à ouvrir des sockets bruts.

L'ID utilisateur de 0 signifie root. Voir ici pour plus d'informations sur les sockets bruts sous Linux.

Comme indiqué dans la réponse/les commentaires de Faust, vous ne pourrez pas définir directement la capacité CAP_NET_RAW pour votre programme python, car il s'agit d'un script exécuté par l'interpréteur Python, mais il peut y avoir des solutions sur le Web qui peuvent contourner cette limitation.


Comme vous l'avez noté, les sockets bruts nécessitent des privilèges plus élevés qu'un utilisateur ordinaire. Vous pouvez contourner ce problème de deux manières :

  1. Activer le bit SUID pour le fichier avec une commande comme chmod +s file et définissez son propriétaire sur root avec chown root.root file . Cela exécutera votre script en tant que root, quel que soit l'utilisateur effectif qui l'a exécuté. Bien sûr, cela pourrait être dangereux si votre script a un défaut.
  2. Définir la capacité CAP_NET_RAW sur le fichier donné avec une commande telle que setcap cap_net_raw+ep file . Cela lui donnera uniquement les privilèges requis pour ouvrir un socket brut et rien d'autre.

MODIFIER :

Comme l'a souligné @Netch, les solutions données ne fonctionneront avec aucun langage interprété (comme Python). Vous aurez besoin d'un "hack" pour le faire fonctionner. Essayez de googler pour "Python SUID", vous devriez trouver quelque chose.


Linux
  1. Comment supprimer les privilèges root dans les scripts Shell ?

  2. Transformer Tar en Cpio sans enracinement ?

  3. Changer le mot de passe root par Sudo, sans Su ?

  4. Comment exécuter une commande sans propriétés racine ?

  5. comment lier un socket brut à une interface spécifique

HOWTO :Exécuter Linux sur Android sans racine

Guide pratique :programmation de sockets en Python

Déboguer dans pyCharm avec les privilèges sudo ?

socket raw python :protocole non pris en charge

Créer une base de données PostgreSQL sans privilège root

Exécutez ifconfig sans sudo