13

Я распаковал файл на моем сервере, используя:

unzip filename

Однако это, похоже, вызвало все файлы с правами владельца / группы 0 0 .

Файлы, которые я загружал, были программным скриптом PHP , поэтому мне интересно, как правильно установить разрешения при разархивировании файлов и на что их нужно установить?

3 ответа3

14

На самом деле, некоторые ответы здесь не верны. Файлы ZIP также могут иметь права доступа к файлам. (*) Вы можете перечислить права доступа к файлам в вашем ZIP-файле с помощью:

unzip -Z

Возможно, инструмент, который вы использовали для создания ZIP-файла, не сохранял разрешения или неправильно их сохранял.

Итак, если вы создали ZIP-файл самостоятельно, проверьте инструмент, с помощью которого вы создали ZIP-файл. Может быть, есть способ установить разрешения перед архивированием (как в случае с maven), или он сохраняет исходные разрешения (но это будет работать только в системе, которая поддерживает разрешения - т.е. не в Windows).

Если вы не создали ZIP-файл самостоятельно, ваш единственный шанс - установить правильные разрешения после разархивирования, например, с помощью

chmod -R [permissions] [directory]

(*) Мы используем эту функцию в сочетании с плагином сборки maven, где вы можете указать fileMode для файлов, которые попадают в ZIP-файл.

10

Насколько я знаю, Zip не поддерживает сохранение владения / разрешения файлов. Вы можете попробовать установить umask, чтобы unzip создавал файлы с этими разрешениями. Бежать

umask 644

перед unzip

1

ZIP-архивы не хранят разрешения Unix. Если вы хотите сохранить их, вам нужно заархивировать их с помощью tar (и, возможно, также gzip архив).

Если вы разархивируете файлы PHP, и у них нет соответствующих прав доступа, вы должны настроить их следующим образом:

  • Файлы должны принадлежать некоторой учетной записи пользователя и группе.
  • Файлы и папки должны быть доступны для чтения (но не для записи) процессом веб-сервера.
  • Папки должны получить разрешение на выполнение, но также не должны быть доступны для записи.

Так, например, если вы разархивировали свои файлы в /var/www/foo и хотите, чтобы ваш пользователь (whoami) и группа (id -gn):

find /var/www/foo -exec chown $(whoami):$(id -gn $(whoami)) {} \+
find /var/www/foo -type f -name '*.php' -exec chmod 644 {} \+
find /var/www/foo -type d -exec chmod 755 {} \+

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .