Können Funktionen in Skripten verwendet werden, ohne die Interpreter-Binärdatei zu setzen?


14

Im Moment benutze ich cap_net_bind_service MY_USERNAMEin /etc/security/capability.conf.
Jetzt muss ich nur noch cap_net_bind_service+iden Interpreter meiner bevorzugten Skriptsprache einstellen , um CAP_NET_BIND_SERVICEden effektiven Satz über libcap [-ng] erweitern zu können.

Dies funktioniert einwandfrei, aber ich frage mich, ob es eine Möglichkeit gibt, dasselbe zu erreichen, ohne dass für die Interpreter-Binärdatei Großbuchstaben festgelegt werden. Es ist zwar kein großes Problem (andere Benutzerkonten haben keine Obergrenze, sodass sie diese nicht verwenden können, selbst wenn das Bit in der Interpreter-Binärdatei gesetzt ist), aber es ist etwas ärgerlich, da ich das Flag jedes Mal neu setzen muss, wenn der Interpreter aktiviert ist Aktualisiert.

Antworten:


4

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

Ein über fork (2) erstelltes Kind erbt Kopien der Fähigkeiten seiner Eltern.

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

Dies bedeutet, dass Sie die Funktion nicht im Skript, sondern im Interpreter festlegen müssen. Dasselbe gilt für suidBits und andere spezielle Flags.

Also machen Sie entweder eine Kopie Ihres Dolmetschers, stellen Sie die gewünschten Funktionen ein (stellen Sie auch sicher, dass niemand über chmod / chown darauf zugreifen kann) und rufen Sie diesen kopierten Dolmetscher in Ihrem shebang auf. Sie können auch die setcap-Logik in Ihrem Skript ausführen.


Ok, hätte gesehen nicht die Frage vor 2 Jahren gefragt wurde , aber nie geschlossen ... Auch scheint wie ein Duplikat unix.stackexchange.com/questions/87348/...
Adrien M.

aber nur i(erben), kommt an exec vorbei. Und itut nichts für sich, es funktioniert nur, wenn die Datei eine Übereinstimmung hat i, und ich denke, das e(effektive) Bit (es sei denn, das Skript / die ausführbare Datei setzt das). Es ist noch komplexer, dass setuid, dies ist kein Skript-Effekt.
Strg-Alt-Delor

1
Ich dachte, der Shebang würde vom Kernel gelesen, nicht von der Shell? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Philip Couling

Couling du hast recht. Es war eine Fehlinterpretation, die ich später verstand. Ich habe es mit Hinweisen darauf behoben, wo sich der Kernel-Code für die Ausführung von Skripten befindet.
Adrien M.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.