GZIP сжатый файл владения и разрешения

6574
sundar

Я пытаюсь выяснить, как gzipping файл меняет его разрешения. Руководство gzip (man gzip) гласит:

Когда это возможно, каждый файл заменяется одним файлом с расширением .gz, сохраняя при этом те же режимы владения, время доступа и изменения.

Теперь у меня есть файл «myfile.txt», владельцем которого является я (myuser). Когда я распаковываю этот файл как другой пользователь (этот пользователь (скажем, «другой пользователь») имеет права на чтение и запись в этом каталоге и файле), владельцем этого файла становится этот другой пользователь. То есть, кто бы ни был файл gzip, он становится владельцем файла .gz.

Кроме того, тот, кто этот файл gunzip, становится владельцем несжатого файла. Значит ли это, что gzip ничего не делает с владельцами? Если так, что означает вышеприведенное предложение на странице руководства?

Я не считаю, что «Всякий раз, когда это возможно» оговорка может быть проблема здесь, так как я нахожусь в Unix (Solaris), где сохранение разрешений является (AFAIK) возможно.

Смежный вопрос: если у пользователя есть разрешение на чтение файла .gz, возможно ли, что он не сможет прочитать содержимое файла? Поддерживает ли gzip отдельный набор разрешений «внутри» архива, который может ограничивать доступ? Это не представляется вероятным, но я хотел бы быть уверен.

Мне нужно написать код в зависимости от поведения gzip, поэтому для меня важно узнать точное поведение. Любая помощь будет оценена.

Благодарю.

2

2 ответа на вопрос

5
innaM

Изменение владельца файла может быть сделано только пользователем root. Обычный user_a просто не может создать файл, принадлежащий обычному user_b, независимо от того, создается ли файл с помощью gzipping или gunzipping. Если вам нужно сохранить права собственности, разархивируйте как root.

0
user282654

HPUX использует очень старую версию gzip (1.3.5 на 11.31 ia64) и делает это точно так, как описано на странице руководства. usera может gzip и gunzip файл, принадлежащий userb, и все разрешения и режимы сохраняются. Корневой пользователь gzip / gunzip не нужен.

Тем не менее, для версий 1.4 и выше, кажется, что gzip не может успешно изменить владельца / разрешения должным образом, если вы не являетесь пользователем root. На мой взгляд, это ошибка. Вы можете вручную выполнить шаги для gzip / gunzip файла, принадлежащего другому пользователю, если у вас есть разрешения unix для этого.

$ gzip -c file> file.gz $ chmod NNN file.gz (где NNN - режим файла) $ chown user: group file (где user: group - пользователь и владелец группы файла) $ rm file

Почему gzip версии> 1.4 не могут сделать это, когда версии <1.4 делают это нормально?