gzip zmień własność pliku

2

Oto przypadek, którego nie rozumiem.

Mam grupę bar, a ta grupa ma dwóch użytkowników; fooa bar.

Mam test.txtplik, foojest właścicielem i barużytkownik może go tylko odczytać.

Jeśli jednak barużytkownik uruchomi gzippolecenie dla tego pliku, własność zmieni się z foona bar.

Dlatego foonie można już dotknąć tego pliku.

Czy to dziura w zabezpieczeniach?

zalogowany jako 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

Zalogowany jako foo:

$ whoami
foo
$ touch test.txt.gz 
touch: cannot touch `test.txt.gz': Permission denied
Allen
źródło

Odpowiedzi:

8

To nie jest dziura w zabezpieczeniach. Gzip tworzy nowy plik i usuwa stary. Jest to regulowane przez uprawnienia do katalogu, a nie uprawnienia do pliku. Jeśli usuniesz uprawnienia do zapisu z katalogu, plik test.txt będzie bezpieczny z paska użytkownika.

Pełny proces dotyczący bezpieczeństwa wygląda następująco:

  1. Gzip używa uprawnień do odczytu oryginalnego pliku, aby uzyskać uchwyt tylko do odczytu oryginalnego pliku.
  2. Użyj uprawnienia do zapisu w katalogu, aby utworzyć nowy, pusty plik.
  3. Odczytaj dane z oryginalnego pliku i zapisz skompresowane dane do nowego pliku
  4. Usuń stary plik, używając uprawnienia do zapisu w katalogu.
bot403
źródło
4

gzipnie zmienia prawa własności do pliku. Tworzy nowy plik (który ze względu na sposób działania systemów uniksowych jest własnością użytkownika uruchamiającego gzippolecenie) i usuwa oryginalny plik.

Jeśli chcesz, aby nowo utworzony test.txt.gzplik miał tę samą własność użytkownika i grupy co test.txtplik, musisz go użyć chown- i w większości systemów oznacza to, że będziesz potrzebował dostępu do konta root. Użytkownik barzwykle nie może utworzyć pliku należącego do `foo '.

( gzipmoże i ustawia bity uprawnień w nowo utworzonym .gzpliku na takie same jak te w pliku wejściowym, a jeśli go uruchomisz root, użyje on również chowndo ustawienia właściciela. Źródło: Właśnie próbowałem.)

Keith Thompson
źródło
3

Oznacza to, że należysz do innej grupy. gziptworzy nowy plik z domyślną grupą. Oryginalny plik zostanie usunięty.

HTH

Zsolt Botykai
źródło
Myślę, że zastanawia się, dlaczego jest własnością użytkownika, który działa gzip.
Edward Thomson,
gzip może utworzyć nowy plik z prawem własności do katalogu, ale nie będzie w stanie usunąć istniejącego pliku tylko z uprawnieniami do odczytu.
1
@bighostkim: tak, powinno, ponieważ usunięcie pliku jest modyfikacją katalogu nadrzędnego, który barma dostęp do zapisu.
Edward Thomson
Jakie jest rozwiązanie pytania OP?
IgorGanapolsky