LINUXTALKS.CO

Suse предлагает упразднить часть файлов в пользу systemd

 

L


0

1

Торстен Кукук (Thorsten Kukuk), лидер группы по развитию технологий будущего в компании SUSE (Future Technology Team, развивает openSUSE MicroOS и SLE Micro), ранее 10 лет руководивший проектом SUSE LINUX Enterprise Server, предложил избавиться от файла /var/run/utmp в дистрибутивах для полного решения проблемы 2038 года в Glibc. Все приложения, использующие utmp, wtmp и lastlog, предлагается перевести на получение списка пользователей при помощи systemd-logind.

19 января 2038 года произойдёт переполнение счётчиков эпохального времени, заданных 32-разрядным типом time_t. В библиотеке Glibc, несмотря на внедрение 64-разрядного типа time_t, для сохранения совместимости с 32-разрядными приложениями пространства пользователя в некоторых случаях на 64-разрядных платформах продолжает применяться 32-разрядный тип time_t. Одним из таких случаев является файл /var/run/utmp, хранящий данные о пользователях, в данный момент работающих в системе. Поле с временем в utmp задаётся с использованием 32-разрядного значения time_t.

Просто заменить поле со временем в utmp с 32-разрядного на 64-разрядный тип не получится, так как это приведёт к изменению ABI Glibc (изменится тип в функциях, подобных login(), getutid() и utmpname()) и нарушению совместимости с приложениями, использующими utmp, в числе которых w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, xterm дисплейные менеджеры, emacs, openssh, qemu, samba, rsyslog и т.п. Из-за обилия возможных подводных камней и трудоёмкости идея замены в utmp разрядности типа time_t была отвергнута разработчиками Glibc. По той же причине был отброшен вариант с использованием имеющегося в структуре utmp свободного пространства для добавления дополнительного 64-разрядного поля для времени.

Кроме того, изменение разрядности типа в utmp не решает другие имеющиеся проблемы, от которых также хотелось бы избавиться. Например, для записи в utmp требуются специальные права, что требует предоставления процессам дополнительных привилегий. Ещё одна проблема связана с тем, что архитектура utmp допускает совершение локальными пользователями DoS-атак, приводящих к нарушению работы сервиса utmp через манипуляции с блокировками на файл, из-за чего нельзя быть уверенным, что содержимое utmp отражает реальное состояние в системе. Для обработки доступа к utmp предлагалось использовать дополнительный фоновый процесс, но для подобных задач уже существует процесс systemd-logind и запуск ещё одного специализированного процесса не является целесообразным (приложениям придётся передавать данные одновременно в два обработчика).

При этом даже при решении проблемы с DoS-атаками содержимое utmp остаётся лишь информационным, не гарантирующим отражение реальной действительности. Например, разные эмуляторы и мультиплексоры терминалов по разному отражают своё состояние - запуск пяти терминалов GNOME приведёт к отражению в utmp одного пользователя, а запуск пяти терминалов konsole или xterm в KDE - шести. Аналогично отличается поведение screen и tmux, в первом случае каждый сеанс учитывается как отдельный пользователь, а во втором отражается только один пользователь на все сеансы.

В итоге в качестве наиболее простого решения предлагается перевести все приложения на использование уже существующего альтернативного сервиса systemd-logind и после того как не останется актуальных программ, обращающихся к utmp, прекратить запись в utmp. Для замены wtmp предлагается подготовить программные интерфейсы для записи и чтения информации о пользователях при помощи systemd-journald.В кодовую базу следующего выпуска systemd 254 уже включены необходимые функции для предоставления заменяющих utmp данных через libsystemd с использованием API sd-login.h или через DBUS.

// cc-by opennet.ru
// converted with crypt’s opennet autoreposter

>>> Подробности

★★★☆☆

было приятно узнать, что FreeBSD лишена проблемы by design.

FreeBSD and macOS both support utmpx only, not traditional utmp. But they do support 64-bit timestamps at least on 64-bit architectures, because the ut_tv field of struct utmpx is a struct timeval, which on these systems uses 64-bit or 32-bit timestamps depending on the architecture. FreeBSD has a semi-traditional implementation of getutxent that reads a file, but the on-disk format is a separate struct that their libc manually converts to struct utmpx, so it doesn't matter that struct utmpx is different between 32-bit and 64-bit programs. (This is in contrast to glibc where struct utmp, struct utmpx, and the on-disk format are all identical.)
crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от Kaschenko

с малазийского это переводится кукух (муж кукушки то есть). но сложно сказать.

crypt    
★★★☆☆
FreeBSD / Chrome

Линукс-программисты — петухи

cocucka    
★★★★★★★★★★★
iPhone / Firefox

Лезть программам в файлы напрямую без энкапсуляции (например библиотекой со стандартным API) было изначально плохой идеей. В этом плане Windows разумнее устроен.

X512    
★★★★
Windows / Firefox
Ответ на: комментарий от X512

а разве glibc сама по себе не является вот этим самым API, который отделяет прикладные программы от файла?

crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

glibc умеет читать /var/run/utmp? Тогда в чём проблема и почему предлагают новый API через libsystemd?

X512    
★★★★
Windows / Firefox

так как это приведёт к изменению ABI Glibc
и нарушению совместимости с приложениями

И поэтому решили вообще выпилить эти файлы, так то совместимость сохранится

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от TheAnonymous

При записи несколькими программами в один и тот же файл всё может сломаться. Или по крайней мере не забисаться один из результатов.

X512    
★★★★
Windows / Firefox
Ответ на: комментарий от TheAnonymous

Файлы в юниксах и есть API

тут надо признать, что под этим имеются ввиду файлы, которые можно читать при помощи вызовов glibc. а если это какой-то кастомный utmp-бинарный формат, то это не особо и UNIX-way. это как бинарные журналы systemd.

p.s.

а аватарка твоя отстой. пришлось тебя пока заигнорить, чтобы не портила вид. так вот рендомно включил ответы в топике, почитал, ответил.

crypt    
★★★☆☆
Последнее исправление: crypt (всего исправлений: 1)

FreeBSD / Chrome
Ответ на: комментарий от crypt

а аватарка твоя отстой. пришлось тебя пока заигнорить, чтобы не портила вид.

Аватарок бояться – в интернет не ходить.

X512    
★★★★
Windows / Firefox
Ответ на: комментарий от crypt

а аватарка твоя отстой. пришлось тебя пока заигнорить, чтобы не портила вид

Какие мы нежные!
Зы: у тебя адблока нет что ли?

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от X512

а напомни мне, как там в виндовс обстоит дело с комбинированными бинарниками 32/64 бита? емнип, у них же было какое-то решение?

что-то я не могу разобраться, как фотошоп комбинирует сразу 32 и 64 версию.

crypt    
★★★☆☆
Последнее исправление: crypt (всего исправлений: 1)

FreeBSD / Chrome
Ответ на: комментарий от TheAnonymous

после переезда в этот инстанс для клуба еще не поставил. думал, что не понадобится.

crypt    
★★★☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

а напомни мне, как там в виндовс обстоит дело с комбинированными бинарниками 32/64 бита?

Никак. Windows так не умеет. Умеет только комбинировать 16 битные DOS бинарники, которые обычно пишут «This program can’t be run in DOS mode.» и выходят.

X512    
★★★★
Windows / Firefox
Ответ на: комментарий от crypt

А причем здесь клуб, ты настолько Ъ, на другие сайты в интернете не ходишь?

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=90