A parancssori előzmények törlése

Table of Content

Linux scriptek
Linux scriptek

A mega.nz-ről szóló cikkben volt egy parancs, aminél jeleztem, hogy komoly biztonsági rés, főleg, ha azt scriptben is használod. A mega-login ezazemail@cim.hu jelszó megoldásról van szó. Ha van mega tárhelyed, akkor lépj be ezzel. Majd nyomd meg a felfele nyilat. Jó esetben kiírja a teljes parancsot: mega-login ezazemail@cim.hu… Hm… ezt gondolom mindenki ismeri, mert így tudjuk a régebben begépelt parancsokat előhozni. Mivel mindenki ismeri, így ha leül a gépedhez, majd végignézi a shell parancsok történetét, megtalálhat ilyen jelszóval ékesített sorokat is. Bár nagyon kényelmes ez a shell történelmi visszatekintés, de vannak esetek, amikor nem túl jó, ha más is belenéz a régebbi parancsaidba. Én úgy gondolom, időnként ezeket érdemes törölni. Itt is tartsunk mértéket, nem kell percenként törölni őket, és rettegni, hogy valaki az „ls” parancsot visszanézi és így a CIA megtudja, hogy mi van az adott könyvtárban! De ha olyan tevékenységet végeztél el, ami jelszót is tartalmaz a parancssorban (fenti példa) esetleg a parancs destruktív lehet (shred futtatása minden fájlon ./*.* és ha azt másik könyvárban is így futtatod, mert visszalapozva a parancsok közt épp erre találtál…) akkor érdemes kitörölni a parancsok előzményét.

Előzmények törlése a history paranccsal

A legegyszerűbb megoldás, amihez nyúlhatsz, és bárhol működik, a

history -cw

Ez, bár egyszerű, de csak akkor tűnik el ténylegesen az előzmény, ha kilépsz a terminálból. Kis kellemetlenség, de már a kellő biztonságot megadja számodra.

Shell parancs, ami nem kerül be a history-ba

Sejthető, hogy a fenti probléma régóta fennáll. És a shell-ek készítői is tisztában vannak ezzel. Így a legtöbb shell-ben, terminálban működő megoldás, hogy a parancs elé egy space-t (szóközt) írsz, akkor jó eséllyel nem kerül bele a listába. Próbál ki, és már egyértelmű lesz számodra is. Ha nem így működne, azaz az a szóköz után írt parancs mégis belekerül a history-ba, vagy panaszkodna, hogy nincs ilyen parancs, akkor a környezeti változókat be kell állítani.

export HISTCONTROL=ignorespace

Ezt a bashrc, zshrc stb.-ba kell beírni, ha mindig ezt így szeretnéd.

Egy parancs törlése a listából

Bár szerintem nem éri meg ezzel foglalkozni, egyszerűbb az egész listát kitörölni, de megoldásként említeni illő. Add ki a history parancsot, amire kapsz egy sorszámozott listát. Abban keresd meg a törlendő parancs sorszámát és history -d sorszám megoldással már törölheted is.

Folyamatos törlés kilépéskor

Egy nagyon jó, és egyszerű megoldás, ha a .bashrc vagy a .zshrc kap egy plusz sort:

unset HISTFILE

Egyszerű megoldás, és hatékony.

Az összes fenti módszer alkalmazásának egyik problémája az, hogy csak az aktív munkamenetből törli el a múltat, azaz a jelenleg megnyitott terminálból. Ez azt jelenti, ha több terminálon különböző parancsok futnak, a ‘history’ parancs csak azt az előzményt törli, ahonnan ezt a parancsot futtatja. A többi terminál parancsai továbbra is elérhetők lesznek. Hm… mi pedig a múltat végképp el akarjuk törölni!

A megoldás már szerintem adja magát: a fájlt, amiben tárolja a régebbi parancsokat, le kell nullázni, azaz a .bash_history, vagy .zsh_history fájlt ki kellene üríteni. Erre több megoldás van, de én ezt szoktam használni:

cat /dev/null > ~/.bash_history

Ez nagyon hasznos megoldás, ha a fájl tartalmát el szeretnéd tüntetni, de maga a fájl meg kell, fontos, hogy megmaradjon. Bár elvileg nem jelent gondot, ha simán töröld a fájlt, de jobb, ha megszokjuk, hogy nem teszünk ilyent. A rendszerfájlok törölgetése nem túl egészséges, és nem kellene felvenni rossz szokásokat!

Ennél az a gond, hogy kiüríted, de a következő terminál parancsot már tárolja. Így valahogy ezt automatizálni kellene. Automatikus és időzített, periodikus? Rögvest a crontab jut az eszünkbe. A legtöbb rendszeren ezt használják, így univerzális megoldásnak ajánlhatom.

crontab -e

00 20 * * * cat /dev/null> ~/.bash_history

Az este nyolckor végzi el a feladatot. Ha más kell, mást is beállíthatsz. Ha nem vagy képben a cron témával, és nem megy fejből az időkódok beállítása, sok jó oldalt találsz,amivel legeneráltathatod a beállítást.

Az természetes, hogy csak a jelenleg bejelentkezett felhasználó előzményeit fogja törölni, nem az összes felhasználó adatait.

Miért nem ajánlatos törölni a parancsok előzményeit?

A legtöbbször elhangzott ellenérv, hogy egy kellemes szolgáltatást dobsz ki az ablakon, feleslegesen. Illetve az is ellenérv, hogy egy hosszabb parancsot nem kell begépelni újra, csak visszaléptetsz a sorban és már futtatható is. Az első ellenérvet rögvest elvethetjük, hiszen ha úgy állítod be a törlést, hogy az neked megfeleljen, akkor előbb használod a history által adott kényelmet, majd a törléssel megerősíted a géped biztonságát. Bár jellemzően nem gépelünk be sokszor jelszót, de ha egyszer igen, akkor már jobb a biztosabb módszer. A másik ellenérvet pedig már alapból nem veszem figyelembe. Ha egy parancs hosszú, és legalább párszor újrafelhasználásra kerül, akkor az script, vagy alias lesz. Így a history-ra nem lesz szükségem.

A linuxmint.hu oldalon kaptam egy másik megoldást kami911-től: echo -n "" > ~/.bash_history, ami hasonlóképp eltünteti a fájl tartalmát.

 

Arch Linux alatt, 2020. áprilisában teszteltem

Related Posts