Пешниҳод карда шуд, ки истифодаи utmp барои бартараф кардани мушкилоти Glibc аз Y2038 қатъ карда шавад

Торстен Кукук, раҳбари гурӯҳи ояндаи рушди технология дар SUSE (Future Technology Team, openSUSE MicroOS ва SLE Micro-ро таҳия мекунад), ки қаблан лоиҳаи SUSE LINUX Enterprise Serverро дар тӯли 10 сол роҳбарӣ мекард, пешниҳод кард, ки аз файли /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-бит кор намекунад, зеро ин ба тағирёбии Glibc ABI оварда мерасонад (навъ дар функсияҳои монанди login(), getutid() ва utmpname тағир меёбад ()) ва вайрон кардани мутобиқат бо барномаҳое, ки utmp-ро истифода мебаранд, аз ҷумла w, who, uptime, login, su, sudo, useradd, systemd, sysvinit, tcsh, менеҷерҳои намоиши xterm, emacs, openssh, qemu, samba, rsyslog ва ғайра. Аз сабаби фаровонии домҳо ва мураккабии эҳтимолӣ, идеяи иваз кардани навъи time_t дар utmp аз ҷониби таҳиягарони Glibc рад карда шуд. Бо ҳамин сабаб, имкони истифодаи фазои холӣ дар сохтори utmp барои илова кардани майдони иловагии вақти 64-бит бекор карда шуд.

Илова бар ин, тағир додани умқи бит дар utmp дигар мушкилоти мавҷударо ҳал намекунад, ки ман низ мехостам аз онҳо халос шавам. Масалан, навиштан ба utmp ҳуқуқҳои махсусро талаб мекунад, ки ба равандҳо имтиёзҳои иловагӣ дода мешаванд. Мушкилоти дигар ин аст, ки меъмории utmp ба корбарони маҳаллӣ имкон медиҳад, ки ҳамлаҳои DoS-ро анҷом диҳанд, ки боиси халалдор шудани хидмати utmp тавассути коркарди қулфҳои файл мегардад, ки боварӣ ҳосил карданро ғайриимкон мекунад, ки мундариҷаи utmp ҳолати воқеии системаро инъикос мекунад. Пешниҳод карда шуд, ки барои коркарди дастрасӣ ба utmp як раванди иловагии замина истифода шавад, аммо барои ин гуна вазифаҳо аллакай як раванди системавӣ-логин вуҷуд дорад ва оғоз кардани раванди дигари махсус тавсия дода намешавад (барномаҳо бояд ҳамзамон маълумотро ба ду коркардкунанда интиқол диҳанд).

Дар айни замон, ҳатто ҳангоми ҳалли мушкилот бо ҳамлаҳои DoS, мундариҷаи utmp танҳо иттилоотӣ боқӣ мемонад ва инъикоси воқеиятро кафолат намедиҳад. Масалан, эмуляторҳои гуногун ва мултиплексорҳои терминал ҳолати онҳоро ба таври гуногун инъикос мекунанд - ба кор андохтани панҷ терминали GNOME боиси дар utmp инъикос шудани як корбар ва ба кор андохтани панҷ терминали konsole ё xterm дар KDE боиси шаш мешавад. Рафтори экран ва tmux ба ҳамин монанд фарқ мекунад: дар ҳолати аввал, ҳар як сессия ҳамчун корбари алоҳида ҳисоб карда мешавад ва дар дуюм, танҳо як корбар барои ҳама сессияҳо инъикос карда мешавад.

Дар натиҷа, ҳамчун роҳи соддатарин, пешниҳод карда мешавад, ки ҳамаи замимаҳо барои истифода аз хидмати алтернативии мавҷудаи systemd-logind интиқол дода шаванд ва пас аз мавҷуд набудани барномаҳои ҷории дастрасӣ ба utmp, сабтро ба utmp қатъ кунед. Барои иваз кардани wtmp, пешниҳод карда мешавад, ки интерфейсҳои нармафзор барои навиштан ва хондани маълумот дар бораи корбарон бо systemd-journald омода карда шаванд. Пойгоҳи рамзӣ барои нашри навбатии systemd 254 аллакай функсияҳои заруриро барои пешниҳоди маълумоти ивазкунии utmp тавассути libsystemd бо истифода аз API sd-login.h ё тавассути DBUS дар бар мегирад.

Манбаъ: opennet.ru

Илова Эзоҳ