Was sind die richtigen Berechtigungen für / tmp? Ich habe alles versehentlich rekursiv öffentlich gemacht

78

Ich habe missbraucht sudo.

Ich habe ein temporäres Verzeichnis mit sehr kurzer Lebensdauer erstellt, das ich für ein paar Stunden mit einigen Benutzern teilen wollte ... und dieses Verzeichnis habe ich benannt /some/path/tmp

Leider habe ich sudo chown 777 -R /tmpstatt gestartet sudo chown 777 -R tmp, so dass meine /tmpDatei jetzt komplett öffentlich ist.

Ich benutze das Common /tmpziemlich oft (jeden Tag, fast jede Stunde) persönlich für Short Life-Dateien, Skripte, viele Skripte.

Ist es ein Sicherheitsbedenken, dass es nun vollständig öffentlich ist? Sollte ich es wieder in sicherere Einstellungen ändern oder die üblichen Standardeinstellungen für eine Debian- oder Ubuntu-Distribution verwenden - (ich weiß nicht, welche)? Wofür sind die richtigen Berechtigungen /tmp?

Stephane Rolland
quelle
Beachten Sie, dass ich in meiner ersten Antwort etwas Wichtiges vergessen habe: Der X11-Socket muss öffentlich zugänglich sein, sonst können Sie keine neuen GUI-Anwendungen starten. Ich habe meine Antwort aktualisiert.
Gilles
War es chownoder chmod?
Melebius
@ Melebius Ich bin ein bisschen verwirrt über deine Frage: Ich habe nicht erwähnt chmod. chown (wie ch - own) handelt vom Besitz von Dateien, die dem Benutzer gehören. Bei chmod (wie ch-modifify) geht es eher darum, wer eine Datei ausführen, in sie schreiben oder den Inhalt lesen kann.
Stephane Rolland
2
@StephaneRolland Ja, das hat mich verwirrt. Sie können verwenden chown 777, um dem Benutzer mit der ID 777 das Eigentumsrecht für eine Datei zuzuweisen. Alle Antworten, einschließlich der akzeptierten, funktionieren jedoch chmod. Da alle von ihnen die Berechtigung für alle Benutzer (Eigentümer, Gruppe, andere) auf den gleichen Wert setzen, sind die meisten Auswirkungen des Dateieigentums irrelevant. Der richtige Befehl zum Korrigieren des Ergebnisses sudo chown 777 -R /tmpsollte jedoch lauten sudo chown root -R /tmp.
Melebius

Antworten:

117

Die normalen Einstellungen für /tmpsind 1777, was lswie folgt aussieht drwxrwxrwt. Das heißt: weit offen, mit der Ausnahme, dass nur der Eigentümer einer Datei sie entfernen kann (das tbedeutet dieses zusätzliche Bit für ein Verzeichnis).

Das Problem bei einem /tmpmit Modus 777 ist, dass ein anderer Benutzer eine von Ihnen erstellte Datei entfernen und den Inhalt seiner Wahl ersetzen kann.

Wenn /tmpes sich um ein tmpfs-Dateisystem handelt, wird durch einen Neustart alles wiederhergestellt. Andernfalls führen Sie aus chmod 1777 /tmp.

Außerdem müssen viele Dateien /tmpprivat sein. Mindestens ein Verzeichnis muss jedoch unbedingt für die ganze Welt lesbar sein: /tmp/.X11-unixund möglicherweise auch einige andere ähnliche Verzeichnisse ( /tmp/.XIM-unixusw.). Der folgende Befehl sollte vor allem Abhilfe schaffen:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

