TMPDIR sicher ändern?

Ich habe kürzlich Open MPI installiert und es beschwert sich

PMIx has detected a temporary directory name that results
in a path that is too long for the Unix domain socket:
Temp dir: /var/folders/**/*****************************/T/openmpi-sessions-501@host*******************************/*****

Diese Frage schlägt die Einstellung TMPDIRauf vor /tmp. Ist das sicher? Bringt es andere Programme durcheinander?

Antworten (1)

Es kann Sicherheitslücken geben, die aus der unvorsichtigen Verwendung von/tmp ; Je nachdem, wie schwerwiegend der Fehler ist, können böswillige lokale Benutzer möglicherweise beliebige Dateien löschen oder möglicherweise sogar beliebigen Code unter Ihrem Benutzerkonto ausführen /tmp. char sun_path[104] Eine Lösung, die innerhalb der Grenze für Unix-Domain-Sockets bleibt (siehe /usr/include/sys/un.hDefinition), besteht darin, ein temporäres Verzeichnis zu erstellen und dieses für MPI zu verwenden:

$ mktemp -d /tmp/mpi-XXXXXXXX
/tmp/mpi-zUN9SQo6

Dadurch bleiben 86 Zeichen für die Socket-Datei übrig (104 minus eins für das abschließende NULminus 17).

Je nachdem, wo und wann Sie es einstellen, TMPDIRkönnten andere Programme leicht durcheinander gebracht werden, insbesondere tmuxoder screendie dann möglicherweise nicht in der Lage sind, ihre Steuerbuchse zu finden. Setzen Sie die benutzerdefinierten TMPDIREinstellungen nach Möglichkeit so nah wie möglich an die MPI-Aufrufe, z. B. mit einer Shell-Funktion oder einem Alias ​​nach dem Vorbild von

alias mpi4py='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) mpi4py'

Dies würde für jeden Aufruf ein eindeutiges temporäres Verzeichnis erstellen; die Verzeichnisse darin /tmpwerden automatisch bereinigt. Wenn ein gemeinsam genutztes oder dauerhafteres Verzeichnis benötigt wird, /var/tmpist es normalerweise besser geeignet

$ mkdir /var/tmp/mympi

und stellen Sie sicher, dass das Verzeichnis nicht bereits existiert, falls ein viel zu cleverer lokaler Angreifer dieses Verzeichnis bereits erstellt hat (unwahrscheinlich, aber deshalb wurde es mktemp -derstellt). Dann könnte der Alias ​​in Ihrem Shell-Profil etwa so aussehen

alias mpi4py='TMPDIR=/var/tmp/mympi mpi4py'

Diese Form ist wiederum besser geeignet, wenn zwischen verschiedenen MPI-Befehlsaufrufen ein gemeinsamer Zustand erforderlich ist.

@patrix, das zufällige tmp-Verzeichnisse für jeden Aufruf vermehren wird; alles, was wirklich notwendig ist, ist ein einzelnes eindeutiges Verzeichnis, das vor /tmp-Schwachstellen sicher ist.
/private/tmpwird regelmäßig beschnitten. Wenn ich nur einen festen tmp-Speicherort für eine bestimmte Anwendung haben möchte, würde ich wahrscheinlich nur /tmp/APPNAME_tempdiesen erstellen und verwenden.
Fühlen Sie sich frei, die Bearbeitung bei Bedarf rückgängig zu machen.
Nur zur Verallgemeinerung: Die Methode besteht darin, ein neues temporäres tempdir zu erstellen, dieses für mpi zu verwenden, und wenn mpi fertig ist, TMPDIRwieder auf den alten Wert? Wenn ich also verwenden möchte , mpi4pykann ich ändern TMPDIR, tun, was auch immer, und dann einfach dieses Terminal schließen?
Und sollte Ihr Befehl am Ende alias yourmpicommand='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) yourmpicommand'wie oben sein? Oder ist das etwas anderes?
Sie würden aliasin Ihrer Shell-Konfiguration eine entsprechende Einstellung vornehmen; Das Terminal müsste nicht geschlossen werden, da die benutzerdefinierte Umgebung nur für den Befehl mit dem Alias ​​gelten würde. Das Erlernen der Grundlagen von eg bashkann von Vorteil sein, wenn dies alles mysteriös erscheint.
Aber wenn ich zum Beispiel alias mpiexec, dann TMPDIRwürde jedes Mal, wenn ich laufe, ein neuer gesetzt werden mpiexec. Das scheint nicht das zu sein, was ich tun möchte. (Oder ist es?)
Ich habe gezeigt, wie man entweder ein einziges eindeutiges tmp-Verzeichnis verwendet oder wie man bei jedem Lauf ein neues erstellt. Ich bin mit MPI nicht vertraut genug, um zu wissen, welches, wenn auch, besser geeignet ist.