Particionálás (túlbonyolítása)

Fórumok

Sziasztok!

Csak egy alapvető témát szeretnék feldobni, és inkább kezdő linuxos kérdés. A megfelelő particionálással nagyobb biztonságot lehet biztosítani (pl céges környezetben): pl kivédhető, hogy alkalmazások a root partíciót teleírják, vagy mástól vegyék el a helyet stb...

Egy desktop gépre most a Fedora BTRFS-sel alapértelmezetten a következőket hozná létre (vagyis ezt ajánlja fel a kézi particionáláskor):

  • /boot
  • /boot/efi
  • /
  • /home
  • /var
  • swap

Ha jól emlékszem.

Van aki csak egy root-ot hoz létre.

Régebbi rendszereknél úgy emlékszem, több partíciót volt szokás létrehozni. (desktopon lehet, hogy nem). Érdemes lehet ezt tovább bonyolítani desktopon?

Egy példa: 1Tb-os ssd-n titkosított (800 GiB), és nem titkosított (200 GiB) volume létrehozása, és azokon a következő subvolume-ok:

  • / - Nem titkosított
  • /usr - Nem titkosított
  • /usr/local - Nem titkosított
  • /root - Titkosított
  • /home - Titkosított
  • /opt - Titkosított
  • /srv - Titkosított
  • /var - Titkosított
  • /var/cache - Titkosított
  • /var/log - Titkosított
  • /var/spool - Titkosított
  • /var/lib - Titkosított
  • /var/lib/machines - Titkosított
  • /var/lib/docker - Titkosított
  • /var/lib/libvirt - Titkosított
  • /var/lib/containers - Titkosított
  • /tmp - Titkosított
  • swap - Opcionális

Ezeknek a subvolume-oknak a mérete utána finomhangolható, pl: / 40 GiB, /tmp 5 GiB, stb...

Érdekes, hogy a Fedora kérdezés nélkül létrehoz egy /var/lib/machines subvolume-ot, lehet hogy valami technikai oka van, de akkor érdemes lehet a docker-nek, podmannek, és a libvirt-nek is külön partíciót csinálni.

A swap partició: több memóriával rendelkező gépen gondolom nem érdemes külön swap-et csinálni, kivéve ha valaki hibernálni akarja a gépét. A Fedora így is csinál valami zram-os megoldást, ahol a RAM-ban van a swap, tömörítve a benne lévő adat. (ha jól értem).

Desktop-on nem valószínű, hogy az ember belefut olyan problémákba, ami miatt ezt ennyire el kellene bonyolítani, lehet hogy ez így túl overkill. Vagy manapság már ez nem szokás, pl külön rakni a /usr-t? A otthoni gépeteken ez hogy van?

Hozzászólások

Az, hogy mit raksz külön és mit nem, az függ attól, hogy mire használod a gépet. Amit én mindenképp külön szoktam választani, az a /var /home (nosuid,nodev) a /tmp (nosuid,nodev,noexec), illetve ha van helyben forgatott, nem repóból jött alkalmazás, akkor az mondjuk a /opt (nosuid,nodev) alá megy nálam.
A /var alól még a /var/log is különpakolható, ha AD-integrált a géped (akár pbis, akár sssd), mert az "nem szereti" ha a /var alatt nullára fogy a hely - szélsőséges esetben csak lokális userrel lehet belépni.

Amit _semmiképp_ nem választanék le a root (/) alől, az a root user home könyvtára.

Ha titkosítani kell, akkor a / _is_ legyen titkosítva (hiszen a hostot a hálózaton azonosító adatok, pl. ssh vagy épp kerberos (ad-integráció) kulcsok, vagy épp a webszerver privát kulcsa ugyanis jellemzően ott van. Ugyancsak titkosított kötet legyen a swap alatt is - hiszen a swap-ban pláne lehetnek szenzitív adatok.

A swap jó dolog, célszerű, hogy legyen "valamennyi", mert a paging normál működés és kellő mennyiségű RAM esetén is előfordulhat.

Én sem hoztam létre, mert 64 GiB memóriával használom a gépet. Nagy meglepetésemre a Fedora default hozott létre, és olyan megoldás, amivel most találkoztam először: RAM-ba tette (ZRAM-os swap). Ezen kicsit meglepődtem, mert mi értelme RAM-ba tenni a swap-et. :) De annyi plusz lehet, hogy tömöríti az adatokat, illetve nem tudom, hogy van-e olyan, amikor mégis kellhet a swap valamire (tehát igényli egy alkalmazás/megoldás). Egy ilyen dologról tudok: amikor hibernálni akarod a géped, akkor azt hiszem a swap-ba menti le, és onnan tölti vissza. Ez viszont mit jelent (a hibernáláshoz), 64 GiB RAM-hoz egy ennél nagyobb swap-et hozzak létre?

A hibernálás során emlékeim szerint van tömörítés, de de nagyon nem mindegy az sem, hogy mit csinált a gép a hibernálás pillanatában - mert ha a RAM tartalma nem jól tömöríthető, és ráadásul paging miatt a swapterület egy része is használatban volt, akkor érhetik meglepetések az embert...

Tehát ha jól értem, akkor ha valaki hibernálni szeretné a gépét (vagy bekapcsolni ezt a hibrid működést, hogy sleep, és valamennyi idő után hibernálás), akkor egy 64 GiB-os gép esetén érdemes lehet 96 GiB swap-et csinálni, vagy 80-at. (és mivel ilyenkor disken kell hogy legyen a swap, ha fontos a biztonság, akkor érdemes lehet titkosítva)

Nem foglalkoztam behatóbban a hibernálással, így csak tippelem, hogy 64GiB RAM esetén a 64GiB swap több, mint elég.
A titkosítás kapcsán meg azt kell mérlegelned, hogy hibernálás során a  memóriából kerülhet a diszkre olyan adat is, amit egyébként nem szívesen osztanál meg harmadik féllel (akár jelszavak plaintext formában is...), úgyhogy ha biztonságban szeretnéd tudni a dolgaidat, akkor erősen javasolt mindazokat a tárterületeket titkosítással védeni, ahova szenzitív adat odakerülhet. És ez nem csak a swap, hanem a /etc, a /home, a /var/ a /tmp...

A titkosítás kapcsán meg azt kell mérlegelned, hogy hibernálás során a  memóriából kerülhet a diszkre olyan adat is, amit egyébként nem szívesen osztanál meg harmadik féllel (akár jelszavak plaintext formában is...), úgyhogy ha biztonságban szeretnéd tudni a dolgaidat, akkor erősen javasolt mindazokat a tárterületeket titkosítással védeni, ahova szenzitív adat odakerülhet. És ez nem csak a swap, hanem a /etc, a /home, a /var/ a /tmp...

Jó gondolat, a /etc-n nem is gondolkodtam, csak addig jutottam, hogy az "alap rendszer" miért lenne titkosított. :)

Hibernálás: lehet, hogy nagyobb memória esetén érdemes erről a funkcióról lemondani. Nem hangzik logikusnak és célszerűnek ekkora swap-et csinálni.

jelszavak plaintext formában

Sajnos előfordulhat, de remélem azért törekednek az alkalmazások a jelszavak takarítására használat után. :) (persze erre nem lehet alapozni, és van amikor nem is egyértelmű ez a takarítás, pl egy immutable string-ben kapsz egy http-n érkezett tokent, amit majd egyszercsak kitöröl valami garbage collector használat után, de az alkalmazás nem tudja felülírni a memóriában)

Nem tudom, most hogy van, de én annó használtam hibernálás előtt és után valami hook-ot, ami hibernálás előtt létrehozott egy megfelelő méretű swap fájlt, beletolta a RAM tartalmát, amikor meg visszajött, akkor swapoff és törölte a fájlt. Ezzel két dolgot is nyertél: továbbra se volt swap, akkora swap fájl volt létrehozva, amekkora kellett és mivel fájl volt, ezért a tartalma titkosítva volt.

Szerver eseten jo ha van nemi swap, mert a leakelo programok altal foglalt, de fel nem szabaditott memoriaja oda megy egy ido utan, igy lassabban telik meg a memoria. Valamint a leakeles tenyet is hamarabb lehet eszrevenni igy. Es 4-16 GB disk olcsobb, mint 4-16 GB RAM, plane, ha ezer geprol beszelunk, az ujrainditas meg az uzlet szerint az ordogtol valo. :-)

Pont antipattern a swap, mert nem veszed észre a leak-et, közben pedig a swap miatt előre nem látható performancia és latency problémákat tudsz bevinni a rendszerbe, amikor a legváratlanabb pillanatokban kezd swap használatba a szerver, ami adott esetben végiggyűrűzik a rendszeren. Sokkal jobb a megelőző monitoring, a konténerbe zárt limitációk és végül az OOMKill, azt észreveszed. Egy csomó szofver esetén a swap megléte manuálisan felülbírálandó paramétert igényel, el se indul, amíg van swap.

Ha a paging latency/performancia problémát okoz, akkor ott más is el van... Rontva.

Aham, ezért van minden low latency adatbázisnál a swap kikapcsoltatva... balfaszok írják, tiszta sor. :D

Olvasnivaló például: https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/install/instal…

Ugyanúgy, mint amikor a swap lassú fogyatkozását nem veszi senki észre.

Azt már észre kellene venni a memória lassú fogyatkozásánál is. A swap egy régi-régi beidegződésnek a szükségtelen továbbélése. Default off módban érdemes indulni és akkor érdemes használni, ha már tényleg minden más lehetőség ki lett próbálva és nem volt már megoldás a problémára, mert a swap egy csomó problémát hoz be a rendszerbe, ami nélküle nincs.

Mivel a particionálás a téma: annyit érdemes előre megtennni, hogy már az elején hozzuk létre a swapet (mert utólag átparticionálni sokkal nagyobb szopás, mint előre eldönteni, hogy xG -t levonunk a diszkből) és kikapcsolva tartani, amíg nem kell. Mert amikor mégiscsak kell, akkor nem mindegy, mennyi kiállással jár a bekapcsolása (a swapon 1s alatt fut le, egy partició átméretezés meg esetleg 10-20p is) és milyen rizikói vannak pl egy partició shrinkingnek. 

Blog | @hron84

valahol egy üzemeltetőmaci most mérgesen toppant a lábával 

via @snq-

Erre való a swapfile, ha mégis kell, aztán törölhető, ha már nem kell. 2.6-os kerneltől felfelé nincs már performancia különbség, az meg már 20 éve jött ki. Vannak bőven, akik 20+ éve megtanultak valamit és azóta ahhoz tartják magukat, dacára annak, hogy 20 év kurva sok idő, pláne az informatika területén.

Tokre igazad van, egy idealis vilagban ugy lenne jo minden, ahogy mondod.

A problema csak az, hogy a vilag nem idealis. Uzemelteto vagyok, nem en dontom el, hogy mi fut a gepeken, engem arra tartanak, hogy eletben tartsam azt, amit futtatni kell. Ergo az OOM killer -ig nem szeretnek eljutni.

Vannak olyan szoftverek, amelyek befoglaljak a gep memoriajanak jo reszet, amit aztan maguk kezelnek. Gindolom te is ismersz ilyet. Na, ha egy ilyen cucc leakel, akkor az szopo, mert maga a keretrendszer nem oldja meg, ergo vagy felzabalja a gep memoriajat es OOM, vagy a belso mechanizmusai tornek el, az eredmeny ugyanaz, megdoglik az uzleti szoftver.

Zold mezos megoldasok nekem is lennenek, de sajna a helyzet sokszor az  hogy kulonfele legacy cuccokkal kell egyuttelni. Ilyenkor jo, ha van egy nagyobb swap a gepen.

Ugyanis a leakelt memoriat oda ki fogja lapozni, es azt pedig mar konnyu monitorozni, hogy melyik process mennyi memoriat lapozott ki. Igy siman tudom mondani az uzlet szamara, hogy az almafa servicetek leakel, legyszi nyomjatok ra egy restartot.

A vilag tele van szar programokkal, a swap ad egy kis egerutat. Ha attol felsz, hogy performancia gondod lesz, jusson eszedbe, hogy a lassu kiszolgalas is jobb, mint a szolgaltatas kieses.

Uzemelteto vagyok, nem en dontom el, hogy mi fut a gepeken, engem arra tartanak, hogy eletben tartsam azt, amit futtatni kell. Ergo az OOM killer -ig nem szeretnek eljutni.

Ezzel a mentalitással konzerválod a szart.

