Содержание темы
Проблема: При извлечении архива tar теряются права доступа к файлам (например, вместо 755 становится 644) или не восстанавливаются setuid/setgid/ACL.
Причины:
1. Отсутствие флага `-p` (`--preserve-permissions`) при распаковке — tar по умолчанию использует umask, а не исходные права.
2. Архивация без флага `--same-permissions` — некоторые версии tar (например, BusyBox) не включают права в метаданные по умолчанию.
3. Недостаточные привилегии — root не нужен для обычных файлов, но для восстановления setuid/setgid/ext-атрибутов требуется `sudo`.
4. Архив создан с опцией `--no-same-permissions` или в системе, где tar не поддерживает расширенные атрибуты (например, древняя версия GNU tar <>
tar -cpvf archive.tar /path/to/dir
или явно:
tar --xattrs --acls --selinux -cpvf archive.tar /path/to/dir
- При распаковке (восстановить права):
Если нужны setuid/setgid/ACL:
sudo tar --xattrs --acls --selinux -xpvf archive.tar
- Проверка метаданных в архиве:
tar -tvf archive.tar | head -5
Ищем строки вида `-rwxr-xr-x root/root` — если там `?` или нет владельца, права не сохранены.
- Принудительное восстановление (если архив уже создан без прав):
sudo tar -xpvf archive.tar --transform='flags=r;s|.*|chmod 755 &|'
(небезопасно, лучше пересоздать архив с `-p`).