Funktionen für ein Skript unter Linux

8

Wenn ich eine Fähigkeit ( capabilities(7)) festlegen möchte , z. B. CAP_NET_BIND_SERVICEfür eine ausführbare Datei und diese Datei ist ein Skript , muss ich die Fähigkeit ( setcap(8)) für den Interpreter festlegen, der das Skript startet, oder reicht es aus, sie für die Skriptdatei festzulegen selbst?

Hinweis: Die Frage betrifft insbesondere Scientific Linux 6.1, kann aber meiner Meinung nach generisch beantwortet werden.

0xC0000022L
quelle

Antworten:

8

Die Einstellungsfunktion für das Skript ist nicht wirksam. Es ist die ähnliche Situation, als würde man nicht setuidam Skript arbeiten. Ähnlich wie im letzteren Fall handelt es sich um die Implementierung des execveUmgangs mit Shebang und die dahinter stehenden Sicherheitsgründe (Details siehe: Setuid für Shell-Skripte zulassen ).

Ich denke, Sie haben diese Möglichkeiten

  1. Stellen Sie die Funktionen auf dem Interpreter selbst ein (eigentlich eher eine Kopie davon).

    • Sie haben hier das Problem, dass jeder, der es ausführen kann, mit diesen erhöhten Funktionen ausgeführt wird (in der Lage sein, ein beliebiges Skript auszuführen oder es interaktiv zu starten).
  2. Schreiben Sie eine ausführbare Wrapper-Datei mit einer fest codierten Logik zum Ausführen Ihres Skripts und legen Sie die gewünschten Funktionen für diese ausführbare Datei fest

    • Stellen Sie sicher, dass niemand das Skript ändern oder entfernen / ersetzen kann
    • nach wie vor , indem Sie chrooteine solche Wrapper könnte mißbrauchen

In beiden Fällen müssten Sie sicherstellen, dass die festgelegten Funktionen überleben, execveindem Sie das inheritableFlag setzen. Sie können pam_capDistributed with auch verwenden libcap, um die gewünschten Funktionen durch Konfiguration nur für ausgewählte Benutzer zu aktivieren.

Und im Allgemeinen möchten Sie sicherstellen, dass niemand das Verhalten Ihres Dolmetschers ändern kann, indem Sie die Umgebung ändern, z. PYTHON_PATHoder etwas ähnliches.

Miroslav Koškár
quelle