Ha attol felsz, hogy performancia gondod lesz, jusson eszedbe, hogy a lassu kiszolgalas is jobb, mint a szolgaltatas kieses.

Namost, ha egy restart akkora kurvanagy kiesést jelent, akkor abból a szolgáltatásból nyilván több példány van és nem vehető észre a restart. Ha a restart mégis észrevehető és kiesést okoz, mert egy példány fut a szolgáltatásból, akkor az a valóságban nem fontos. A fontos szolgáltatások mellé adnak pénzt, a nem fontos szolgáltatások mellé csak dumát adnak, hogy fontos.

Ezzel abszolut egyetertek. De sajnos a valosag gyakran nem olyan, mint amilyennek szeretnenk.

De te tevékenyen, lelkesen és proaktívan teszel azért, hogy a valóság ne olyan legyen, mint amilyennek szeretnéd, hanem szar maradjon.

Szoktam járni cégekhez tanácsadni, amikor külön-külön beszélek a területekkel, akkor igen gyakori, hogy az üzemeltetés ugyanígy lelkesen életben tartja a terméket erőn felül mindenféle körbetákolásokkal élve és órákat tudnak arról beszélni, hogy mit kellene változtatni, hova kellene több pénz, eszköz, satöbbi; az üzleti terület pedig annyit tud az egészről, hogy a termékkel és az üzemeltetéssel semmi gond nincs, nincs leállás, kiesés, satöbbi. Amikor meg egyben leülünk és előveszem a kis listámat, akkor az üzlet meg szokott lepődni, hogy ilyen piti összegeket miért nem kérnek, ha egyébként szenvednek miatta.

Legyél úgy lelkes és proaktív, hogy kérsz megfelelő erőforrásokat a munkádhoz, ha nem kapod meg, akkor meg legyen OOMKill a vége, aztán tudod mondani, hogy "én szóltam". Amíg így is működik, addig nem adnak rá több pénzt.

Szoktam járni cégekhez tanácsadni....

Franko, ne legyél már ennyire álnaiv. Megfordultam már én is 20-30 cégnél legalább - hol alkalmazottként, hol vállalkozóként. A legtöbb ilyen esetben a felsővezetés, az üzlet, a tulajdonos csak jól megjátssza magát, hogy "ők semmiről se tudtak". A francokat nem. Csak egyik fülükön be, a másikon kiment az információ. Ezért kell a VHP (védd a hátsód papírral).
A szenvedés meg amíg az üzemeltetés oldalán csapódik addig nincs probléma. BAU működés. Amikor az üzletet is érinti, akkor kezd az üzlet, tulajdonos hisztis kis picsát játszani.

...meg legyen OOMKill a vége...

Ezt képtelen felfogni sokszor a vezetők, döntéshozók. Fogalmuk sincs, hogy ez mivel jár.

Pénz meg egyébként ritkán jut el a tényleg értelmes és hasznos célokra. Sajnos.

Abba belegondoltál már, hogy miért konzerválják? Mert sose hallgatják meg őket, sose figyelnek oda. Az üzemeltetés sokszor csak a károgó varjú szerepét tölti be. Aztán amikor borul a bili, akkor meg minden döntéshozó, vezető csak forgolódik, pislog.

Mondjuk ugyanez a probléma típus létezik a fejlesztőknél is. Csak ott nem mindig azonnal borul a bili, hanem hónapok, netalán évek múlva, aztán lehet refaktorálni a terméket.

Ha én minden helyet rögtön ott hagytam volna, ahol nyakig ért a probléma halmaz (értsd: 50-nél több IT probléma), akkor elég keveset dolgoztam volna eddig. ;)

Szerintem te is tudod, hogy először meg kell ismerni a céget, a működést, a "miérteket". Utána lehet összeírni egy listát, majd leülni a vezetőkkel és beszélni a megoldásukról. Természetesen ha a vezetőség nem ugyanabban az IT koordináta rendszerben gondolkodik, akkor meg lehet választani: lelép az ember vagy beáll a sorba vagy megpróbál pozitív megoldást nyújtani lassan.

Az RCA mindig egy fontos lépés. Csak mindenki meg akarja spórolni, átlépni 5 perc alatt. Igen, a nagy multik is.

Marha nagy sértődések tudnak abból is lenni, amikor megmondom, hogy GipszJakab üzemeltető tök hülye az üzemeltetéshez, nem elég képzett - ami a probléma kialakulásának gyökere. GipszJakabot meg nem rúgják ki, mert olyan szorgalmas, lelkes, netalán rokon. A GipszJakabok évek szorgos munkájával fel tudják építeni a kártyavárukat.

Összefoglalva a véleményem: Amíg nem fáj eléggé, addig nem létezik a probléma.

Ha én minden helyet rögtön ott hagytam volna, ahol nyakig ért a probléma halmaz (értsd: 50-nél több IT probléma), akkor elég keveset dolgoztam volna eddig. ;)

Ahogy lentebb írtam: "Azt már korábban is beszéltük, hogy csupa rossz helyen jártál egész életedben. Vagy csak jólesik panaszkodni. Vagy csak nem értesz hozzá. Vagy ezek kombinációja."

Ha mindig megállsz szar cégeknél, ahol nyakig ér a szar és semmit nem tudsz tenni a szar ellen, akkor valóban kevés jó céget és jó megoldást láttál eddig.

Szerintem te is tudod, hogy először meg kell ismerni a céget, a működést, a "miérteket". Utána lehet összeírni egy listát, majd leülni a vezetőkkel és beszélni a megoldásukról.

Ez viszonylag hamar megy, sok a low hanging fruit és főleg azért, mert nincs érdemi kommunikáció. Az egész szál nagyjából 25-50-100 ezer forint értékű memória hiányáról, miközben a projekt elvileg százmilliókba kerül.

Összefoglalva a véleményem: Amíg nem fáj eléggé, addig nem létezik a probléma.

Ezzel kezdtem, most akkor a saját véleményeddel vitatkozol? Innen olvasd újra: https://hup.hu/comment/3055435#comment-3055435

Boruljon az a bili, amíg működik így is, addig nem lesz változás.

Ezt én is így gondolom, boruljon a bili. Valahol igaz az, hogy a "leggyengébb láncszem" szintjén lehet csak intézni a dolgokat, nehogy valakinek baja essen, vagy meg kelljen javítani valamit. Egy normális üzemeltetőnek, vagy fejlesztőnek ebből joggal van elege.

Szolnak azok, csak le van szarva. Amikor en mentem ki ugyfelhez a Komoly Tanacsado Cegtol hetvenezer forintert orankent, akkor nekem is sok dolgot elhittek, amit a helyi eroknek nem. Azt persze nem tudtak, hogy amit en mondtam, azt elotte nap tollba mondta a helyi szakerto, akit be sem engedtek ezekre a meetingekre.

Szolnak azok, csak le van szarva.

Nem mondják. Sokszor csak azt hiszik, hogy mondják, de nem mondták, sőt, nem is írták le. Amikor kérdezem, hogy oké, és mikor mondtátok, akkor nincs nyoma sehol.

A másik probléma, hogy ha volt is róla meet/email és le van írva, hogy ha nem kapunk X és Y erőforrást, akkor ekkor-és-ekkor össze fog omlani, aztán nem kaptak és nem omlott össze, mert a fél banda hátulról támasztja a díszleteket a hátával három műszakban, akkor nyilván az üzlet azt fogja mondani, hogy lám, nem is kellett X és Y erőforrás. Ilyenkor el kell engedni a díszletet, boruljon fel a picsába, aztán mutatni az emailt, hogy én szóltam.

Ahogy írtam, a legtöbb helyen tevékenyen, lelkesen és proaktívan tesznek azért, hogy a valóság ne olyan legyen, mint amilyennek szeretnék, hanem szar maradjon. És várják a dicséretet az üzlettől, hogy a fél banda a hátával támasztja a díszletet három műszakban, de a dicséret sose fog megérkezni ezért.

Szcenárió 1: kivakarják a szart, mert fáj a probléma.
Szcenárió 2: marad minden szar, mert nincs probléma.

Valahogy azt látom, hogy a szar helyen dolgozók szinte kivétel nélkül a második irányt választják, aztán meg vég nélkül tudnak panaszkodni, hogy szar helyen dolgoznak.

A "Szcenárió 2" az, ahol a cég tele van szőnyeg alá söpört random időpontokban összeboruló rendszerekkel, éppen melyikre nincs ember, aki támasztaná a hátával. Az "Szcenárió 1" olyan, hogy az első néhány "na, ugye, hogy összedőlt" mondás után valahogy az üzlet elkezdi elhinni, hogy amit az IT mond, arra kellene hallgatni.

Paradox módon a "Szcenárió 2" cég az, ahol több a nem várt leállás és a hibás működés.

Annyit foglal amennyit adsz neki (mert megadod hogy Xmx)
Tegyük fel hogy eljutunk a max-ig, oké.
Mi jön ekkor? Garbage collector. 
Full gc, stop-the-world. Bizonyos esetben már egy ilyen is "megrohadásnak" számít. De most nem, menjünk tovább...
Oké, nézegessük végig a heap-et, mit lehet belőle kidobni. 
Hopp, ki van page-elve, húzzuk vissza diszkről.
Eljutottunk a feléig, hopp, lejárt az időkeret, dobjunk el mindent, folytassuk ahol voltunk.
Nah, meg is rohadtunk.

Az esetek 99%-ban ez történik. Ahol nem hallgatnak a jó szóra és swap-re kiengedik a heap-et, ott meg 99.5%

Igen, van az az 1% amikor valakik nagyon értenek hozzá és mennek G1GC-vel meg adnak neki külön GC-re dedikáltan 1-2 processzort. És akkor a hatalmas heap-en is elmuzsikál a jvm (elastic, kafka, hasonlók). De ezek nem a vérpistike által írt leakelő tákolmányok ugye.

És amikor ez így együttáll akkor már megvan arra is az ész hogy nem teszünk alá swapet mert kontraproduktív. Inkább vegyük kisebbre a jvm memóriát.
 

Gábriel Ákos

4-16 gigás disk már nem is kapható, SSD-ből a minimimum 240 giga, de már azt se sok helyen árulják. Mindenki a min. fél-egy terásra megy rá mostanában, és elég megfizethető a 2 terás is már. A RAM is elég olcsó lett, egy 2×8 gigás DDR3 kit itt az Amazon UK-n, 20 font, egy DDR4-es 30 font körül, de még a DDR5 is megáll 45 GBP-ből. A DDR5 csak akkor drágább, ha valami csillió teraherzes tuning, meg RGB színjátszós gaming, meg server grade ECC kitet vesz az ember, de akkor se húzós, duplázd meg ezeket az árakat (bár inkább csak másfélszeres szokott lenni a szorzó), még mindig kibírható szerintem.

Ami miatt a RAM az gond, hogy sokan megtartották a régi szutyok gépeket, amik kimaxolódtak 2-4-8 giga RAM-nál, vagy odaforrasztás, vagy chipset/memóriavezérlő korlát miatt nem tudsz többet beletenni, na, ez az a réteg, aki szenvedhet swap-pal, de most már nekik is olcsó az SSD.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

a leakelo programok, ottfelejtett szemeteit szepen ki tudja rakni swapba, igy marad hely a rendes memoriaban. nyilvan ha 42432324 G ramod van akkor ez nemszempont.

Pont ezzel hozod be a latency és egyéb problémákat, mert az ottfelejtett szemét néha-néha vissza fog jönni, illetve semmi kontrollod nincs az felett, hogy a leak tartalma megy-e a swap-re vagy bármi más hasznosabb, ahelyett, hogy egy OOMKill megoldaná időben és/vagy kijavításra kerülne a leak probléma.

Lehet persze jönni ezzel a szegény ember memóriájával, de a memória olcsó, ha arra se telik, ott más komoly gondok is vannak, a swap "szükségessége" egy tünete ennek.

" ... az ottfelejtett szemét néha-néha vissza fog jönni ..."

A leak definicioja, hogy nem hasznalod tobbet. Ergo nem fog viszajonni.

 

" ... semmi kontrollod nincs az felett, hogy a leak tartalma megy-e a swap-re vagy bármi más hasznosab ..."

Van annyi memoriaja a gepnek, hogy a hasznalt memoria ne lapozodjon ki. Es van kontrol, swapiness -nek hivjak, tok jol mukodik. Ertem, hogy elmeletileg mi az ellenerzesed, de a gyakorlat azt mutatja, hogy a swap egy jol mukodo, olcso, es es megbizhato "puffer" a lassan leakelo programok szamara, amelyeket igy konnyebb kezelni, peldaul az ujrainditasukkal megvarni a kovetkezo karbantartasi ablakot.

 

