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

Linux – Können Fähigkeiten in Skripten verwendet werden, ohne die Interpreter-Binärdatei zu begrenzen?

Im Moment verwende ich cap_net_bind_service MY_USERNAME in /etc/security/capability.conf.
Jetzt muss ich nur noch cap_net_bind_service+i setzen auf dem Interpreter meiner bevorzugten Skriptsprache, um CAP_NET_BIND_SERVICE hinzufügen zu können zum wirksamen gesetzt über libcap[-ng].

Das funktioniert gut, aber ich frage mich, ob es eine Möglichkeit gibt, dasselbe zu erreichen, ohne Obergrenzen für die Interpreter-Binärdatei festzulegen. Obwohl es kein großes Problem ist (andere Benutzerkonten haben keine Obergrenze, sodass sie es nicht verwenden können, selbst wenn das Bit auf der Interpreter-Binärdatei gesetzt ist), ist es etwas ärgerlich, da ich das Flag jedes Mal neu setzen muss, wenn der Interpreter aktiviert ist aktualisiert.

Akzeptierte Antwort:

Normalerweise werden die Fähigkeiten an die Kinder vererbt. Wie in der Manpage angegeben:

Ein über fork(2) erstelltes Kind erbt Kopien der Capability Sets seines Elternteils.

Das Problem mit den Skripten ist, dass sie nicht direkt ausführbar sind. Der Kernel durchläuft eine Liste von Prüfungen (Kernel-Code befindet sich unter fs/binfmt_*.c). Eines davon ist „binfmt_script.c“, das die erste Zeile auf einen Shebang prüft und dann den echten Interpreter (den im Shebang) mit Ihrem Skript als Argument aufruft. Als solches wird der Standard/allgemeine Interpreter aufgerufen und liest Ihr Skript einfach als Argument.

Das bedeutet, dass Sie die Fähigkeit auf dem Interpreter einstellen müssen, nicht auf dem Skript.
Dasselbe gilt für suid Bits und andere spezielle Flags.

Entweder Sie erstellen also eine Kopie Ihres Interpreters, setzen die gewünschten Fähigkeiten darauf (überprüfen Sie auch, dass niemand über chmod/chown darauf zugreifen kann) und rufen diesen kopierten Interpreter in Ihrem Shebang auf.
Sie können auch das Setcap ausführen Logik in Ihrem Skript.


Linux
  1. Verständnis der rc-Skripte in Linux

  2. Legen Sie unter Linux eine HTML-Seite als Hintergrundbild fest

  3. Wie kann ich die Prozessoraffinität eines Prozesses unter Linux einstellen?

  4. Wie kann ich feststellen, was dazu führt, dass der belegte Speicherplatz in Linux langsam zunimmt?

  5. So stellen Sie die bevorzugte Netzwerkschnittstelle unter Linux ein

3 nützliche Dinge, die Sie mit dem IP-Tool in Linux tun können

So stellen oder ändern Sie die Zeitzone in Linux

Die 7 am häufigsten verwendeten Linux-Namespaces

Linux DF-Befehl – ​​Die 3 am häufigsten verwendeten Optionen

So richten Sie die UFW-Firewall unter Linux ein

Kann ich eine Linux-Binärdatei ausführen, ohne dass das Ausführungsberechtigungsbit gesetzt ist?