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:
- Aktivieren des SUID-Bits für die Datei mit einem Befehl wie
chmod +s fileund setze seinen Besitzer aufrootmitchown 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. - 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.