" ... de a memória olcsó ..."

Sokkal-sokkal dragabb a lemeznel.

A leak definicioja, hogy nem hasznalod tobbet. Ergo nem fog viszajonni.

Nem, a leak definíciója az, hogy funkcionálisan felszabadítható memóriaterület foglalt marad. Arról, hogy időnként ráolvas-e a program vagy sem, arról a leak semmit nem mond.

Mondok egyszerű példát, legyen az a feladat, hogy a program feljegyzi és logolja egy URL válaszidejét percenként. Ha a válaszidőt valamiért egy láncolt listába teszi és megőrzi végtelenségig, akkor az egy leak, de mivel mindig hozzá kell fűznie egy újabb elemet, mindig be kell töltenie a teljes listát. Ha ezt rendszeresen kiteszed swap-re, akkor percenként latency vesztésed lesz, ha nem teszed ki swap-re, akkor meg más aktív dolog fog kikerülni és felváltva latency problémáid lesznek.

Ez a leggyakoribb leak és végtelen sok ilyen leak van, ami mindig visszajön és egyre több idő visszahozni. A legkevésbé gyakori leak az, hogy nem kell többé a lefoglalt memória.

Van annyi memoriaja a gepnek, hogy a hasznalt memoria ne lapozodjon ki. Es van kontrol, swapiness -nek hivjak, tok jol mukodik.

Nincs kontrollod. Azt hiszed, hogy van kontrollod, de nincs.

Ráadásul a swappiness globális és a per process cgroups beállításnak sincs halvány fogalma arról, hogy az adott process hogy működik belül. A swappiness nagyjából annyit tesz, hogy mekkora arányú a file backed page és az anonymous page, vagyis leegyszerűsítve azt, hogy a read/write buffer legyen inkább a fizikai memória vagy a processzek akár nem használt adatai legyenek ott. A swappiness-t akkor érdemes hangolni, ha például nem olvasol sok adatot fájlból, nem időkritikus a fájlok olvasása, és adott esetben percek vagy órák óta ott ülnek buffer-ben adatok, amelyeket nem használsz semmire, viszont kinn van swap-en a program saját adata és/vagy, ha a programnak van saját file cache-e. De ezek teljesen más esetek, mint a leak, arra a swappiness nincs érdemleges hatással.

Szerintem rosszul használod a swappiness-t.

"Nem, a leak definíciója az, hogy funkcionálisan felszabadítható memóriaterület foglalt marad. Arról, hogy időnként ráolvas-e a program vagy sem, arról a leak semmit nem mond."

Én itt önellentmondást érzek. A funkcionálisan felszabadítható területet azért nevezzük funkcionálisan felszabadíthatónak, mert biztosan nem olvasunk rá többet. Amire még ráolvashatunk, az nem szabadítható fel.

A láncolt listás példád nem leak, hanem csupán egy szuboptimális memóriastruktúra, hiszen kell a lánc összes tagja, valamikor, valahova fel fogja használni. Az, hogy emellett az új elem végére rakásához neki végig kell gyalogolnia a listán, az csak sima programozói balfaszság. Lehet láncolást a másik irányból is csinálni, foglalsz egy elemet, és az előzőleg foglalt elem címét adod meg neki, így a lánc lefele lóg, te mindig a tetejét látod, így nem kell mindig végigolvasni az utolsó elemet keresve. De ez tökmindegy, értem, hogy csak példa volt.

Szóval maradva a példádnál, van egy lánc amit mindig fel kell olvasni, mert csak. Oké. Ez milyen perfomancia vesztéssel jár? Az attól függ, hogy milyen gyakran és menyit kell olvasni a lemezről. Ha gyakran olvasod, akkor nem kerül ki a swapre. Ha kikerül, mert csak naponta egyszer olvasnak rá, akkor meg naponta egyszer villan egyet az SSD/storage oldalán a LED. Ha nagyon hosszú a lánc, és minden eleme egy külön IO, akkor igazad van, lehet, hogy érezhető lesz a várakozás.

De ez egy nagyon kisarkított példa, amit szerintem te is tudsz, hiszen írod, hogy "Ha ezt rendszeresen kiteszed swap-re, akkor percenként latency vesztésed lesz, ha nem teszed ki swap-re, akkor meg más aktív dolog fog kikerülni és felváltva latency problémáid lesznek.". Namármost amit percenként használsz, az soha nem lapozódik ki, kivéve, ha nincs elég memória a gépben. Szerintem te is képben vagy afelől, hogy napjainkban a programok rettenetesen erőforrásigényesek, de ez nem csoda, mert a programozó ideje több fabatkába kerül mint még egy giga memória, amiből 100 MB azért megy pocsékba, mert a hülyéje fix méretű timestampeket egyesével láncolgat, ahelyett, hogy értelmesen tárolná ezeket. Vagy láncot használ verem helyett. Vagy akármi, amit az ember elkövet, ha kevés idő alatt kell ha nem is készre, de működőre csinálni valamit.

A sima leak szerintem sokkal gyakoribb dolog (fun fact: google: "java leaking" 26 millió találat) mert ez ugye akkor van, amikor egy függvényben van egy malloc/new amin valamit csinál a függvény, majd a végén valamit ellenőriz, és például ha jó az érték akkor kibányássza a lefoglalt memóriából amire szüksége van, jön a free, és visszatér az eredménnyel, viszont ha az ellenőrzés során valami nem jó, akkor visszatér egy konstans hiba értékkel, és mivel ehhez már nem kell a lefoglalt memóriához nyúlni, a programozó simán elfelejti a free utasítást.

Ez a függvény csak néha fut hibára, és olyankor is csak néhány kilobyte ami elvész, viszont ez valóban leak, mert a függvény lokálisan tárolta, hogy hol volt a lefoglalt memória, így miután visszatért, ez az infó elveszett. Vagyis garantáltan nem lesz ráolvasva erre a memóriára, szemben az általad írt láncolt listára ami nem leak, hiszen minden cím elérhető, és jó eséllyel még használva is lesz, elvégre nem ok nélkül gyűjti az adatokat.

"Nincs kontrollod. Azt hiszed, hogy van kontrollod, de nincs."

Hát, lehet, hogy csak egy pillangó vagyok aki arról álmodik, hogy a gyakorlatban tök jól működik, és nemsokára felébredek, de most én tök nyugodtan alszom, mert a monitorban szépen tudom követni, hogy melyik process hány MB memóriát pazarolt el, és így azt is tudom, hogy nagyjából mennyi idő van még, amíg ez gondot okoz, így nem érnek meglepetések, miközben a hibás programok nem a drága memóriát pazarolják.

Figyelj. Értem amit mondasz. Teljesen egyet is értek veled elméletben, csak éppen a gyakorlat többnyire nem olyan tiszta és szép, mint az elmélet.

https://www.pinterest.com/pin/1829656073596075/

Én itt önellentmondást érzek.

Nincs önellentmondás.

A funkcionálisan felszabadítható területet azért nevezzük funkcionálisan felszabadíthatónak, mert biztosan nem olvasunk rá többet. Amire még ráolvashatunk, az nem szabadítható fel.

Próbáld megérteni a példát.

A láncolt listás példád nem leak, hanem csupán egy szuboptimális memóriastruktúra, hiszen kell a lánc összes tagja, valamikor, valahova fel fogja használni.

Hogyne lenne leak, végtelenségig növekszik a memóriaigénye a processznek, az maga a memory leak. A memory leak független attól, hogy használod-e később vagy sem. A memory leak lényege az, hogy a processz memóriaigénye korlát nélkül növekszik, nem tudsz annyi memóriát adni, ami tetszőleges ideig determinisztikusan elég lesz.

Az, hogy emellett az új elem végére rakásához neki végig kell gyalogolnia a listán, az csak sima programozói balfaszság.

Az összes leak programozói balfaszság.

Szóval maradva a példádnál, van egy lánc amit mindig fel kell olvasni, mert csak. Oké. Ez milyen perfomancia vesztéssel jár?

Be kell olvasni swap-ról memóriába, ahhoz ki kell tenni mást swap-re, hogy legyen hely, aztán ha végigolvastad, hozzáfűzöl a végére egy új elemet, aztán ha jön egy másik process, aminek kell a swap-en ülő cucca, akkor ez megy ki mind swap-ra és jön be onnan más. Hogy a lófaszba ne lenne ez performancia veszteség?

De ez egy nagyon kisarkított példa, amit szerintem te is tudsz, hiszen írod, hogy "Ha ezt rendszeresen kiteszed swap-re, akkor percenként latency vesztésed lesz, ha nem teszed ki swap-re, akkor meg más aktív dolog fog kikerülni és felváltva latency problémáid lesznek.". Namármost amit percenként használsz, az soha nem lapozódik ki, kivéve, ha nincs elég memória a gépben.

Nem kisarkított példa, a leggyakoribb memory leak, amit írtam, hogy egy láncolt listában ott ülnek az adatok, amire nincs már szükség, de a lista sajátosságai miatt ott lesznek és aktívan lesznek használva. Hogyne lapozódna ki, ha van egy folyamatosan futó processzed és ez, meg kevés memóriád, akkor minden egyes percben a géped azzal fog foglalkozni, hogy kirak a swap-re mondjuk 1 GB adatot, beolvas 1 GB adatot, majd újra kiír 1 GB adatot és beolvas 1 GB adatot. Percenként. Teljesen feleslegesen.

A sima leak szerintem sokkal gyakoribb dolog (fun fact: google: "java leaking" 26 millió találat) mert ez ugye akkor van, amikor egy függvényben van egy malloc/new amin valamit csinál a függvény, majd a végén valamit ellenőriz, és például ha jó az érték akkor kibányássza a lefoglalt memóriából amire szüksége van, jön a free, és visszatér az eredménnyel, viszont ha az ellenőrzés során valami nem jó, akkor visszatér egy konstans hiba értékkel, és mivel ehhez már nem kell a lefoglalt memóriához nyúlni, a programozó simán elfelejti a free utasítást.

Na, ilyen például Java-ban nincs, mégis van leak. Szerintem neked nincs elég tudásod ehhez.

Hát, lehet, hogy csak egy pillangó vagyok aki arról álmodik, hogy a gyakorlatban tök jól működik, és nemsokára felébredek, de most én tök nyugodtan alszom, mert a monitorban szépen tudom követni, hogy melyik process hány MB memóriát pazarolt el, és így azt is tudom, hogy nagyjából mennyi idő van még, amíg ez gondot okoz, így nem érnek meglepetések, miközben a hibás programok nem a drága memóriát pazarolják.

Onnan indultunk, hogy a swappiness teljesen mást csinál, mint amit írtál.

Figyelj. Értem amit mondasz. Teljesen egyet is értek veled elméletben, csak éppen a gyakorlat többnyire nem olyan tiszta és szép, mint az elmélet.

Igen, ezt már írtam, hogy ha hősiesen konzerválod a szart, akkor mindig szarban leszel. Nem fognak egyszer csak a homlokukra csapni, hogy jé, YleGreg szarban van, segítsünk neki. Azt látják, hogy YleGreg aprópénzért szopik mosolyogva, tehát pont elég pénzt kap, sőt, mivel mosolyog, még akár csökkenthető is a pénze.

Kezdjuk onnan, hogy mibol gondolod, hogy ez nekem szopas? Van monitor, latom amikor egy gep load -ja megno, megteszem amit kell. Latom ha telik a vinyo, megteszem amit kell. Latom ha telik a memoria, megteszem amit kell. Latom, hogy gyulik a szemet a swap teruleten, megteszem amit kell.

Alapvetoen az lenne szopas, ha a swap hasznalat helyett a memoria telne be, az tobb munkaval jarna.

Amugy az egesz feltevesed ott bukik, hogy feltetelezed, hogy a gepek pengeelen tancolnak a memoria teren, es ezert aktiv a swap hasznalat. Ez nincs igy. Alapvetoen a gepek nem hasznalnak swapet. Amelyik megis, az leakel. Ez szepen kovetheto a monitorban. Amikor eler egy szintet, kenyelmesen be lehet tervezni a service vagy a gep restartot. A swap pont nem plusz szivast jelent, hanem nyugodt alvast, hogy nem jon az OOM killer.

