Glibcን ከ Y2038 ችግር ለማስወገድ utmp መጠቀምን ለማቆም ሀሳብ አቅርቧል

በ SUSE የወደፊት የቴክኖሎጂ ቡድን መሪ የሆኑት ቶርስተን ኩኩክ (የወደፊት የቴክኖሎጂ ቡድን፣ openSUSE MicroOS እና SLE Microን ያዘጋጃል)፣ ከዚህ ቀደም የ SUSE LINUX Enterprise Server ፕሮጀክትን ለ10 ዓመታት የመሩት፣ የ/var/run/utmp ፋይልን በ ውስጥ ለማስወገድ ሀሳብ አቅርበዋል በGlibc ውስጥ ያለውን የY2038 ችግር ሙሉ በሙሉ ለመፍታት ማከፋፈያዎች። utmp፣ wtmp እና lastlog የሚጠቀሙ ሁሉም አፕሊኬሽኖች systemd-logind ን በመጠቀም የተጠቃሚዎችን ዝርዝር ለማግኘት እንዲንቀሳቀሱ ታቅዶላቸዋል።

በጃንዋሪ 19፣ 2038፣ በ32-ቢት time_t አይነት የተገለጹት የኢፖክ ጊዜ ቆጣሪዎች ይሞላሉ። በGlibc ውስጥ፣ የ64-ቢት time_t አይነት ቢገባም፣ ከ32-ቢት የተጠቃሚ-ቦታ አፕሊኬሽኖች ጋር ተኳሃኝነትን ለመጠበቅ፣ የ64-ቢት ጊዜ_t አይነት አሁንም በአንዳንድ ሁኔታዎች በ32-ቢት መድረኮች ላይ ጥቅም ላይ ይውላል። ከእንደዚህ አይነት ጉዳይ አንዱ የ/var/run/utmp ፋይል ሲሆን በአሁኑ ጊዜ ወደ ስርዓቱ የገቡትን ተጠቃሚዎች መረጃ የሚያከማች ነው። በ utmp ውስጥ ያለው የሰዓት መስክ 32-bit time_t እሴት በመጠቀም ተቀናብሯል።

ከ32-ቢት ወደ 64-ቢት አይነት በጊዜ ሂደት በ utmp መስክ መቀየር አይሰራም፣ይህም Glibc ABIን ስለሚቀይረው (አይነቱ እንደ መግቢያ()፣ ጌቱቲድ() እና utmpname() ባሉ ተግባራት ላይ ይቀየራል። እና utmp ከሚጠቀሙ አፕሊኬሽኖች ጋር ተኳሃኝነትን ያቋርጣሉ፣ w፣ ማን፣ ሰዓት፣ መግቢያ፣ ሱ፣ ሱዶ፣ ተጠቃሚአድድ፣ ሲስተይድ፣ sysvinit፣ tcsh፣ xterm display managers፣ emacs፣ openssh፣ qemu፣ samba፣ rsyslog፣ ወዘተ. ሊከሰቱ ከሚችሉ ወጥመዶች እና አድካሚነት ብዛት የተነሳ በ utmp ውስጥ ያለውን የጊዜ_t አይነት ትንሽ የመተካት ሀሳብ በ Glibc ገንቢዎች ውድቅ ተደርጓል። በተመሳሳዩ ምክንያት ተጨማሪ ባለ 64-ቢት የጊዜ መስክ ለመጨመር በ utmp መዋቅር ውስጥ ያለውን ቦታ የመጠቀም አማራጭ ተጥሏል።

በተጨማሪም, በ utmp ውስጥ ያለውን የትንሽ ጥልቀት መቀየር ሌሎች ችግሮችን አይፈታም, እኔ ደግሞ ማስወገድ እፈልጋለሁ. ለምሳሌ፣ ወደ utmp መጻፍ ልዩ ፍቃዶችን ይፈልጋል፣ ይህም ለሂደቶች መሰጠት ተጨማሪ ልዩ መብቶችን ይፈልጋል። ሌላው ችግር የ utmp አርክቴክቸር የሀገር ውስጥ ተጠቃሚዎች የፋይል መቆለፊያዎችን በመጠቀም የ utmp አገልግሎቱን የሚሰብሩ የ DoS ጥቃቶችን እንዲፈጽሙ ያስችላቸዋል ፣ይህም የ utmp ይዘት በሲስተሙ ውስጥ ያለውን ትክክለኛ ሁኔታ የሚያንፀባርቅ መሆኑን ማረጋገጥ አለመቻል ነው። የ utmp መዳረሻን ለማስተናገድ ተጨማሪ የዳራ ሂደትን ለመጠቀም ታቅዶ ነበር፣ ነገር ግን ለእንደዚህ አይነት ስራዎች ቀድሞውኑ በስርዓት የመግባት ሂደት አለ እና ሌላ ልዩ ሂደት መጀመር አይመከርም (መተግበሪያዎች ውሂብን ወደ ሁለት ተቆጣጣሪዎች በተመሳሳይ ጊዜ ማስተላለፍ አለባቸው) .

በተመሳሳይ ጊዜ, ችግሩን በ DoS ጥቃቶች በሚፈታበት ጊዜ እንኳን, የ utmp ይዘት መረጃዊ ብቻ ነው የሚቀረው, የእውነታውን ነጸብራቅ ዋስትና አይሰጥም. ለምሳሌ፣ የተለያዩ ተርሚናል ኢምዩሌተሮች እና ባለብዙ ተርሚናል አድራጊዎች ሁኔታቸውን በተለየ መንገድ ያንፀባርቃሉ - አምስት GNOME ተርሚናሎችን ማስኬድ አንድ ተጠቃሚ በ utmp ውስጥ እንዲንፀባረቅ ያደርጋል፣ በ KDE ውስጥ አምስት ኮንሶል ወይም xterm ተርሚናሎች መሮጥ ስድስት ያስከትላል። በተመሳሳይም የስክሪን እና tmux ባህሪ ይለያያሉ, በመጀመሪያው ሁኔታ እያንዳንዱ ክፍለ ጊዜ እንደ የተለየ ተጠቃሚ ይቆጠራል, እና በሁለተኛው ውስጥ አንድ ተጠቃሚ ብቻ ለሁሉም ክፍለ ጊዜዎች ይንጸባረቃል.

በውጤቱም ፣ እንደ ቀላሉ መፍትሄ ፣ ሁሉንም አፕሊኬሽኖች ለማዛወር ቀድሞውንም ያለውን ተለዋጭ የስርዓት-ሎጊን አገልግሎትን ለመጠቀም እና ፣ utmp የሚደርሱ ትክክለኛ ፕሮግራሞች ከሌሉ በኋላ ወደ utmp መፃፍ ያቁሙ። wtmpን ለመተካት ሲስተም-ጆርናልድ በመጠቀም ስለተጠቃሚዎች መረጃ ለመጻፍ እና ለማንበብ ኤፒአይዎችን ለማዘጋጀት ሀሳብ ቀርቧል። የሚቀጥለው የስርአትድ 254 ኮድ ቤዝ የsd-login.h API ወይም በ DBUS በኩል በlibsystemd በኩል ምትክ utmp ውሂብ ለማቅረብ አስፈላጊዎቹን ተግባራት ያካትታል።

ምንጭ: opennet.ru

አስተያየት ያክሉ