GNU/Linux >> Znalost Linux >  >> Linux

Linux – Lze schopnosti používat ve skriptech, aniž by bylo nutné nastavit caping the Interpreter Binary?

Právě teď používám cap_net_bind_service MY_USERNAME v /etc/security/capability.conf.
Teď už jen potřebuji nastavit cap_net_bind_service+i na interpretu mého oblíbeného skriptovacího jazyka, abych mohl přidat CAP_NET_BIND_SERVICE na účinné nastavit přes libcap[-ng].

Funguje to dobře, ale zajímalo by mě, jestli existuje způsob, jak dosáhnout stejné věci bez nastavení jakýchkoli omezení binárnímu interpretu. I když to není velký problém (jiné uživatelské účty nemají omezení, takže jej nemohou používat ani s bitem nastaveným na binárním interpretu), je to poněkud nepříjemné, protože musím znovu nastavit příznak pokaždé, když je interpret aktualizováno.

Přijatá odpověď:

Obvykle se schopnosti dědí na děti. Jak je uvedeno v manuálové stránce:

Dítě vytvořené pomocí fork(2) zdědí kopie sad schopností svého rodiče.

Problém se skripty je, že nejsou přímo spustitelné. Jádro prochází seznamem kontrol (kód jádra se nachází na fs/binfmt_*.c). Jedním z nich je „binfmt_script.c“, který zkontroluje, zda první řádek neobsahuje shebang, a poté zavolá skutečného interpreta (ten v shebang) s vaším skriptem jako argumentem. Jako takový je volán standardní/běžný interpret a jednoduše přečte váš skript jako argument.

To znamená, že budete muset nastavit schopnost na interpretu, ne na skriptu.
Totéž platí pro suid bity a další speciální příznaky.

Buď si tedy vytvoříte kopii svého tlumočníka, nastavíte na něm požadované schopnosti (také zkontrolujte, že k němu nikdo nemá přístup přes chmod/chown) a zavoláte tento zkopírovaný tlumočník ve svém shebangu.
Můžete také provést setcap logiku ve vašem skriptu.


Linux
  1. Moduly linuxového jádra, bez kterých nemůžeme žít

  2. 3 užitečné věci, které můžete dělat s nástrojem IP v Linuxu

  3. 7 nejpoužívanějších jmenných prostorů Linuxu

  1. Linux:Jak najít ovladač zařízení používaný pro zařízení?

  2. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  3. Jak mohu nastavit 'backend' v matplotlib v Pythonu?

  1. Linux – Jaké jsou různé způsoby nastavení oprávnění k souborům atd. na Gnu/linux?

  2. Nastavte stránku HTML jako tapetu v systému Linux

  3. Jak mohu nastavit afinitu procesoru k procesu v systému Linux?