GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Raw-Socket in Python ohne Root-Rechte erstellen

Es gibt keine Möglichkeit für einen unprivilegierten Prozess (Python oder andere), seine eigenen Privilegien zu erhöhen. Es ist sozusagen der Eckpfeiler dafür, dass dieses ganze privilegierte/unprivilegierte Benutzerdinga-ma-jig ist. In Bezug auf Raw-Sockets, von der Handbuchseite raw(7):

Nur Prozesse mit einer effektiven Benutzer-ID von 0 oder der CAP_NET_RAW-Fähigkeit dürfen Raw-Sockets öffnen.

Die Benutzer-ID 0 bedeutet root. Hier finden Sie Informationen zu Raw-Sockets unter Linux.

Wie in Fausts Antwort/Kommentaren erwähnt, können Sie die CAP_NET_RAW-Fähigkeit für Ihr Python-Programm nicht direkt festlegen, da es sich um ein Skript handelt, das vom Python-Interpreter ausgeführt wird, aber es gibt möglicherweise Lösungen im Internet, die dies können umgehen Sie diese Einschränkung.


Wie Sie bemerkt haben, erfordern Raw-Sockets höhere Berechtigungen als ein normaler Benutzer. Sie können dieses Problem auf zwei Arten umgehen:

  1. Aktivieren des SUID-Bits für die Datei mit einem Befehl wie chmod +s file und setze seinen Besitzer auf root mit chown root.root file . Dadurch wird Ihr Skript als root ausgeführt, unabhängig vom effektiven Benutzer, der es ausgeführt hat. Dies kann natürlich gefährlich sein, wenn Ihr Skript einen Fehler aufweist.
  2. Festlegen der CAP_NET_RAW-Fähigkeit für die angegebene Datei mit einem Befehl wie setcap cap_net_raw+ep file . Dadurch erhält es nur die Berechtigungen, die zum Öffnen eines Raw-Sockets erforderlich sind, und sonst nichts.

BEARBEITEN:

Wie von @Netch betont, funktionieren die angegebenen Lösungen nicht mit interpretierten Sprachen (wie Python). Sie benötigen einen "Hack", damit es funktioniert. Versuchen Sie googeln für "Python SUID", sollten Sie etwas finden.


Linux
  1. Linux – Wie startet Gnome ohne Root-Rechte neu?

  2. Wie führe ich einen Befehl ohne Root-Eigenschaften aus?

  3. Gewusst wie:Socket-Programmierung in Python

  4. So binden Sie einen Raw-Socket an eine bestimmte Schnittstelle

  5. Der Python-Socket schließt die Verbindung nicht ordnungsgemäß

HOWTO:Führen Sie Linux auf Android ohne Root aus

Debuggen in pyCharm mit sudo-Berechtigungen?

zsh ohne root-Zugriff installieren?

Zweck der sendto-Adresse für C-Raw-Socket?

So beenden Sie eine KDE-Sitzung ordnungsgemäß von der Shell ohne Root-Rechte

Führen Sie ifconfig ohne sudo aus