Bug 39538

Summary: systemd uses nobody with hardcoded UID 65534
Product: Sisyphus Reporter: Pavel Nakonechnyi <zorg>
Component: systemdAssignee: Alexey Shabalin <shaba>
Status: CLOSED WONTFIX QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: arseny, shaba
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Pavel Nakonechnyi 2021-01-13 17:48:17 MSK
В systemd определен nobody как имеющий UID равный 65534, см. https://github.com/systemd/systemd/blob/master/src/basic/user-util.h#L59

В альт оный имеет UID 99.

Это выливается в визуально несимпатичный вывод `ls` в контейнерах с включенными user namespaces. Выливается ли это несоответствие во что-то ещё, мне лично неизвестно. По всей видимости, проблемы будут у тех, кто подготавливает контейнеры для использования в systemd (сомнительно что таких пользователей сильно больше нуля). Хотя поиск по исходникам выдаёт и более подозрительные модули.

Подозреваю что простая замена числа в указанном заголовочном файле на 99 может как раз таки привести к проблемам, так как во многих местах systemd предполагает что в адекватных системах нет UID больше чем UID_NOBODY.
Comment 1 Alexey Shabalin 2021-01-15 20:12:12 MSK
Покажите несимпатичный вывод ls.
Как воспроизвести?
Какой дистрибутив внутри контейнера?
Comment 2 Pavel Nakonechnyi 2021-01-16 02:15:24 MSK
(Ответ для Alexey Shabalin на комментарий #1)
> Покажите несимпатичный вывод ls.
> Как воспроизвести?
> Какой дистрибутив внутри контейнера?

чтобы воспроизвести:

 # machinectl import-tar alt-p9-rootfs-systemd-x86_64.tar.xz t1
 # machinectl start t1
 # machinectl shell t1
 # Connected to machine t1. Press ^] three times within 1s to exit session.
 [root@t1 ~]# ls -la /
 total 72
 ...
 drwxr-xr-x   2 root  root  4096 Sep  4 15:37 opt
 dr-xr-xr-x 297 65534 65534    0 Jan 16 00:11 proc
 drwx------   4 root  root  4096 Nov  3 05:17 root
 ...
 [root@t1 ~]#

Дистрибутив виден по имени импортируемого файла, от него не зависит. Эти 65534 то, как systemd устанавливает владельца внешних файлов. Например, такой владелец будет у файлов подмонтированных через опции bind этого nspawn.
Comment 3 Alexey Shabalin 2021-08-18 15:43:30 MSK
Даже если поправить в src/basic/user-util.h, то в src/basic/user-util.c

/* We enforce some special rules for uid=0 and uid=65534: in order to avoid NSS lookups for root we hardcode
         * their user record data. */

...
STR_IN_SET(*username, NOBODY_USER_NAME, "65534"))
...

Я бы пока смирился с некрасивым выводом, не понятно как изменение на 99 может отразится, например на контейнерах других дистрибутивов (fedora, debian).