Доброе утро господа и дамы… на картинки пока НЕ смотрим, все станет прозрачным чуть позже.



Создаем подопытный файл под рутом:



echo 'some text' > test.txt



Затариваем его:



tar -cf test.tar test.txt



Теперь открываем в hexdump:



hexdump -C test.tar



hexdump — инструмент который используется разработчиками и отладчиками приложений. Он может преобразовывать файлы и данные в приятный и читаемый формат.



Так, открыли. Смотри первую картинку к этому посту. Видишь root/root? Это имя владельца и имя группы файла. Так вот, при создании архива эти поля можно изменять.



Давай изменим:



tar --owner='bash' --group='days' -cf test.tar test.txt



Окей. Снова открываем в hexdump:



hexdump -C test.tar



Смотрим вторую картинку. На ней видим интересную ситуацию, пользователь изменился на bash, а группа на days. НО в системе у нас нет такого пользователя и группы. Хотя ожидаемый результат должен быть — user/group not found или что-то подобное.



-rw-r--r-- bash/days 10 2023-10-23 05:09 test.txt



Баг или фича? Причем если растарить такой файл (с ключом -p или без него), bash/days вернутся к root/root.



А теперь создадим с user/user (этот пользователь и группа есть в системе).



tar --owner='user' --group='user' -cf test.tar test.txt



Распаковываем:



tar -xf test.tar



И видим ситуацию, что у файла test.txt пользователь и группа user/user. Великолепно! Вот такое интересное поведение.



Из документации по тару по смещениям 108 и 116 находятся uid и gid.



char uid[8]; /* 108 */

char gid[8]; /* 116 */



Давай посмотрим смещение 108:



hexdump -Cs108 -n8 test.tar



получаем:



0000006c 30 30 30 31 37 35 30 00 |0001750.|00000074



Конвертим 0001750 в uid:



echo $(( 8#1750 ))



Опа, получили 1000, что соответствует пользователю user. А если этот трюк провернуть с bash/days то получим uid того пользователя, под которым тарили файл.



Короче как всегда везде есть свои нюансы и приколы, возможно обоснованные. Глубже копать не стал. Давай, увидимся вечерком!



tags: #linux #debug



💩 @bashdays