Ruby: Konnte kein temporäres Verzeichnis finden

8

Ich erhalte in meiner Passagierschienen-App ungefähr 500 Fehler. Wenn man sich das Protokoll anschaut, sieht man, dass der Passagier nicht auf das Verzeichnis / tmp zugreifen kann. Ich habe bestätigt, dass es da ist und RW-Zugriff auf root hat, und versuchte dann www-Daten. Was ist hier los?

%Vor%

Hier sind meine aktuellen / tmp und config / environment.rb Eigentumsrechte:

%Vor%     
Clayton Selby 14.01.2014, 15:55
quelle

3 Antworten

16

Ich bin mir nicht sicher, was hier passiert ist, aber ich glaube, es hatte etwas mit den / tmp-Ordnerberechtigungen zu tun. Ich dachte, mein / tmp-Ordner sei beschädigt, also habe ich mich nach dem Löschen dieses Ordners umgesehen und ihn wiederhergestellt (ich war mir nicht sicher, ob dieser Ordner besonders wichtig für die Art und Weise war, wie er erstellt wurde). Ich fand diese Quelle , die vorgeschlagen hat, dass Sie einfach den / tmp-Ordner erstellen können, so wie Sie es auch tun würden anderen Ordner, und dann eine chmod 1777 auf den neu erstellten Ordner.

Also, anstatt mein aktuelles / tmp zu löschen, habe ich diesen chmod Befehl ausgeführt und alles schien zu funktionieren.

Was mir merkwürdig ist, ist, dass ich vorher ein chmod 777 gemacht habe, was dazu führte, dass der Ordner nicht funktionierte. Seltsam ...

    
Clayton Selby 14.01.2014, 19:19
quelle
17

Der wichtigste Teil des Stack-Trace ist die Fehlermeldung:

%Vor%

Wenn Sie Ruby & gt; = 2.0 zum Erstellen einer temporären Datei anweisen, sucht es nach einem Verzeichnis, in dem es eine Datei auf sichere Weise erstellen kann. Das Erstellen von temporären Dateien in einem Verzeichnis, in dem jeder die Datei ersetzen kann, während Sie daran arbeiten, wäre eine große (und häufige) Sicherheitslücke!

Sie haben zwei Möglichkeiten:

  • Sagen Sie Ruby, wo temporäre Dateien sicher erstellt werden können, indem Sie eine der Umgebungsvariablen TMPDIR oder TMP oder TEMP auf ein sicheres Verzeichnis setzen.

  • Korrigiert die Berechtigungen für ein Verzeichnis, das Ruby sowieso zu verwenden versucht. Verzeichnisse, die Ruby trotzdem zu verwenden versucht: systempdir ("/ tmp") und das aktuelle Verzeichnis

Ruby hält ein Verzeichnis für sicher, wenn das Verzeichnis nicht schreibgeschützt oder das Sticky-Bit gesetzt ist. (Verwechseln Sie nicht das Sticky-Bit ( t ) mit dem sesteuid / setgid-Bit ( s )!)

Anstatt also TMPDIR zu setzen, könnten Sie Ihr Arbeitsverzeichnis nicht schreibgeschützt machen oder machen:

%Vor%

Die Manpage von chmod erklärt die Verwendung des Sticky-Bits:

  

[Es] verhindert, dass nicht berechtigte Benutzer eine Datei im Verzeichnis entfernen oder umbenennen, wenn sie nicht die Datei oder das Verzeichnis besitzen; Dies wird als das eingeschränkte Löschkennzeichen für das Verzeichnis bezeichnet und wird normalerweise in weltweit beschreibbaren Verzeichnissen wie / tmp gefunden.

Hier ist, was ohne das Sticky-Bit passieren kann: Ссылка

Siehe auch: Ссылка

    
hagello 02.07.2015 10:51
quelle
3
%Vor%

Wenn Sie das t nicht am Ende der Berechtigungsspalte '/ tmp' sehen

%Vor%

Grund ist Behebung vorübergehender Probleme mit Ruby 2

    
Albert.Qing 01.08.2015 00:48
quelle

Tags und Links