Was behält das tar -p-Flag (Berechtigungen beibehalten) tatsächlich bei?

22

Was behält die -pFlagge beim Erstellen und Extrahieren eines Tarballs tatsächlich bei? Sind es die rwxBerechtigungen, die es beibehält?

Wenn ich einen htdocs/Tarball im Besitz von root erstellt habe, hat das Extrahieren auf meinen lokalen Computer den Besitz von root auf meinen Benutzer geändert.

nicoX
quelle
5
Vielleicht sollten Sie versuchen, das Archiv als root zu extrahieren. Es ist nicht möglich, Berechtigungen für einen anderen Benutzer als normalen Benutzer festzulegen, daher denke ich, dass dies tarnicht möglich ist. Bitte sag mir, ob das funktioniert hat.
Louis Matthijssen
"lokale Maschine"? Bitte klären Sie, welches Betriebssystem diese Maschine hat;)
Rinzwind
Sagen Sie uns auch, welche Dateisysteme Sie verwenden. Sowohl die Quelle als auch die Ziel.
Terdon
Quelle: Red Hat Enterprise Linux Server release 6.5 (Santiago) Ziel: Ubuntu 13.10 Beide verwendenGPT
nicoX
Randnotiz: tarErhält Berechtigungen. -pund --same-owner/ --no-same-owner(wie in den Antworten) sind Extraktionsflags. Sie haben keine Auswirkungen auf die Archivierung
Fr0zenFyr

Antworten:

19

Eigentum und Berechtigungen sind zwei verschiedene Dinge. Das -pFlag behält Berechtigungen bei . Auf * nix-Systemen können normale Benutzer den Dateibesitz nicht in einen Benutzer ändern, der nicht sie selbst ist.

Wie hier erklärt :

Nur Prozesse mit einer effektiven Benutzer-ID, die der Benutzer-ID der Datei entspricht, oder mit entsprechenden Berechtigungen können den Besitz einer Datei ändern. Wenn _POSIX_CHOWN_RESTRICTED für path gilt:

  • Das Ändern der Benutzer-ID ist auf Prozesse mit entsprechenden Berechtigungen beschränkt.

  • Das Ändern der Gruppen-ID ist für einen Prozess mit einer effektiven Benutzer-ID zulässig, die der Benutzer-ID der Datei entspricht, jedoch ohne entsprechende Berechtigungen, wenn der Eigentümer der Benutzer-ID der Datei entspricht oder (uid_t) -1 und die Gruppe gleich ist entweder an die effektive Gruppen-ID des aufrufenden Prozesses oder an eine seiner zusätzlichen Gruppen-IDs.

Die Gründe dafür wurden von @Gilles in dieser Unix- und Linux-Antwort gut erklärt :

Der Grund für diese Einschränkung ist, dass die Weitergabe einer Datei an einen anderen Benutzer in seltenen, aber immer noch wichtigen Situationen zu schlechten Ergebnissen führen kann. Beispielsweise:

  • Wenn auf einem System Datenträgerkontingente aktiviert sind, kann Alice unter einem Verzeichnis, auf das nur sie Zugriff hat, eine Datei mit weltweiter Schreibberechtigung erstellen (sodass kein anderer Benutzer auf dieses Verzeichnis mit weltweiter Schreibberechtigung zugreifen kann) . Die Datei würde dann unter Bills Datenträgerkontingent zählen, obwohl nur Alice die Datei verwenden kann.
  • Wenn Alice Bill eine Datei übergibt, gibt es keine Spur, dass Bill diese Datei nicht erstellt hat. Dies kann ein Problem sein, wenn die Datei ungültige oder auf andere Weise gefährdende Daten enthält.
  • Einige Programme erfordern, dass ihre Eingabedatei einem bestimmten Benutzer gehört, um eine Anforderung zu authentifizieren (die Datei enthält beispielsweise einige Anweisungen, die das Programm für diesen Benutzer ausführt). Dies ist normalerweise kein sicheres Design, denn selbst wenn Bill eine Datei mit syntaktisch korrekten Anweisungen erstellt hätte, hätte er möglicherweise nicht beabsichtigt, diese zu diesem bestimmten Zeitpunkt auszuführen. Trotzdem kann es die Sache nur verschlimmern, wenn Alice die Möglichkeit hat, eine Datei mit beliebigen Inhalten zu erstellen und als Eingabe von Bill nehmen zu lassen.

Selbst wenn Sie das tar- --same-ownerFlag verwenden, müssen Sie die Dateien trotzdem extrahieren root, um den Besitz zu bewahren. Dieses Flag ist standardmäßig für aktiviert. rootSie möchten also Folgendes:

sudo tar xpf foo.tgz
terdon
quelle
9

Es gibt 2 weitere Optionen für Teer, die interessant sind:

--same-owner
       try extracting files with the same ownership as exists in the ar‐
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)

Die zweite ist die Standardeinstellung, damit Sie sie hinzufügen können --same-owner, um Ihren Benutzer zu speichern. Du wirst das wahrscheinlich damit zu tun haben sudo.

Außerdem: Dies funktioniert nur auf Systemen, die POSIX unterstützen. Und andere Betriebssysteme als Ubuntu haben möglicherweise nicht diese 2 Optionen (sie sind nicht Standard).

Rinzwind
quelle
3
Das --same-ownerfunktioniert nicht für Nicht-Root-Benutzer, sie haben nicht das Recht, das Eigentum an irgendjemand anderem als an sich selbst zu vergeben. Das definiert POSIX .
Terdon
4

Um den Eigentümer beizubehalten, führen Sie ihn als root aus oder verwenden Sie beim Extrahieren das Flag --same-owner neben dem Flag -p.

NGRhodes
quelle
3
Es muss auf jeden Fall als root ausgeführt werden. Benutzer ohne Rootberechtigung können den Dateibesitz nicht auf andere Benutzer übertragen.
Terdon