Nem fogok veled vitatkozni azon, hogy mit nevezunk leaknek. Pongyolan ertelmezve a szot a feleslegesen hasznalt memoria is leak, ugyhogy oke, legyen igazad. Ettol meg a tapasztalatom szerint egy elegendo memoriaval ellatott gepen csak az kerul ki a swapre, ami valoban leak, vagyis tenyleg soha nem kerul visszaolvasasra. 

Alapvetoen az lenne szopas, ha a swap hasznalat helyett a memoria telne be, az tobb munkaval jarna.

Ugyanannyi munkával jár, csak közben nem növekszik a load lassan, nem csökken a responsivity, nem lesznek latency problémák és nem húzol be teljese megjósolhatatlan válaszidőket, mert épp valami swap-en van, aminek nem ott kellene lennie.

Alapvetoen a gepek nem hasznalnak swapet. Amelyik megis, az leakel. Ez szepen kovetheto a monitorban. Amikor eler egy szintet, kenyelmesen be lehet tervezni a service vagy a gep restartot. A swap pont nem plusz szivast jelent, hanem nyugodt alvast, hogy nem jon az OOM killer.

Ez úgy van megoldva a "swap-szekta" szerint nem normális helyeken (vagyis kb. a jelenlegi élvonalban), hogy az orchestrator figyeli a processz request és limits értékeit és ha azok elérnek egy threshold értéket, akkor preventíven újraindítják a processzt. Memleak szinte mindenhol van, a különbség az, hogy megvárod-e, amíg a rendszer agonizálni kezd a swap használat miatt (lásd megnő a load, satöbbi), vagy még akkor megoldod, amikor nincs a kiszolgálást érintő mérhető jele.

Pongyolan ertelmezve a szot a feleslegesen hasznalt memoria is leak, ugyhogy oke, legyen igazad.

Nem, a feleslegesen használt memória nem leak. A memory leak az, amikor a processz memóriaigénye végtelenségig növekszik az idő/terhelés függvényében. Ha egy szoftver lefoglal teszem azt 1 GB memóriát és aztán nem használja, az nem memory leak, hanem determinisztikus és ugyanakkor felesleges memória használat, üzemeltetés szempontjából teljesen jól kezelhető, nem növekszik a memória igénye az idő/terhelés függvényében.

Ettol meg a tapasztalatom szerint egy elegendo memoriaval ellatott gepen csak az kerul ki a swapre, ami valoban leak, vagyis tenyleg soha nem kerul visszaolvasasra. 

Az a baj, hogy nem tudod, hogy mi van swap-en. Vannak sejtéseid, amelyek vagy jók vagy rosszak, de mivel a swappiness-t behoztad erre, abból látszik, hogy ezek csak sejtések, de nem feltétlen tudod, hogy mi történik a motorháztető alatt.

"Ugyanannyi munkával jár, csak közben nem növekszik a load lassan, nem csökken a responsivity, nem lesznek latency problémák és nem húzol be teljese megjósolhatatlan válaszidőket, mert épp valami swap-en van, aminek nem ott kellene lennie."

Értem, akkor rossz a monitorunk, mert jelenleg ezeken a gépeken nincs és nem is szokott lenni semmiféle load, latency, perf probléma, pedig szerinted ennek kéne lennie. Biztosan van olyan scenario amikor igazad van, de párszáz gép működési adatai most engem igazolnak.

 

"Ez úgy van megoldva a "swap-szekta" szerint nem normális helyeken (vagyis kb. a jelenlegi élvonalban), hogy az orchestrator ..."

Oké, akkor most végy egy nagy levegőt, és gondold végig, hogy mikor írtam én olyat, hogy van orchestrator? Segítek: sehol.

 

"Memleak szinte mindenhol van, a különbség az, hogy megvárod-e, amíg a rendszer agonizálni kezd a swap használat miatt (lásd megnő a load, satöbbi), vagy még akkor megoldod, amikor nincs a kiszolgálást érintő mérhető jele."

Köszönöm! Pont erről beszéltem végig, örülök, hogy végre te is megértetted. Monitorozom a swap telítődést, és még mielőtt zavaró lenne, vagyis mielőtt megnőne a load, megoldom úgy és akkor, hogy az ne zavarja a kiszolgálást. Tudod, volt itt egy csávó, aki szerint az OOM killer a megoldás a memory leakre, most már csak neki kéne elmagyarázni, hogy ennél azért van szakmaibb hozzáállás arra a problémára, amit te is írsz, hogy: "Memleak szinte mindenhol van"

 

"Ha egy szoftver lefoglal teszem azt 1 GB memóriát és aztán nem használja, az nem memory leak, hanem determinisztikus és ugyanakkor felesleges memória használat, üzemeltetés szempontjából teljesen jól kezelhető, nem növekszik a memória igénye az idő/terhelés függvényében."

Keresztkérdés: ha nem használja, akkor mikor rántja vissza a lemezről? :-)

Ha nem használja, és a memóriában tartja, akkor elpocsékoltál 1 GB memóriát. Gratulálok.
Ha használja, akkor nem megy ki a swapre. Ilyen egyszerű.

BTW, én azt látom, hogy a leakelő processzek a swapet nem gigákkal terhelik amilyen a te példád, hanem apró morzsákkal, néhány KB/MB -os növekményekkel szemetelik tele, szépen lassan.

A te példád egy olyan abszolút programozói hülyeség erőltetése, ami egyébként megbukna a perf teszten, hiszen a lánc hosszával együtt nő a feldolgozás sebessége, ez alapvetően elég hamar kiderül, élesbe álláskor meg pláne.
Az a scenario ami írsz, hogy a memória szűkössége miatt gigákat rángat a gép a lemezről, és emiatt belassul, az szerinted rosszabb, mintha jön az OOM (mert nincs swap) és kicsapja a fenébe? Ember, adatvesztésről beszélsz! Jó esetben egy másik rétegben még megvan az adat, de ez már feldolgozási architektúra függő, cirka olyan bemondás, mint hogy majd az orchestrátor... És ha nincs orchestrátor. Tudod, sok olyan szoftver létezik, amit nem így terveztek.

Szóval ne erőltesd, hogy a swap ördögtől való, csak mert egy alulméretezett gépen a sűrűn használt gigás láncolt listák feldolgozásakor... Nincs alulméretezés. Viszont nincs pazarlás sem. 

Nem kell megsértődni, az tökre kontraproduktív.

Azt kell felismerni, hogy:

- vannak rendszerek/architektúrák ahol a swap nem ad hozzá a jósághoz, (vagy hozzáad, de magas a rizikófaktora) és emiatt a használata nem javallott

- vannak olyan rendszerek/architektúrák ahol a swap használata indokolt, mert képes megelőzni egy olyan ismert hibából (pl. memory leakből) fakadó degradációt (a használható fizikai memória csökkenését), amit nem tudnak, (vagy nem akarnak rendesen javítani, mert gazdaságilag nem térül meg), és mindezt úgy, hogy a használata nem jár magas rizikófaktorral.

Te az előbbi mellett kardoskodsz, én meg az utóbbiról beszélek.

FYI: Rajtad kivül senki nem hívta a swap nélkül üzemeltetőket balfasznak. Te balfaszozod az összes swap-pal üzemeltetőt. Érdemes őszintének lenni magaddal, és beismerni, hogy besértődtél, nincs ezzel sem baj, csak nem kell egymást áltatni.

Az igazság amúgy _szerintem_ középen van. Az, hogy kell-e swap vagy sem, nagyon sok paraméter függvénye lehet, egy része technikai (amiket itt fenn fejtegetsz, leakek, memóriafogyás, stb) egy másik része pedig nem technikai (mennyi erőforrása van az üzemeltetésnek a leállásokkal szopni, van-e rendes devops, aki képes a fejlesztőket támogatni, kapnak-e a fejlesztők időt a memória optimalizációra, ami sok idő is lehet, mennyi az üzemeltetés és a fejlesztés érdekérvényesítő ereje, stb, stb). 

Nagyon sokszor van az, hogy mindenki mindent mindig elmondott meetingeken, még akár valahova fel is írták, és still le van szarva, csak a külön pénzért hívott külső "szakértőknek" hisznek (nem rád vonatkozik az idézőjelezés: nem minden ilyennek van tényleges szakértelme a StackOverflow-backed tudásán kívül).

És kifelejted azt a faktort is, hogy az üzemeltetők - de a többi szereplő is - inkább arra megy, hogy ne baszogassák őket, mert mondjuk családjuk van, és egy leállás miatt - hiába mondanak bármit - kidobhatják őket a cégtől, mert csak (a leállás jogi szempontból ráhúzható, hogy munkakörbeli hiba, aztán majd a bíroságon magyarázkodhatsz). Szóval, az üzemeltetőket felesleges szarozni. Értem, hogy miért gondolod rossznak azt a metodológiát, ahogy az üzemeltetés zajlik sokszor, és pusztán szakmai szempontból igazad is van. Azonban bármi van egy cégnél, az sosem csak egy szempontból létező dolgok.

Szóval, tök jó, hogy te külsős tanácsadóként lelkesen vered az üzemeltetők egyik végtagjával a csalánt, mert a nap végén ez nem neked fog fájni. De ne várd azt, hogy bárki üzemeltető lelkesen és szívesen fogadja a tanácsaidat, ha gyakorlatilag süt a lenézés és a fensőbbségérzés minden egyes szavadból. És ez teljes mértékben független attól, hogy ténylegesen igazad van-e vagy sem.

Blog | @hron84

valahol egy üzemeltetőmaci most mérgesen toppant a lábával 

via @snq-

FYI: Rajtad kivül senki nem hívta a swap nélkül üzemeltetőket balfasznak.

Ja, csak közben kiderült, hogy a normális architektúra része a swap (keress rá). Ebből logikailag az következik, hogy az az architektúra, ahol nincs swap, az nem normális. Ebből meg következik az, hogy a jelenlegi üzemeltetési élvonal nem normális, mert jellemzően nincs swap. A balfaszt valóban én hoztam be, de felőlem akkor nevezzük úgy az üzemeltetés élvonalát, hogy nem normális. Ez viszont felvet kérdéseket, hogy kinek mi a normalitás: az, amiről tudja, hogy szar vagy az, amiről tudjuk, hogy élvonal?

Szóval, az üzemeltetőket felesleges szarozni.

Akkor maradjon minden szar. Nekem nem fáj, csak aztán ne sírják tele a fórumokat és a Balatont azzal, hogy minden szar és miért nem lesz jobb. De telesírják és közben tevékenyen konzerválják a szart, aztán meg ki vannak akadva, ha más is azt mondja a szarukra, hogy szar. :D

És kifelejted azt a faktort is, hogy az üzemeltetők - de a többi szereplő is - inkább arra megy, hogy ne baszogassák őket, mert mondjuk családjuk van, és egy leállás miatt - hiába mondanak bármit - kidobhatják őket a cégtől, mert csak (a leállás jogi szempontból ráhúzható, hogy munkakörbeli hiba, aztán majd a bíroságon magyarázkodhatsz).

Namost, ahol te leírod, hogy ehhez kell plusz erőforrás, nem kapod meg, összeomlik és ezért téged meghurcolnak, horribile dictu, kirúgnak, onnan jobb is, ha eljössz. Ha nem jössz el, sőt, megoldod okosba', akkor meg fenntartod a szart, de akkor ne sírj, hogy szar.

Állandóan arról írsz, hogy minden szar, és az üzemeltetők sírnak. Ha te ezt látod magad körül, az nem minket jellemez, hanem téged.

Én nem sírtam, sem Gelei, sem Zeller, sem hrgy84, sem senki azon, hogy meghalunk a swap okozta load miatt, vagy akármi. Konkrétan ennek a szálnak a nyitása ez volt, felhívnám a figyelmedet a végén lévő mosolykára:

"Szerver eseten jo ha van nemi swap, mert a leakelo programok altal foglalt, de fel nem szabaditott memoriaja oda megy egy ido utan, igy lassabban telik meg a memoria. Valamint a leakeles tenyet is hamarabb lehet eszrevenni igy. Es 4-16 GB disk olcsobb, mint 4-16 GB RAM, plane, ha ezer geprol beszelunk, az ujrainditas meg az uzlet szerint az ordogtol valo. :-) "

Itt egyedül te vészmadárkodsz, mert mindent egy kalap alatt akarsz kezelni.

Hidd el, tisztában vagyunk vele, hogy vannak olyan rendszerek, amelyek nem igénylik a swap-et, így oda mi sem teszünk.

Viszont képzeld, léteznek olyan rendszerek, ahol a swap használatának több az előnye, mint a hátránya.

Nem az a szakember, aki egyik vagy másik mellett tör lándzsát, hanem az, aki meg tudja különböztetni egymástól a kettőt.

