gzip ändert den Besitz der Datei

2

Hier ist ein Fall, den ich nicht verstehe.

Ich habe eine gruppe barund diese Gruppe hat zwei Benutzer; foo und bar.

Ich habe ein test.txt Datei, foo ist der Besitzer und bar Benutzer können es nur lesen.

jedoch, wenn bar Benutzer ausführen gzip Befehl zu dieser Datei, ändert sich der Besitz von foo zu bar.

Deshalb, foo kann diese Datei nicht mehr berühren.

Ist das eine Sicherheitslücke?

Eingeloggt als bar

$ whoami
bar
$ cd /home/foo/test
$ ls -al
total 8
drwxrwxr-x 2 foo bar  4096 Jan  6 15:48 . 
drwxrwxr-- 5 foo bar  4096 Jan  6 15:48 ..
-rwxr-xr-x 1 foo foo    0 Jan  6 15:48 test.txt
$ gzip test.txt    
$ ls -al
total 12
drwxrwxr-x 2 foo bar 4096 Jan  6 15:50 . 
drwxrwxr-- 5 foo bar 4096 Jan  6 15:48 ..
-rwxr-xr-x 1 bar  bar   29 Jan  6 15:48 test.txt.gz
$ uname -a
Linux 2.6.18-xenU-ec2-v1.2 #2 SMP x86_64 x86_64 x86_64 GNU/Linux

Eingeloggt als foo:

$ whoami
foo
$ touch test.txt.gz 
touch: cannot touch `test.txt.gz': Permission denied
allen
quelle

Antworten:

8

Es ist keine Sicherheitslücke. Gzip erstellt eine neue Datei und entfernt die alte. Dies hängt von den Verzeichnisberechtigungen ab und nicht von den Berechtigungen für die Datei. Wenn Sie die Schreibberechtigung aus dem Verzeichnis entfernen, ist Ihre test.txt vor der Benutzerleiste geschützt.

Der gesamte Prozess in Bezug auf die Sicherheit sieht folgendermaßen aus:

  1. Gzip verwendet Leseberechtigungen für die Originaldatei, um eine schreibgeschützte Dateihandhabung für die Originaldatei zu erhalten.
  2. Verwenden Sie die Schreibberechtigung für das Verzeichnis, um eine neue, leere Datei zu erstellen.
  3. Liest Daten aus der Originaldatei und schreibt die komprimierten Daten in die neue Datei
  4. Löschen Sie die alte Datei mit der Schreibberechtigung für das Verzeichnis.
bot403
quelle
4

gzip ändert den Besitz einer Datei nicht. Es schafft eine Neu Datei (die, wie Unix-artige Systeme funktionieren, dem Benutzer gehört, der die gzip Befehl) und löscht die Originaldatei.

Wenn Sie möchten, dass das neu erstellt wird test.txt.gz Datei, um den gleichen Benutzer- und Gruppenbesitz wie die test.txt Datei, die Sie verwenden müssen chown - und auf den meisten Systemen benötigen Sie Root-Zugriff. Nutzer bar gewöhnlich kann nicht Erstellen Sie eine Datei, die "foo" gehört.

( gzip kann und setzt die Berechtigungsbits für das neu erstellte .gz Datei auf die gleiche wie in der Eingabedatei und wenn Sie es als ausführen root es wird auch verwenden chown den Besitzer einstellen. Quelle: Ich habe es gerade ausprobiert.)

Keith Thompson
quelle
3

Das heißt, Sie sind Mitglied einer anderen Gruppe. gzip erstellt eine neue Datei mit Ihrer Standardgruppe. Die Originaldatei wird entfernt.

HTH

Zsolt Botykai
quelle
Ich denke, er fragt sich, warum es dem Benutzer gehört, der läuft gzip.
Edward Thomson
gzip kann eine neue Datei mit Verzeichnisbesitz erstellen, die vorhandene Datei sollte jedoch nur mit Leseberechtigung entfernt werden können.
1
@bighostkim: ja, das sollte es, da das Entfernen von Dateien eine Änderung des übergeordneten Verzeichnisses ist bar hat Schreibzugriff auf.
Edward Thomson
Was ist die Lösung für die Frage von OP?
IgorGanapolsky