Dh alle Dateien und Verzeichnisse privat machen (alle Berechtigungen für Gruppen und andere entfernen), aber die X11-Sockets für alle zugänglich machen. Die Zugriffssteuerung für diese Sockets wird vom Server und nicht von den Dateiberechtigungen erzwungen. Möglicherweise müssen andere Steckdosen öffentlich verfügbar sein. Suchen Sie find /tmp -type s -user 0unter "root" nach Sockets, die Sie möglicherweise benötigen, um den Zugriff auf die Welt zu ermöglichen. Es kann auch Sockets geben, die anderen Systembenutzern gehören (z. B. um mit einem Systembus zu kommunizieren). erkunden Sie mit find /tmp -type s ! -user $UID(wo $UIDist Ihre Benutzer-ID).

Gilles
quelle
1
könntest du das zweite chmod mehr erklären?
Bartlomiej Lewandowski
@BartlomiejLewandowski go-rwx: keine Berechtigungen für Gruppen und andere. Dies setzt die Berechtigungen auf rwx------(mit Ausnahme der Dateien, die erstellt wurden, da sie chmodmöglicherweise weniger Berechtigungen haben, z rw-------. B. ). Mit anderen Worten, auf die Dateien kann nur der Eigentümer zugreifen. /tmp/.[!.]*soll Punktedateien enthalten, die üblicherweise in vorhanden sind /tmp.
Gilles
@BartlomiejLewandowski: chmod -go-rwx: Setzt "rwx" -Rechte auf Eigentümer und Gruppe. r = lesen, w = schreiben, x = ausführen (für Datei) oder / traverse (für Verzeichnis) eingeben. 777 = rwxrwxrwx (der rechte Teil kann gesehen werden als: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x' '", die in binärer Form als" 111111111 "dargestellt wird (1 zu setzen, 0 zu nicht setzen). Und" 111111111 "in binärer Form wird in oktaler Form als" 777 "dargestellt (oktal = Gruppen von 3 Bits, wobei jede Gruppe den Wert 0 bis hat 7) .wenn "rwxr-xr--" wäre es "111101100", was im Oktal "754" ist
Olivier Dulac
2
Das + t wird als Sticky-Bit bezeichnet. Das ist es, was andere als den Besitzer davon abhält, Dateien zu entfernen, obwohl die Berechtigungen ansonsten 777 sind. Das wichtigste Ziel war ursprünglich, den Kernel zu veranlassen, häufig verwendete Programme beim Beenden im Speicher zu belassen, damit sie beim nächsten Ausführen nicht von der Festplatte abgerufen werden müssen. Wir sprechen PDP11 Tage ....
Kurtm
1
@ GabrielFair Ich habe den Befehl mit Platzhaltern durch einen mit find ersetzt, der nicht auf dieses Problem stößt.
Gilles
10

/tmpund /var/tmpsollte Lese-, Schreib- und Ausführungsrechte für alle haben; Normalerweise würden Sie jedoch auch das Sticky-Bit ( o+t) hinzufügen , um zu verhindern, dass Benutzer Dateien / Verzeichnisse entfernen, die anderen Benutzern gehören. Sollte also chmod a=rwx,o+t /tmpfunktionieren.

Was das rekursive Ändern von Berechtigungen betrifft ... Solange der Eigentümer / die Gruppe so bleibt wie die Dateien und Verzeichnisse, sollte es kein so großes Problem sein. Sie können jedoch möglicherweise die Berechtigung für alles unter /tmp(nicht / tmp selbst) ändern , um die Privatsphäre der Benutzer zu gewährleisten, indem Sie die rxRechte anderer und möglicherweise der Gruppe entfernen .

Suchen ist eine gute Möglichkeit, dies zu tun. Tun Sie als root Folgendes:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})
Baard Kopperud
quelle
Auf einem typischen Desktop-System sollten Sie auch die /tmp/.X11-unix/*Lesbarkeit der Welt verbessern, da Sie sonst keine X-Anwendungen mehr starten können.
Gilles
chmod a=rwX,o+t /tmp -Rsollte die findMagie tun .
Dhill
3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

Von einer CentOS 5.9-Maschine.

Aaron D. Marasco
quelle