De tudod mit? Mondok durvábbat. Van ahova az ember Linuxot, és van ahova az ember Windowst rak. Ez ugyanis nem hitkérdés, hanem annak felismerése, hogy adott feladatra a megfelelő eszközt használjunk. A swap is egy ilyen eszköz. Egy standalone általános jellegű linux szerver alatt nem árt, ha van egy kicsi, mert ahogy te is írtad, mindig van olyan program, ami leakel egy kicsit. Ez lehet swapfile is, hogy dinamikusan lehessen beállítani a szükséges méretet, de lehet külön kötet is, a lehetőségek végtelenek...

A lényeg, hogy ne légy vaskalapos, és ne sírj amiatt, mert mások olyan dolgokban is megtalálják a jót, aminek szerinted nem szabadna léteznie. :-)

Vannak megoldások, amiktől egy "elfáradt" valaki (pl fejlesztő, de bárki lehetne) triggerelődni tud, az egyik ilyen lehet, ha csak elkap egy félmondatot, hogy valami memory leak-es probléma van, de egy kolléga megoldja és swap-et csinál. :) Én is erre kaptam fel a fejemet, és teljesen átérzem, amiket Frankó ír, és hogy miért gondolja így. Nem tudom Frankót vaskalaposnak látni az alapján, amit itt írt, csak inkább Ő is átgondolta már párszor életében, hogy miért nem lett inkább pék, és ismer már jelenségeket. :)

De végül jó olvasni az érveket a swap mellett is, érthető, hogy jól jöhet, ha egy kiegyensúlyozott rendszert szeretnénk, ami nehezebben megbillenthető. Memory leak ellen semmiképpen nem megoldás, de van olyan rendszer, amit egy kicsit hibatűrőbbé (ha ez a jó szó) tehet. (nyilván nem csak mikroszervizek, meg kubernetes létezik) De ebben is kb mindenki egyetértett.

De senki nem a lemaradast vitatja, csak azt probaljak meg neked elmagyarazni (megint), hogy nemcsak zoldmezos projekt van a vilagon. A nullarol elkezdve en is tudok kibaszott jo megoldasokat osszerakni, csak egyreszt nem lehet mindent a nullarol ujrairni, masreszt ami ma state-of-the-art, az jovore mar egy elavult fostenger lesz, amit csakis fogyatekosok rakhattak ossze, mert akkor eppen valami mas szipi-szupi megoldas lesz a meno.

De senki nem a lemaradast vitatja, csak azt probaljak meg neked elmagyarazni (megint), hogy nemcsak zoldmezos projekt van a vilagon.

A barnamezős nem azért barnamezős, mert feltétlen szarnak kell lennie, hanem azért, mert van alapja. A 20+ éves rendszerekből is lehet jót építeni, csak el kell engedni hozzá a 20+ éves hiedelmeket. A probléma nem a sok éves projekt, hanem a projekten dolgozók sok éves lemaradása, mert megálltak ott a szakmai fejlődésben, amikor a projekt indult.

Az egy nagyon nem optimális helyzet, ha a leak-re az a megoldás, hogy megpróbáljuk elfedni, érdemesebb lenne kijavítani, bejelenteni, lecserélni, vagy bármit. (az ilyen minőségű programokból is kevesebb lenne, ha ez kevesebbszer lenne elfogadott)

Ha fentről jön, hogy pl "de ezt senki nem fizeti ki" vagy veled akarják megoldatni mások hibáját és el kell fedni a problémákat: azaz be van ütemezve az éjszakai vagy heti egy újraindítás: na ez az egyik legfusztrálóbb dolog a világon, fejlesztőként, userként, és szerintem üzemeltetőként is. Újraindítás előtt meg már be van állva az egész, swappel 1000-rel, vagy próbál valami takarítani. Tehát egyet tudok érteni azzal, hogy emiatt nem kell swap (hogy mi van, ha valami sz*r), javítsák ki azt a programot. Értem azt, hogy a gyakorlatban lehet szituáció, ahol ez nem működik, de az nem jó, ha alap hozzáállás, hogy egy program leakel.

"Az egy nagyon nem optimális helyzet, ha a leak-re az a megoldás, hogy megpróbáljuk elfedni, érdemesebb lenne kijavítani, bejelenteni, lecserélni, vagy bármit."

Itt nem egy calc.exe -rol van szo, hanem olyan szoftver elemekrol, amelyeknek a fejlesztese sok szaz millio, es a teszteles, elesbe allas kulon tortenet.

Nehez ervelni amellet, hogy megeri tobb ember tobb heti munkajat meg nehany csaladi haz arat kiadni azert, hogy megsporoljak mondjuk 50-100GB lemezteruletet.

 

"Újraindítás előtt meg már be van állva az egész, swappel 1000-rel, vagy próbál valami takarítani."

Dehogy! A monitor folyamatosan figyeli a gepej swap allapotat, es jelez, ha valamelyik gepen gyulik a szemet. Igy meg azelott be lehet tervezni a szemetelo gep vagy process ujrainditasat, hogy barmi lassulas lenne, mert nem varjuk meg, hogy telitodjon a swap, vagyis, hogy a gep fizikai memoria nyomorodjon meg a leakelo process miatt.

A swap igy pont, hogy az uzembiztonsagot noveli, ugyanis egy jol viselkedo gepen gyakorlatilag mindig ures, (nehany KB, nehany MB mocorog benne a monitor szerint) ami nem okoz gondot, viszont ha leakelni kezd egy processz, akkor szepen oda gyulik a szemet, tisztan tartva a memoriat, igy idot adva nekunk, hogy betervezhessuk a javitas idejet.

Fejlesztőként párszor belefutottam ilyen helyzetbe, és fájdalmas tud lenni, hogy sokszor inkább a “taknyolás” megy, fejlesztői oldalról is, ahelyett, hogy valaki elindítana egy profilert, és megnézné, hogy hol tölti az alkalmazás a memóriát. Sajnos előfordult az is, hogy mivel egy heti reboot és egy kicsi kellemetlenség néha megoldotta a kérdést, ezért senki nem akart azért fizetni, hogy valami rendesen javítva legyen. Fentebbről nem is értették esetleg, hogy mi a probléma. Calc.exe-ről én sem beszélek, de annyi befektetéssel, amit a gányolás elvisz X idő alatt, sokszor véglegesen lehet javítani valamit. Persze ezt úgy mondom, hogy javítottam már ilyen kérdéseket, meg olyan is volt, amikor nem lehetett, ahogy Te is írod. (de lehetett volna akár)

Igy van ahogy mondod. A javitas sincs ingyen, de a hibaval valo egyutteles se. Tobbnyire az a jo modszer, hogy szorgalmazzuk a javitast, de addig is megteszunk mindent, hogy a hibak ne okozzanak gondot.

A nagy hibak mar az UAT, vagy a perf tesztek alatt elojonnek, es azok ertelemszeruen javitva lesznek, de a kisebb leakek, amelyek mondjuk egy honap alatt elvisznek 50-100 MB memoria tartalmat, azok csak a kovetkezo frissitesben lesznek javitva. Amiben persze lesz helyette egy masik minor hiba, hehe. Evente egy giga swap telitodes nem nagy para, lenyeg, hogy tudjunk rola. :-)

Tobbnyire az a jo modszer, hogy szorgalmazzuk a javitast, de addig is megteszunk mindent, hogy a hibak ne okozzanak gondot.

Igen, egy idő után nehéz mindent összetartani, próbálni kell kijavítani. :) De többféle leak is lehet, pl handler elfogy.

Szerk: tehát csak azt akartam írni, de nem fejtettem ki eléggé (a handlerekkel), hogy a memória leak csak egyféle probléma lehet, de ugyanilyen módon még lehetnek problémák, amit a swap nem old meg. szálkezeléssel, egyéb erőforrásokkal kapcsolatban, valami queue betelik stb.. a végén csak megáll/beáll valami.

ahelyett, hogy valaki elindítana egy profilert, és megnézné, hogy hol tölti az alkalmazás a memóriát

Jah, csak a valosag neha nem ilyen baratsagos. En most tudtam lezarni egy tobb eves bugot, ahol a profiler persze egy perc alatt megmondta, hol a leak. Egy vendor altal hozott interop library-ben. Egy olyan termekhez, amit a vendor se nagyon tamogat mar, csak lelegeztetogepen tart. Fasza. Szerinted mennyi ido volt, mire jott bugfix? Egy-ket evig siman ment az ujrainditgatos moka, mert nem volt jobb.

amelyeknek a fejlesztese sok szaz millio, es a teszteles, elesbe allas kulon tortenet

Álljunk meg már baszki, egy sok száz millióba kerülő szoftvernél lesz memória, ha kérsz. Döntsd már el, hogy fillérbaszó templom egereinek üzemeltetsz vagy sokszázmilliós projekten szopsz azzal, hogy swap kell, mert drága a memória.

Nehez ervelni amellet, hogy megeri tobb ember tobb heti munkajat meg nehany csaladi haz arat kiadni azert, hogy megsporoljak mondjuk 50-100GB lemezteruletet.

50-100 GB memória az még a drágább fajtából is 100 ezer forint alatt megáll, ne gyere itt néhány családi ház árával.

A swap igy pont, hogy az uzembiztonsagot noveli, ugyanis egy jol viselkedo gepen gyakorlatilag mindig ures, (nehany KB, nehany MB mocorog benne a monitor szerint) ami nem okoz gondot, viszont ha leakelni kezd egy processz, akkor szepen oda gyulik a szemet, tisztan tartva a memoriat, igy idot adva nekunk, hogy betervezhessuk a javitas idejet.

Ez ugyanígy működik swap nélkül is.

A disk olcsobb. Minek pazaroljam a memoriat, ha nem muszaj?

Pedig pont pazarlod, hagyod hogy beterítse egy szoftver, ahelyett, hogy korlátok közé zárnád a leak forrását és megvédenéd a többi processzt a hatásától. A swap nem a pazarlást előzi vagy akadályozza meg, hanem maximum az újraindítások gyakoriságát befolyásolja... plusz, ahogy írtam már, behoz egy csomó problémát, főleg cluster node esetén, ahol egy agonizáló node jelentősen degradálja a cluster sebességét, amelyek további problémákat okoznak, kiélezett helyzetben pedig elveszted a (gyors) helyreállítás lehetőségét is. Egy OOMKill szinte azonnal megvan, különösebb agonizálás nélkül, a legtöbb cluster jobban lekezeli a halott node-ot, mint a lassú node-ot. Amikor elfogy a memória és a swap is jelentősen betelik, akkor az mindennek fáj azon a gépen és képtelen leszel gyors reakcióra, mert a gép nagyrészt azzal törődik hogy swap-ről ír és olvas. Hiába olcsóbb a disk, ha minimum százszor lassabb, mint a memória.

Ezek mind komoly üzemeltetési kockázatok, amire már rájöttek jobb helyeken, ezért swap jelenlétében el se indulnak szoftverek, kézzel kell felülbírálni, hogy bevállalod, de ezt már írtam.

Én nem beszéltem clusterről.

És igen, az újraindítások számát kényelmesen lecsökkenti a swap, mert ott elfér a memóriaszemét.

Mivel szemét, nem olvassa senki, ergo nincs performancia probléma.

A swap sosem telik be. Jóval korábban látjuk a monitorban, a közelgő problémát, így van időnk megelőzni azt.

Mindeközben a memória tiszta marad, mert a leakekből származó szutyok a swap -be hullik.

Mivel a memória tiszta, nincs OOM killer, mindenki boldog. Ennyi!

Kulcsszó: monitoring. Még most 2024-ben is találkozom rendszeresen olyan cégekkel, rendszerekkel, ahol a monitoring használhatatlan, hiányos, nem létezik.

Nem mindegy, hogy egyből OOMkill tesz rendet vagy van idő és lehetőség a normális beavatkozásra, netalán debugolásra. Egy normális architektúrában pont előny a swap léte. Egy védőhálót ad.

Offtopic:

Megnyugtatlak: Voltak / vannak jó helyek is, jó kollégák, jó szakemberek. Csak a rossz mindig 10x erősebben csapódik le - "hogyan NE csináljuk" esetei.
Panaszkodni mindig jólesik. Nem tagadhatom meg önmagam. :)

Véleményem szerint aki a Kubernetest nem bare metal használja alacsony késleltetésű, nagy terhelésű produktív rendszerben, az más disznóságokra is képes.

