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 file
und setze seinen Besitzer aufroot
mitchown 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.