GNU/Linux >> Znalost Linux >  >> Linux

Vytváření raw socketu v Pythonu bez práv roota

Neexistuje způsob, jak by neprivilegovaný proces (Python nebo jiný) povýšil svá vlastní oprávnění. Je to tak trochu základní kámen toho, že máme celou věc s privilegovanými/neprivilegovanými uživateli. Pokud jde o raw sockety, z manuálové stránky raw(7):

Pouze procesy s efektivním ID uživatele 0 nebo schopností CAP_NET_RAW mohou otevírat nezpracované sokety.

ID uživatele 0 znamená root. Informace o raw socketech na linuxu najdete zde.

Jak je uvedeno ve Faustových odpovědích/komentářích, nebudete moci přímo nastavit schopnost CAP_NET_RAW pro váš pythonový program, protože se jedná o skript, který je spouštěn interpretem Pythonu, ale na webu mohou být řešení, která mohou obejít toto omezení.


Jak jste poznamenali, raw sockety vyžadují vyšší oprávnění než běžný uživatel. Tento problém můžete obejít dvěma způsoby:

  1. Aktivace bitu SUID pro soubor pomocí příkazu jako chmod +s file a nastavte jeho vlastníka na root s chown root.root file . To spustí váš skript jako root bez ohledu na efektivního uživatele, který jej spustil. Samozřejmě to může být nebezpečné, pokud má váš skript nějakou chybu.
  2. Nastavení schopnosti CAP_NET_RAW pro daný soubor pomocí příkazu jako setcap cap_net_raw+ep file . To mu poskytne pouze oprávnění potřebná k otevření raw socketu a nic jiného.

EDIT:

Jak zdůraznil @Netch, daná řešení nebudou fungovat s žádným interpretovaným jazykem (jako je Python). Budete potřebovat nějaký "hack", aby to fungovalo. Zkuste googlení pro "Python SUID" byste měli něco najít.


Linux
  1. Linux – Jak se Gnome restartuje bez oprávnění root?

  2. Transformovat Tar na Cpio bez rootování?

  3. Změnit root heslo pomocí Sudo, bez Su?

  1. Jak na to:Programování soketů v Pythonu

  2. Zjistit zablokování zásuvky bez odesílání nebo přijímání?

  3. Instalovat zsh bez přístupu root?

  1. Jak zrušit kořenová oprávnění ve skriptech Shell?

  2. python raw socket:Protokol není podporován

  3. Vytvořte databázi PostgreSQL bez oprávnění root