Véleményem szerint aki a Kubernetest nem bare metal használja alacsony késleltetésű, nagy terhelésű produktív rendszerben, az más disznóságokra is képes.

Nem tudom, hogy jön ide a bare metal a swap kapcsán, de megjegyzem, hogy a nagy felhős cégek mind virtualizált node-on futtatják a Kubernetes worker-t, és az alacsony késleltetésű, nagy terhelésű produktív rendszer. Szóval se a Kubernetes nem normális architektúra és az elérhető legjobb Kuberentes szolgáltatók is mindenféle disznóságra képesek... bezzeg, akinek van swap a szerverén, az mindenhez is ért...

A kernel se hulye, a swapba pont olyan memoriat fog kipakolni amit regen hasznaltak. ha meg a leaket akkor azt mar senki nem fogja hasznalni, csak a process vegen fogja a kernel eldobni.

Lehet persze jönni ezzel a szegény ember memóriájával, de a memória olcsó, ha arra se telik, ott más komoly gondok is vannak, a swap "szükségessége" egy tünete ennek.

nyilvan hulyek vagyunk es erre nem gondoltunk!!! b.ssz.meg, telleg! rohanok is venni egy kazal memoriat! :(

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

A kernel se hulye, a swapba pont olyan memoriat fog kipakolni amit regen hasznaltak. ha meg a leaket akkor azt mar senki nem fogja hasznalni, csak a process vegen fogja a kernel eldobni.

A memory leak nem azt jelenti, hogy az nincs használva, azt jelenti, hogy nincs felszabadítva, lásd a láncolt listás leak esetén, ahol mindig újabb és újabb elemet tesz a lista végére és megtartja a teljes listát és azok adatait.

nyilvan hulyek vagyunk es erre nem gondoltunk!!! b.ssz.meg, telleg! rohanok is venni egy kazal memoriat! :(

Kellene, ahol a swap szóba kerül, ott az egy csomó meglévő problémára tüneti kezelés...

A swap nem csodaszer. Ha visszarangatod a ritkan hasznalt memoriat, az ellen nem ved. De az ilyen jo esellyel ugy is bent marad a memoriaban, mar ha nem sporolod ki a gepbol a memoriat. Hint: ne sporolj, es akkor nem lesz bajod.

Viszont azoktol a memoria szegmensektol amiket valoban nem olvas mar vissza a processz, mert nincs meg a rajuk mutato pointer, az szepen kiurul a rambol, kimegy a swapre, es bekesen alszik. A felszabadult memoriat meg hasznalhatja mas, ergo a felgyulemlett szemet nem okoz performancia problemat okozni azzal, hogy elfoglalja a helyet a hasznosabb, gyakrabban valtozo dolgok elol.

Szerkesztve: 2024. 05. 04., szo – 16:09

"A otthoni gépeteken ez hogy van?"

/, /boot/efi

oregon@home:~ $ cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 nvme1n1p2[0] nvme0n1p2[1]
1999739904 blocks super 1.2 [2/2] [UU]
bitmap: 10/15 pages [40KB], 65536KB chunk

unused devices: <none>
oregon@home:~ $ df | grep dev
/dev/md0p1      1,9T  1,5T  264G  86% /
tmpfs            63G  144K   63G   1% /dev/shm
/dev/nvme0n1p1  511M   41M  471M   8% /boot/efi

# /dev/nvme1n1p1  511M   41M  471M   8% /boot/efi

Három ilyen gépem van, három helyszín miatt.

Szerveren jobban vannak szeparálva a particiók.

 

 

Nálam nagyjából van egy `/` és a `/boot`, nagyjából 20-25 éve így van, egyszer nem fordult elő, hogy bármi miatt betelt volna, korábban viszont többször szoptam azzal, hogy a külön vett ez-vagy-az betelt, mert mégse annyi helyre volt szükség, mint amire gondoltam és másik volume meg ott volt majdnem üresen.

Egy darabig szórakoztam szerveren ZFS alapokon, aztán bejött a Kubernetes, egy worker node-on van egy `/` és egy `/boot`, aztán beosztja a Kubernetes, ha meg valahol szűk, akkor átpakolja máshova az adott pod-ot és nagyjából ez a jó pattern mindenféle könyv szerint is.

Mondjuk  /var meg /tmp nosuid,noexec,nodev mounttal azért egy támadó életét kellően meg tudja nehezíteni, úgyhogy ha "onnan nézzük", ezeket célszerű külön kezelni.

Sokat nem érsz ezekkel, a legtöbb támadás pont ezért shell script alapú vagy meghívható a bináris is ugyanígy indirekt, szóval a támadó úgy megy át ezeken, mint meleg kés a vajon, csak magadat szopatod adott esetben. Ami kockázatos, azt tedd konténerbe, onnan alapvetően nehéz kijönni és kellően biztonságos tud lenni...

Mondjuk úgy, hogy ebben több - veled ellentétben kifejezetten itsec területen dolgozó - szakember vélemény eltér.

"Ami kockázatos, azt tedd konténerbe, onnan alapvetően nehéz kijönni és kellően biztonságos tud lenni..."

Kivéve, ha el van bacarintva néhány olyan dolog, amire első körben nem gondolsz, hogy bajt okozhat... Oké, a rootless konténerek talán picit jobb irány, de ott megint más problémák, más, elkövethető hibák vannak...

Mondjuk úgy, hogy ebben több - veled ellentétben kifejezetten itsec területen dolgozó - szakember vélemény eltér.

Nem igazán tér el, ezek idejét múlt dolgok, mindegyik megkerülhető, pláne, ha nincs bináris vagy injektálsz binárist (lásd noexec ld-linux.so keresés), de a legtöbb támadás szimplán script alapú, ami ellen egyik se védett soha és a másik probléma, hogy hetekig tartó szopást tudsz a fejedre húzni. Van egy csomó egyéb dolog, ami _tényleg_ megoldás, de azok macerásabbak és több meló van velük, lásd SELinux és társai. Egy noexec a fájlrendszeren csak látszólagos biztonság, kipipálható item, de semmi hatása nincs a rendszer biztonságára, pótcselekvés.

Majd megmutatom néhánynak holnap, kezdődjön egy mosollyal a hetük :-D

Hajrá.

Egyébként a mindenki által írható területeken a noexec,nosuid,nodev kapcsán milyen "hetekig tartó szopást" tudsz való életből, normálisan összerakott alkalmazás/rendszer esetén mondani?

Több hibajegyem is volt ebből, változatos szoftverek és csomagok esetén, és akkor ilyen szopások tudnak lenni derült égből: https://www.elastic.co/guide/en/elasticsearch/reference/current/executa…

Ha nem találkoztál ilyennel, annak több oka van:

1, mégsem volt a szerveren noexec a mindenki által írható területeken,
2, kurva kevés szoftver futásával volt dolgod az ilyen szervereken,
3, kurva rég foglalkoztál ilyen dolgokkal,
4, esetleg mások megoldották a problémákat és hozzád már nem jutott el vagy kikapcsolták a tudtod nélkül.

Konkrétan volt időszak, amikor egy nyomorult Docker host nem indult el noexec /tmp esetén, olyan is, hogy a Debian saját maga nem tudott frissülni, Ubuntu pár éve szintén elhalt, mert az apt installer futtatott volna ezt-azt a /tmp könyvtárból, Gentoo same shit a /var/tmp kapcsán máig, és tudnám folytatni és egy csomó dobozos szoftver szintén alapoz erre. Desktop vonalon a Signal nem indult, a Discord szintén zenész, de biztos van sokkal több ezekből.

És hozzáteszem újra, hogy a noexec nem véd se a scriptek, se a sok egyéb módon meghívható binárisok ellen, ajánlott olvasnivaló, főleg mosolygóknak: https://book.hacktricks.xyz/linux-hardening/bypass-bash-restrictions/by…

Röviden: a noexec egy régóta meghaladott csökevény, amit el kellene végre felejteni és helyette olyan dolgokat használni, amelyek valóban védenek. A noexec pusztán egy hamis biztonságérzet.

Attól, hogy te okosabbnak tartod magad mindenkinél, meg hogy vannak rá példáid a trehány kódolás kapcsán, még nem lesz igazad. A noexec,nosuid,nodev kockázatot csökkentő intézkedés, senki sem mondta, hogy a bölcsek köve.
Ami meg nem megy miatta, azt ki kell kalapálni. (Néztem néhány tool-t, amit nálad szerintem sokkal több tudást birtokló, kifejezetten security-ben utazó cégek raktak össze, és érdekes módon mindegyik(!) jelezte azon a gépen, ahol ez nem így volt, hogy például a /tmp mount paramétereiből a fentiek hiányoznak...)

 

Attól, hogy te okosabbnak tartod magad mindenkinél, meg hogy vannak rá példáid a trehány kódolás kapcsán, még nem lesz igazad. A noexec,nosuid,nodev kockázatot csökkentő intézkedés, senki sem mondta, hogy a bölcsek köve.

Szépen belinkeltem, hogy miért nem csökkent kockázatot: kikerülhető, mégpedig könnyedén. Bekapcsolva csak magadat szopatod, a rosszarcúak úgy mennek rajta keresztül, mint meleg kés a vajon. Felmásolnak egy shell fájlt és a binárist, ami meghívható noexec esetén is a script-en keresztül, ami beolvassa a binárist a saját memóriájába a /proc/self/mem device-on keresztül, aztán memóriából elindítja a binárist és kész is vagyunk. Ezeregy demó van rá, ha érdekel részletesen.

Mit értél el a noexec használatával? Semmit, magadat szopattad.

Ami meg nem megy miatta, azt ki kell kalapálni.

A legjobb kikalapálás a Debian-ban volt, amelyik update előtt preExec kikapcsolta a noexec flag-et, letolta az update-et, aztán visszakapcsolta. Olyan, mint az a koton, ami mindig a farkadon van, kivéve amikor baszol. :D

(Néztem néhány tool-t, amit nálad szerintem sokkal több tudást birtokló, kifejezetten security-ben utazó cégek raktak össze, és érdekes módon mindegyik(!) jelezte azon a gépen, ahol ez nem így volt, hogy például a /tmp mount paramétereiből a fentiek hiányoznak...)

Ja, hogyne, én is találkoztam ilyenekkel, aztán meg jött az, hogy szarrá kell minden konfigurálni, a rosszarcú meg bejön és futtat, amit akar, merthogy tud. Ezek ilyen sok éves rutinok, a bejövő szarok pedig már rég meghaladták ezeket a sok éves rutinokat. Ha a fenti trükköt nem ismeri a security ember, az szégyen, ha meg a trükk ismeretében is veri az asztalt a noexec miatt, akkor nem csak szégyen, hanem felháborító szégyen.

De felőlem mindenki azzal szopatja magát, amivel akarja, csak azt tartsa fejben, hogy a noexec a valóságban nem véd az égvilágon semmitől, mármint a 2.6.39 kernel óta. A SELinux és társai megoldják, mert tudják korlátozni a /proc/self/mem írását, de gondolom azt nem használod, hanem hiszel a noexec működésében.

Legutoljára idén februárban nyünnyögtek a kernel listán erről, hogy 20 - azaz húsz - év elteltével kellene már valamit kezdeni, ha már több mint 7 - azaz hét - éve közkézen forog az exploit, de mindig az lesz a vége, hogy a user használja inkább SELinux és társait, mert a /proc/self/mem piszkálása miatt túl sok minden eltörne.

Szóval újra és röviden: a noexec semmi ellen nem véd kurva sok ideje. Aki meg 20 év alatt nem jött erre rá, az menjen inkább kukoricát kapálni és ne ossza az észt security területen.

"A legjobb kikalapálás a Debian-ban volt, amelyik update előtt preExec kikapcsolta a noexec flag-et, letolta az update-et, aztán visszakapcsolta."

Ez egyrészt ronda hack, másrészt ehhez _már_ uid=0 processz kell.

" A SELinux és társai megoldják, mert tudják korlátozni a /proc/self/mem írását, de gondolom azt nem használod, hanem hiszel a noexec működésében."

Írtam, hogy minden kockázatcsökkentő megoldás hasznos _lehet_. Sajnos a debijjány-származékoknál a SELinux fekete bárány, úgyhogy ott csak Apparmor van, ahol viszont van SELinux, ott teszten permissive, élesben enforced, ahogy azt kell, szükség szerint egyedi (teszten kiderült) módosításokkal/extra beállításokkal.
Lehet, hogy te még nem láttál jelenleg is aktívan használt exploitokat, amik a noexec mounton elhasalnak, én igen.  És mint írtam, _ha_ lassítható, nehezíthető a támadó dolga, akkor hasznos minden eszköz, ami nem okoz nagyobb üzemeltetési kockázatot. És nem, az xyz alkalmazás döglése, ha a default TEMP/TMP környezeti változóban megadott könyvtárból futtatna bármit is az nem üzemeltetési kockázat, hanem konfigurációs hiba, amit kezelni kell (olyan könyvtárat adni oda neki erre a célra, amibe nem írhat boldog-boldogtalan bármit is)

"Szóval újra és röviden: a noexec semmi ellen nem véd kurva sok ideje. Aki meg 20 év alatt nem jött erre rá, az menjen inkább kukoricát kapálni és ne ossza az észt security területen."

Ezt majd továbbítom az illetékeseknek, hogy vegyenek fel téged, mint extrém nagy tudású szakembert a meglévő embereik helyére.

Ez egyrészt ronda hack, másrészt ehhez _már_ uid=0 processz kell.

Oszt? Ezért nincs alapból ilyen beállítva a legtöbb disztribúcióban, mert egyrészt csak hibákat okoz, másrészt jó ideje nem véd semmi ellen és ezt valahogy tudják a disztribúciókat összeállító emberek.

Írtam, hogy minden kockázatcsökkentő megoldás hasznos _lehet_.

Nem, nem _lehet_ hasznos, hanem _nem_ csökkenti a kockázatot immár 20 - azaz húsz - éve, ez egy ún. hamis biztonságérzet. Akadályozza az értelmes használatát az adott rendszernek - lásd példák, és egyáltalán nem akadályozza a binárisok futtatásának a lehetőségét - lásd példák.

Lehet, hogy te még nem láttál jelenleg is aktívan használt exploitokat, amik a noexec mounton elhasalnak, én igen.

Egyrészt igen, kérlek, mutass ilyenekeet, amik most aktívak és nem az utóbbi hét-tíz évben használt nyolc soros shell scripten keresztül kerülik meg a noexec-et. Másrészt a SELinux és társai is megfogták volna, ha lennének. Gondolom nincsenek, mert akkor a noexec nem lenne, mivelhogy értelmét veszti SELinux és társai környezetében.

Ezt majd továbbítom az illetékeseknek, hogy vegyenek fel téged, mint extrém nagy tudású szakembert a meglévő embereik helyére.

Várom a hívásukat, de alapvetően nem érek rá, van elég dolgom idén már. Ellenben kibaszhatnák azokat, akik a noexec-et erőltetik, mert semmi értelme és ez közismert, sőt, már hét éve is az volt a mondás (lásd előzőleg linkelt exploit utolsó előtti bekezdése), hogy SELinux és társai a megoldás, a noexec felejtős, mert nem véd.

Újra röviden: a noexec nem véd, a SELinux és társai igen, tessék végre elfelejtenia noexec és nosuid használatát, ezek 20 évvel ezelőttig valamennyire hasznosak voltak, azóta nem igazán van hasznuk és helyette olyan védelmet használni, amelyek valóban védenek.

"Oszt? Ezért nincs alapból ilyen beállítva a legtöbb disztribúcióban, mert egyrészt csak hibákat okoz, másrészt jó ideje nem véd semmi ellen és ezt valahogy tudják a disztribúciókat összeállító emberek."

Azaz ha már van UID=0 processzed, akkor ki/be kapcsolgatható. Ez rendben is van. De amíg nincs, _és_ a támadó robotja által használt n+1 darab jogosultságemelésre szolgáló exploitja elhasal rajta, addig teljesen jó arra, hogy lassítsa/nehezítse a dolgát.

"Másrészt a SELinux és társai is megfogták volna, ha lennének. "

Debian származékokon alapvetően nincs SELinux - fel lehet kalapálni, igen, de kellően méretes szívásokba lehet vele belefutni, pláne 3rd party repókkal...

"SELinux és társai a megoldás, a noexec felejtős, mert nem véd."

Egyik sem a bölcsek köve, ez az egyik. A másik, hogy soroljam, hány naaagy gyári motyó install guide-ja kezdi azzal, hogy setenforce=0, és kapcsold ki teljesen? És hány ilyenhez raktam össze (mert a gyártó sz@rt rá) olyan selinux szabálybázist, amivel működött a motyó rendesen? 
A harmadik meg az, hogy _bármi_ ami lassítja, nehezíti a támadó dolgát, _és_ normálisan konfigurált rendszerben, normálisan felépített, kialakított alkalmazások esetén nem okoz működési zavart, az csökkenti a sikeres támadás kockázatát.
 

Azaz ha már van UID=0 processzed, akkor ki/be kapcsolgatható. Ez rendben is van.

Lófaszt van rendben, megszakad a processz, aztán ott marad noexec nélkül a /tmp. Másrészt milyen megoldás az, hogy kinyit egy "nagykaput" az update idejére?

De amíg nincs, _és_ a támadó robotja által használt n+1 darab jogosultságemelésre szolgáló exploitja elhasal rajta, addig teljesen jó arra, hogy lassítsa/nehezítse a dolgát.

Nem lassítja meg nehezíti, baszki, elmegy mellette, mintha ott se lenne. Nem az van, hogy noexec esetén 100 perc, noexec nélkül 0 perc a törés, hanem mindkét esetben 0 perc a bináris futtatásának lehetősége, mintha a noexec ott se lenne. Semmit nem lassít a noexec flag a 2.6.39 kernel óta, az meg nem ma jött ki.

Debian származékokon alapvetően nincs SELinux - fel lehet kalapálni, igen, de kellően méretes szívásokba lehet vele belefutni, pláne 3rd party repókkal...

Mondom SELinux és társai.

Egyik sem a bölcsek köve, ez az egyik.

Leírom lassan: ha nincs SELinux és társai használva, akkor a noexec semmi ellen nem véd, megkerüli minden, mert meg lehet kerülni és meg is kerülik, az első megkerülő exploit dokumentációja 7 - azaz hét - éve arról ír, hogy hagyd a picsába a noexec-et, semmire se jó, használj helyette SELinux és társait. Ezt követően, ha van SELinux és társai, akkor meg semmi értelme a fájlrendszerre a noexec flagnek, mert SELinux és társai tudják ezt per process, per group, per directory is állítani.

Aki az utóbbi években noexec-et akar fájlrendszerre, hogy az majd véd bármit is, annak nulla kurrens security ismerete van, amit tud, az több mint 10 éves tudás. Nem mondom, el lehet karcolni a piacon 10 éves tudással is, csak néha pofára lehet esni, amikor kiderül az elavult tudás a területen.

"

Azaz ha már van UID=0 processzed, akkor ki/be kapcsolgatható. Ez rendben is van.

Lófaszt van rendben, megszakad a processz, aztán ott marad noexec nélkül a /tmp. Másrészt milyen megoldás az, hogy kinyit egy "nagykaput" az update idejére?"

Persze, hogy nincs rendben, mert baromság, botrányosan ronda taknyolás a csomaggányoló részéről (maintainert nem mondanám rá, ahogy anno az OpenSSL csomag esetében is nagyszerű dolgot alkotó illetőre sem...).
A "rendben van"-t úgy értettem, hogy ha már van a felügyeletem alatt olyan processz, ami UID=0, akkor rendben van, hogy remount bármi-bárhogy, mert már nem az a cél, hogy jogosultsági szintet növeljek, vagy oldalazva másik identitást vegyek fel.

Hiába írod le 123-szor, hogy minden exploit elmegy a noexec-es mindenki által írható /tmp mellett, az a te _véleményed_ lesz - amit meg én láttam, az meg az én tapasztalatom. Robotizált támadás esetén minden kiskapu, amit bezársz, hasznos. Ha célzott a támadás, akkor csak a csípőfogó és a méteres vasbeton kocka ad igazi védelmet :-)

Persze, hogy nincs rendben, mert baromság, botrányosan ronda taknyolás a csomaggányoló részéről (maintainert nem mondanám rá, ahogy anno az OpenSSL csomag esetében is nagyszerű dolgot alkotó illetőre sem...).

Ez ugye maga a Debian/Gentoo/Whatever disztribúció update processze. Nem a csomag, tehát nincs csomaggányoló, disztribúciógányoló van, illetve jobban mondva a látszatbiztonságra törekvők miatti workaround.

Hiába írod le 123-szor, hogy minden exploit elmegy a noexec-es mindenki által írható /tmp mellett, az a te _véleményed_ lesz - amit meg én láttam, az meg az én tapasztalatom.

Nem, nem az én véleményem, hanem ez a security szakmai konszenzus évek óta, hogy 2.6.39 verzió óta ott egy nagykapu a kernelben a noexec megkerülése kapcsán, amire minimum hét éve van pár soros publikus exploit és

1, használod a noexec-et, amin keresztülgyalogol az összes ma aktív exploit,
2, SELinux és társai megfogják, de akkor nem kell noexec, mert nem használható SELinux és társai esetén értelmesen.

Az 1, irány azt jelenti, hogy évek óta tudatlanságból szarsz a rendszered biztonságára, mert nem használsz SELinux és társait, amelyek meg tudják fogni az utóbb évek támadásait.

A 2, irány azt jelenti, hogy nincs noexec használva a rendszerben, helyette SELinux és társai vannak, tehát nem mondod, hogy legyen noexec, mert tudod, hogy semmit nem ér.

Mivel szerinted kell noexec, az azt jelenti, hogy a rendszered az utóbbi évek támadásaival szemben sebezhető - innen is gratulálok a security team munkájához, gondolom most is mosolyognak. Azt remélem, hogy te valami szakmailag 10 évvel ezelőtt megrekedt vezetőféle vagy, aki nem pofázik bele a mindennapi operatív dolgokba és hagyja dolgozni a szakembereket, akik követik a friss dolgokat, mert te minden jel szerint egy évtizede nagyjából nem követed... ha pedig benne vagy a napi melóban, akkor most kellene abbahagynod, mert túl régi tudásod van a területen.

Akit érdekel - téged gondolom nem, mert volt lehetőséged utánanézni, de leszartad - itt van a legutóbbi thread a téma kapcsán, ami szintén elhalt: https://lore.kernel.org/lkml/202402261650.DE0601F01@keescook/T/

Afterwards exploits appeared started causing drama like [1]. The
/proc/*/mem exploits can be rather sophisticated like [2] which
installed an arbitrary payload from noexec storage into a running
process then exec'd it, which itself could include an ELF loader
to run arbitrary code off noexec storage.

A hivatkozott dráma is tanulságos olvasnivaló, 12 éves sztori, azóta van amúgy kihasználható exploit: https://lwn.net/Articles/476947/

Szóval aki még olvassa a szálat: ne használj noexec-et, semmire nem jó évek óta. Használj SELinux és társait, azok valóban védenek.

"Ez ugye maga a Debian/Gentoo/Whatever disztribúció update processze."

Ami szembe megy a régi alapvetéssel, hogy mindenki által írható területről nem futtatunk semmit.

"a látszatbiztonságra törekvők miatti workaround."

Szóltál nekik, hogy inkább a SELinuxot használják? Oh, wait... A SeLinux alapból nincs ott a Debian és származékain... De ha AppArmor-ral megmutatod, hogy hogyan legyen a /tmp alatti területen lévő bármi futtathatósága megakadályozva, akkor hajrá, és szerintem többen megköszönik neked :)

"1, használod a noexec-et, amin keresztülgyalogol az összes ma aktív exploit,
2, SELinux és társai megfogják, de akkor nem kell noexec, mert nem használható SELinux és társai esetén értelmesen."

Az "és" miért nem képzelhető el szerinted?

"Mivel szerinted kell noexec, az azt jelenti, hogy a rendszered az utóbbi évek támadásaival szemben sebezhető"

Nem mondtam, hogy más módszerek nincsenek, azt mondom, hogy inkább két koton, mint egy sem :-D Sajnos a Denian alapú rendszerekben a SELinux másért fájdalmas (egyébként meg tudom érteni, miért nem default arrafelé...), kell hozzá reszelés, hogy minden jól működjön vele.
Apropo, ha ezek kifejezetten jól megoldják a noexec helyettesítését, _és_ ennyire jól védelmet nyújtanak, akkor miért nem ez a default beállításuk? Miért van az, hogy egy naprakész (gyártót nem mondok) audit eszköz nem azt mondja, hogy állítsd be a SELinux-ot/AppArmort így meg így, hanem azt, hogy a /tmp -n nincs noexec,nosuid,nodev - pótold. Erre kérek tőled egzakt és alátámasztott választ. (Szerinted ugyanis a T... meg mások is minimum 10 évvel le vannak maradva...)

VPN-ben is ssh meg https van használatban, sőt https-en működő webes API által küldött-fogadott xml-ben az érzékeny adatok aláírva/titkosítva szaladoznak...

 

Szóltál nekik, hogy inkább a SELinuxot használják?

Mondom SELinux és társai. Sokadszorra elfelejted, hogy nem csak SELinux van.

Oh, wait... A SeLinux alapból nincs ott a Debian és származékain... De ha AppArmor-ral megmutatod, hogy hogyan legyen a /tmp alatti területen lévő bármi futtathatósága megakadályozva, akkor hajrá, és szerintem többen megköszönik neked :)

A Mandatory Access Control alatt találod meg, egyszerűen megvonod az 'x' jogot globálisan onnan, ahol nem akarod, hogy legyen. Kevéssé vagyok járatos AppArmor kapcsán, mert RHEL/CentOS vonalon mozgok, de bruttó hat perc dokumentáció olvasás után egy ilyennel futnék neki, aztán finomítanám, ha szükséges:


profile default /** {
  deny /tmp/** x,
}

A számlát hova küldhetem?

Az "és" miért nem képzelhető el szerinted?

Mert semmi értelme a "nem véd semmi ellen" és a "védelmet ad" együttes használata, ha egy egészen kicsit is komolyan gondolod a dolgot és elgondolkodsz rajta. Az összes sikeres évek óta aktív exploit úgy indul, hogy megkerüli a noexec flag-et, ha van, ha nincs, mert ha nincs, akkor is ugyanúgy működik az exploit, mint amikor van, elég úgy megírni, hogy az exploit alapján futtat binárist.

Apropo, ha ezek kifejezetten jól megoldják a noexec helyettesítését, _és_ ennyire jól védelmet nyújtanak, akkor miért nem ez a default beállításuk?

Mert az esetek nagy részében feleslegesek, tehát minek szopassanak vele default. Ha szükségét érzed annak, hogy növeld a biztonsági fokozatot vagy az eddigiek szerint a biztonságérzetet, akkor majd keresel többé-kevésbé hozzáértőt, aki beállítja a helyi feltételeknek megfelelően.

Miért van az, hogy egy naprakész (gyártót nem mondok) audit eszköz nem azt mondja, hogy állítsd be a SELinux-ot/AppArmort így meg így, hanem azt, hogy a /tmp -n nincs noexec,nosuid,nodev - pótold.

Kérdezz rá náluk, hogy mifasznak és küldjed el a kernel listás linket meg a 12 éves első exploit dokumentációját, aztán írd ide a választ.

A security audit cégek és szoftvereik szimplán a scam és a biztosítás között vannak valahol, nagyrészt VSP - védd a segged papírral - célokkal, hogy ha bejutnak rosszarcúak, és abból balhé van, és a főnökség ledobja a szappant a földre, akkor nem a te segged az utolsó, amin nincs papír, hanem ott lesz egy audit cég, akit meg lehet baszni. Ezért minden faszságot is kérni fognak, de ha van kicsit is értelmes és naprakész security csapat, akkor ízekre szedik ezeket az audit papírokat, mert a nagy része idejétmúlt hülyeség és leginkább csak a normális munkát akadályozzák, a rosszarcúak meg adott esetben ki-be járnak olyan lyukakon, amelyek nincsenek lefedve.

Évek óta ott tartunk, hogy SELinux és társai nélkül nem érhető el alapszintű biztonság se.

Szerkesztve: 2024. 05. 04., szo – 16:30

Ezt neked kell tudni, hogy mi a jó neked, mi a felhasználásod. Érdemes szerintem átlag desktopnál az arany középútnál maradni: /boot / és /home külön. Ennyi. Az ilyen /var/log meg egyebek szerveren lehetnek fontosak, de még ott se jó ötlet 100 felé osztogatni.

A másik véglet se jó, ha minden egyben van, mert akkor meg egy esetleges újratelepítésnél sok adatot kell mozgatni vissza, mentésekből. A /home pl. külön van, akkor ott az adatok megmaradnak. Nálam Arch-on segít az is, hogy a /boot-ot is megtartom külön partíción telepítések között (az EFI partíció az UEFI boot miatt úgyis kötelező), így a bootloader nem is kell újratelepítenem, az bootolja az újratelepített rendszert is. a PARTUUID, ami meg van adva a systemd-bootnak, az nem változik, mert a / partíción a fájlrendszer formázása csak az UUID-t érinti, nem a PARTUUID-t.

Sajnos ez engem BSD-ken is marhára zavar, hogy alapértelmezetten 100 felé akarnak particionálni mindent, agyrém szinten. Érdemes a partícióidat rendesen kitalálni, csak egyszer kell őket megfelelőre megcsinálni, utána azt később beadagolhatod a telepítőnek.

Amit a Fedora csinálna alapértelmezetten, mármint amit írtál, azzal nincs gond. Swapnak, EFI partíciónak, rootnak külön kell legyen úgy is, a /home meg ajánlott, így csak a /var-t teszi feleslegesen külön partícióra (vagy logikai kötetre), de az még nem olyan nagy extra, hogy gond legyen. Azért ez mégse 100 felé van osztogatva. Így én átlag desktopon reálisnak mondnám.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

alapértelmezetten 100 felé akarnak particionálni mindent,

Akkor lehet főleg fájdalmas, ha fix partíció méreteket kell megadni (még a  hely is kevés), és utána macerás méretezgetni. BSD-n lehet hogy a ZFS is ilyen, de BTRFS alatt tök jók a subvolume-ok, mert max méretet adsz meg nekik (úgy látom, akár lehet mindegyik 1Tb, egy 1Tb-os winchesteren). Így inkább szempont lehet (hangosan gondolkodás), hogy mit szeretnél így limitálni, vagy esetleg mire szeretnéd a tömörítést (vagy egyéb feature-t) bekapcsolni, vagy a snapshot készítés lehet kérdés.

Azt néztem még, hogy btrfs alatt nem biztos, hogy működni fog a nosuid,noexec,nodev, meg kell majd nézni a mount opciókat. (de lehet, hogy ez egy régi doksi: https://www.debian.org/doc/manuals/securing-debian-manual/ch04s10.en.ht…)

Köszi szépen a tippeket, most így alakítottam ki, /, /home, /var, /tmp külön subvolume, egy titkosított volume-on minden.

A swap-ot akár egy külön készülékre is lehet tenni, hogy ne versenyezzen a mindenmással. Egyébként azért érdemes swap-et használni, hogy az épp nem aktív programok adatait legyen hová kitenni, hogy annál is több ram maradjon diszk-cache-nek.

Eddig még senki nem írta ami furi. Nekem alap, hogy lvm particionálást használok. Amióta megismertem az előnyeit nem mondanék le a rugalmasságáról a hagyományos particiókezeléshez képest! Szóval mindegy hányfelé particionálsz, de szerintem azt lvm segítségével tedd!

Igen. Nagyon sokat fejlődött az utóbbi időben a támogatottsága. A particiók átméretezése, snapsotok készítése,stb sokkal könnyebb az lvm segítségével, mint a hagyományos particiós tábláknál. 

Szerk. Ami kimaradt:

- ezt találtam a fedora oldalán: https://docs.fedoraproject.org/en-US/fedora/f36/install-guide/install/I…

- fontos, hogy az efi/boot partició nem lehet lvm. Legalábbis legjobb tudásom szerint nem támogatott.

Ja, végül is az LVM erre van kitalálva. Bár nem elengedhetetlen, ha egyszer ismered az igényeidet, és megfelelő méretű partíciókat hozol létre, akkor nem kell rugalmasság, nem fogsz kifutni belőle. Én így járok már el vagy 20 éve, egyszer particionálok egy lemezt, tipikusan mikor új (akár külön vettem, akár új gépben érkezik), és többet nem nyúlok hozzá. Maximum régebben nyúltam, de akkor is csak annyit, ha valami retró, legacy, alternatív OS-t telepítettem, akkor az egyik adatpartíciót beáldozva átformáztam az adott OS fájlrendszerére, de ilyenkor sem volt újraparticionálás, nem kellett pakolgatni, meg átméretezgetni.

Sűrűt átformázgatni, átparticionálni maximum ilyen pendrive gyanánt használt, külső SSD-ket szoktam csak. Vagy ha van egy régi gépből kiselejtezett, de még jó meghajtó, akkor azt néha befogom külső adapterrel külső meghajtónak adatot menteni, archiválni, akkor van még néha az, hogy letúrom róla a régi rendszerpatíciókat és megy fel a helyére egy LUKS partíció, amin ext4 fájlrendszer van, és ilyenkor az egész meghajtó egyben van particionálva.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

a titkosításnak szerintem eleve ~csak desktopon van értelme, ott pedig mindent is (~full diszk titkosítás) titkosítani 'kell' különben érhetnek meglepetések (swap/hybernálás/tmp/core dump/cache) - ahogy ezt már többen kifejtették...

 

A külön partíciók szépen hangzanak elméletben, de a gyakorlatban leginkább csak téged szivatnak - főleg egy 'kicsi' disk esetén.

Szerverek esetében még lehet értelme, de desktopnál?!

(a noexec, nosuid mountolás is csak a 'jólnevelt' processzeket korlátozza,

egy hacker ha már ott van a diszken, akkor átlalában már ő nyert -> game over.)

 

* /home  különválasztása esetén az adataid akár egy teljes újratelepítést / OS váltást is kibírnak... Szóval - megfelelően nagy diszk esetén - ennek akár lehet is értelme.

* a /boot és /boot/uefi szintén alapból külön van, többek között azért, mert ezeket *nem lehet/érdemes titkosítani.

* swap - kérdése eléggé megosztó, többen abban a hitben élnek, ohgy sok RAM esetén erre nincs szükség... Szerintem van ;)

Hogy mekkora legyen, és kell-e hogy külön partíció vagy elég a swap file -  az sokmindentől is függ (pl hibernálás)

 

Szóval összességében egy desktop gép particionálását túlbonyolítani teljesen felesleges, sőt szerintem csak szivatod vele magad ;)

Köszi szépen a tanácsokat!

Most BTRFS-t használok, és annak a feature-eit kihasználva végül a /-t, /home, /var és /tmp került külön subvolume alá. Ha jól gondolom, akkor ez inkább azt jelenti, hogy végül egy partíciót használok + a btrfs subvolume feature-ét.

Már csak azt lenne jó tudni, hogy hogyan gondoljak a btrfs snapshot-okra. Lehet, hogy a /-ből elég így csinálni, és akkor arra vissza lehet állni.
(Itt egy másik szálban írtam pl, hogy milyen problémám volt még, a visszaállás lehet, hogy segített volna: https://hup.hu/node/185082)
A /var-ban és a /home-ban változó adatok vannak, azokkal nem jó ötlet visszaállni.
De ez már egy BTRFS kérdés, én meg lehet hogy hibásan vontam párhuzamot a particiók, és a subvolume-ok között.

"

(a noexec, nosuid mountolás is csak a 'jólnevelt' processzeket korlátozza,

egy hacker ha már ott van a diszken,"

nagyon nem mindegy, hogy hogyan tud bármi saját kódot végrehajtani, honnan tud adatot, információt elszipkázni, satöbbi. Ha célzott a támadás, és van megfelelő idő a támadó oldalán, akkor idővel rá fog jönni, hogy ezek miatt nem megy az explot, de addig üzemeltetői oldalon van lehetőséged a támadás okozta anomáliákat észlelni, és a támadást elhárítani, vagy a hatását csökkenteni. Ha meg nem célzott, hanem "vak tyúk is talál..." alapon támad egy automata, akkor az nem fog azzal foglalkozni, hogy miért nem sikerült az exploitot életre lehelni, menni fog tovább, más támadható rendszerek felé.

Ha már van lokális accountja, és oda be is jutott valamilyen csatornán, akkor rá tud nézni a /etc/fstab-ra vagy épp a /proc/mounts -ra, ez igaz, de oda el is kell jutnia.

Ja, a jól nevelt alkalmazásoknak semmilyen gondot nem okoz a mindenki által írható területeknek az ilyen mount opciója.

Lesz egy rakás kihasználhatatlan helyed, ha meg alulméretezed, és teleszalad az fs, akkor megszívod. Rugalmatlan. Ne ilyeneken járjon az eszed, amikor kint csicseregnek a madarak, csinosak a nők, és lehet RAID1-et csinálni, aminek több értelme van. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE