Tar-файл с сохраненными разрешениями отображает имя пользователя, которого нет в текущей системе

Как tar может отобразить имя пользователя, например www-data, в системе, в которой нет пользователя www-data?

Я знаю, что tar сохраняет права пользователей на основе идентификатора системы, в данном случае www-data составляет 33 (я полагаю?) В системах Debian.

Что больше всего сбивает с толку, так это то, что если я изменяю права доступа к папке на 33 несуществующего пользователя и отправляю его на другой сервер, tar сообщает, что владельцем является пользователь 33, но при снятии флажка для папок устанавливается значение владельца www- данные.

tar (GNU tar) 1.29

Это потому, что tar сохраняет эту информацию, это формат ustar, указанный в POSIX 1003.1-1990. В официальном исходном коде это указано в заголовочном файле tar.h. Я скопировал важный блок:

 /* POSIX header. */ struct posix_header { /* byte offset */ [...] char uid[8]; /* 108 */ char gid[8]; /* 116 */ [...] char uname[32]; /* 265 */ char gname[32]; /* 297 */ [...] }; 

Как вы можете видеть, имя пользователя владельца, а также имя группы владельцев хранятся помимо uid и gid.

Tar также сохраняет имя пользователя и группу в файле. Вы можете убедиться в этом, посмотрев сам файл tar с помощью таких инструментов, как hexdump . Причина в том, что одно и то же имя может использоваться в разных системах, но с разными номерами.

Во втором случае исходная система не знает имени для пользователя 33, поэтому не может предоставить имя, только номер. Извлекающий tar использует этот номер, и, поскольку система знает этот номер, он отображает имя пользователя для этого номера.

Смотрите также

–numeric владелец
Всегда используйте цифры для имен пользователей / групп.