Script avançat en Bash (bash + md5) per protegir 'alguna cosa' (+ Explicació detallada)

Fa uns dies els vaig parlar de FlatPremsa, Una aplicació web (CMS) mitjançant el qual poden tenir un bloc o alguna cosa semblant sense necessitat d'usar bases de dades, ni complicar-se molt 🙂

Bé, jo tinc en el meu portàtil XNUMX FlatPremsa per apunts personals, coses que no vull oblidar i per això els escric en aquesta bitàcola personal. Però, com diversos ja han de saber ... jo sóc una mica paranoic amb la seguretat, i, si és referent a la seguretat de MIS pensaments, no tenen idea de què tan paranoic puc arribar a ser 😀

Llavors em vaig enfrontar a el problema: Com usant FlatPress puc protegir tot el contingut de la mateixa?

Vaig pensar en diverses aplicacions que permeten xifrar dades, mes ... cap feia exactament el que desitjava, per això em vaig a la tasca de programar jo mateix el que volia.

Ara els mostraré un script que vaig fer, el qual fa el següent:

L'script està dissenyat per funcionar al KDE, Si no tenen KDE els quadres de diàleg no els apareixeran.

1. Mostra un quadre de diàleg preguntant si ets KZKG ^ Gaara, si pressiones NO es tanca el script, si pressiones SI continua tot normal.

2. Mostra un quadre de text preguntant quin és el password:

3. Si pressiones Cancel es tanca el script, ara ve un dels trucs de l'script 😉 ...

3.1. La lògica és que l'script compari el password que escrivim amb un que estigui predefinit dins el mateix script ja, i si els passwords concorden llavors segueix executant-se, i si els passwords no concorden doncs que aparegui un missatge d'error. El problema és que, si posem el password correcte dins de l'script així sense més, qualsevol que obri l'script amb un editor de text podria veure molt clarament el password correcte .. i això amics meus, és simplement una falla imperdonable 🙂

3.2. Per evitar posar el password així en text pla en l'script, jo vaig fer servir MD5. O sigui, a l'inici de l'script, jo vaig declarar que el password correcte és «2dac690b816a43e4fd9df5ee35e3790d«, I aquest és el MD5 de:«desdelinux«. ... No entenc res !! ... 😀

Detallem una mica més. Si jo ara escric en un arxiu (per exemple, ~ / Pass.txt) De text: desdelinux

Si en una terminal escric: md5sum ~ / pass.txt

Em tornarà: 2dac690b816a43e4fd9df5ee35e3790d sum

I ... com poden veure, aquesta primera columna que té munt de números i lletres sense ordre aparent, és idènticament igual a la que vaig posar més amunt, i és la que està en l'script declarada.

Bé, aquesta primera columna és el MD5 de desdelinux ;)

Si posen el següent els tornarà solament la 1ra columna, que és la que ens interessa: md5sum ~/pass.txt | awk '{print $1}'

4. Llavors, el funcionament de l'script en aquesta part en específic és:

4.1. L'script posarà el password que hagis escrit tu en un fitxer temporal anomenat temp.txt, I traurà el MD5 de l'contingut d'aquest arxiu mitjançant la comanda:

md5sum temp.txt | awk '{print $1}'

4.2. Si el MD5 de la contrasenya que acabes d'escriure NO és idènticament igual a què ell té definit (o sigui, que el que està escrit en l'script) es tancarà i donarà un error:

4.3. Si el password coincideix, perfecte ... l'script continua 😀

5. A l'coincidir el password, l'script farà una sèrie de passos, en el meu cas:

5.1. Entrarà a la carpeta / Home / shared / hosted / - » cd / home / shared / hosted /

5.2. La carpeta d'FlatPress es diu «em», i està comprimida en .rar protegit amb password (el password és el mateix que s'ha de posar abans), de manera que l'script va a descomprimir aquest arxiu (me.rar) - » rar x me.rar -HP $ MWORD

rar x - »El que fa és descomprimir arxius i carpetes mantenint el mateix ordre que tenen.

em.rar - »Aquest és l'arxiu que desitjo descomprimir.

-HP $ MWORD - »Aquí li indico que ha d'usar password per descomprimir l'arxiu, i el password és la variable $ MWORD (aquesta variable és la contrasenya que vam introduir abans)

5.3. Llavors, si es descomprimit bé, pas a esborrar l'arxiu me.rar ... per què ?, bé, perquè no té sentit que hi hagi el .rar si estic treballant amb els arxius que tenia dins, i aquests arxius estan canviant doncs estic escrivint coses noves al bloc - » rm em.rar

5.4. Li he de canviar els permisos perquè funcioni bé tot - » chmod 777 -R em / (recordin que la carpeta em / és el que contenia el comprimit me.rar)

5.5. Em mostrarà una finestra que m'indica que tinc 10 segons per obrir «el» navegador .... WTF !, ¿això què vol dir? ...

5.5 (a). Simple, molt simple ... 🙂 ... Jo obro el navegador (en aquest cas Rekonq) I estic treballant en algun post nou, però a l'hora de tancar el navegador, l'script torna a comprimir en .rar la carpeta em / (quedant en me.rar).

Això és possible perquè l'script està comprovant cada 3 segons si Rekonq està obert o no, si detecta que sí que està obert, l'script no fa res, però si detecta que NO està obert, passa a executar: rar a me.rar -HP $ MWORD em / * && rm -R em /

La qual cosa vol dir que va a comprimir la carpeta jo / en em.rar (i li posarà password, que seria el mateix que hem vist ja), I una vegada que la comprimeixi i si no hi va haver errors, passarà a esborrar la carpeta jo / amb tot el seu contingut.

5.5 (b). ¿Això en què ens ajuda? ... simple, això ens evita haver de recordar-nos que hem de tornar a protegir el nostre contingut, ja que només necessitem deixar de treballar-hi (tancar el navegador) i l'script farà tota la resta de la feina 😉

6. A punt, això ja és tot explicat de forma general 🙂

... tot i que encara hi ha un altre detall 😀

L'script té una protecció encara més gran, protecció que està desactivada (comentada) són aquestes línies:

if [ "$USER" != "$ME" ]; then
rm *.sh
kdialog --error "Sorry but u are not me. Auto-destroying..." --title "Im Me..."
exit
fi

Això el que fa és simple. La variable $ USER és una variable global de sistema, si en una terminal posen:

echo $USER

Veuran que els mostra l'usuari de vostès ... bé, la lògica d'aquestes línies és simple.

Si $ USER no coincideix amb la variable $ ME (i aquesta la vaig declarar jo en l'script, i és: «Gaara») l'script esborrarà TOTS els arxius .sh que estiguin en aquesta carpeta, o sigui, s'autodestruirà 😉

Això és per a evitar que algú més executi l'script en un altre ordinador jejejeje.

I bé, no crec que hi hagi molt més que explicar, els deixo l'script:

Descàrrega d'arxiu .SH
Veure el script en el nostre Paste

Sé que a molts els resultarà summament complex, però en realitat espanta més del que hauria ... l'script té una lògica de funcionament realment simple, per a un propòsit simple.

Això ho vaig fer per suplir una necessitat molt específica meva, ho comparteixo esperant que alguna que altra línia o idea aquí explicada li pugui servir a algú 😉

Per cert, l'script està pensat per a KDE, perquè els quadres de diàleg (les finestres) que mostra són del KDE (usant KDialog), però es pot adaptar per Gnome / Unity / Cinnamon / Mate usant Zenitat, O bé fer-lo servir 100% en terminal usant simplement la comanda dialog.

I sí, encara l'script té alguna que altra falla, per exemple si l'script descomprimeix el .rar, i després algú tanca a la força (mata) l'script, el contingut d'el .rar quedarà desprotegit, són alguns detalls que queden per polir ... però eh !, que també nosaltres hem de controlar que ningú pugui revisar el nostre ordinador 😀

Per finalitzar vull aclarir que jo NO sóc programador ni de bon tros, no em considero a tal, imagino que es pot optimitzar línies en el codi, o fer servir alguna funció per millorar el funcionament de l'script ... però el que s'ha dit, no sóc programador 😉

Qualsevol dubte que tinguin al l'respecte em diuen, si bé l'script pot ser que no els serveixi doncs no ho necessiten, sempre podran aprendre algun que un altre tip d'ell 😀

Salutacions

PD: sé que ILAV dirà que sóc massa paranoic ... o que desaprofitament meu temps, però no és així. Volia una cosa molt específic, un sistema molt específic de seguretat, i m'ho vaig programar jo mateix ... ¿què tan geek és això? ... LOL !!


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   HacKan va dir

    Aquesta interessant, però crec que la pregunta de si / no és molt a el pet xD
    I que et sembla, en lloc d'utilitzar rar que és privatiu i no ofereix seguretat veritable, reemplaçar-ho per gpg, que és un soft de seguretat més que provat amb els anys, i existeix en totes les distros pràcticament 😉
    Una altra cosa, podis passar-li a md5sum una cadena, no cal q creus un fitxer temporal. Aca tb et recomano passar-te a xa que és moltíssim més segur, proba a la terminal: shasum

    Salutacions!

    1.    KZKG ^ Gaara va dir

      Hola i gràcies pel teu comentari 😀
      GPG em permet empaquetar un directori amb tot el seu contingut? És que en realitat només l'he utilitzat per a arxius solts, no per directoris que continguin subdirectoris i arxius.

      ooo ... genial això de shasum, no el coneixia 😀
      Passaré a modificar l'script per usar aquest, i ... sí !! cert, amb simplement: trobo «$ PASSWORD» | shasum ja obtinc la cadena, en efecte, no hi ha necessitat de escriure-ho en un arxiu 😀

      De debò moltíssimes gràcies pel teu comentari, he après ja alguna cosa nova 🙂
      Salutacions

    2.    sieg84 va dir

      és el mateix que li preguntava ...

      1.    KZKG ^ Gaara va dir

        El que necessitaria és esbrinar com xifrar amb GPG un arxiu i passar-li el password en la mateixa línia ... per exemple:
        gpg -i file.tar.gz -password elpasswordquesea

        Alguna idea de com fer-ho? 🙂

        1.    HacKan va dir

          Per xifrar un directori c / gpg, primer cal q empaquetar amb tar.
          després, per a aquest cas convé fer servir xifrat simètric, amb el paràmetre -c (veure en wikipedia la dif entre xifrat simètric i asimètric).
          això llavors seria alguna cosa com:
          tar -czf destino.tgz directorio_fuente / && echo $ passwd | gpg -batch -compress-level 0 -c -passphrase-fd 0
          això creés un arxiu comprimit anomenat «destino.tgz» i l'arxiu encriptat anomenat «destino.tgz.gpg». tant directori font com el mateix comprimit haurien d'eliminar-se x seguretat (fijate la comanda shred)

          per a desencriptar:
          echo $ passwd | gpg -batch -d -passphrase-fd 0 archivo_cifrado.tgz.gpg | tar -xz
          això extraurà els arxius en el directori actual (després pot usar-se mv per moure'ls a un altre costat)

          qualsevol dubte, respon aquest comment 🙂

          salutacions !!

          1.    HacKan va dir

            ehm, ull amb els guions dobles (-) i els simples (-) ... hi ha alguna manera d'escriure alguna cosa com si fos codi per q no canviï el format?
            prueba de codigo -- -
            [Code] prova de codi - - [/ code]

          2.    HacKan va dir

            el pas mes prolix

            comprimir i encriptar:
            tar -czf destino.tgz directorio_fuente/ && echo $passwd | gpg –batch –compress-level 0 -c –passphrase-fd 0
            notese q aca són dos passos: primer crea l'arxiu comprimit i tot seguit, si no es va produir un error, prossegueix c la encriptació (encadenamiendo amb &&)

            desencriptar i descomprimir:
            echo $passwd | gpg –batch -d –passphrase-fd 0 archivo_cifrado.tgz.gpg | tar -xz

            Salutes!

          3.    KZKG ^ Gaara va dir

            Síp, de fet ahir a casa em vaig llegir el man de gpg i aquí estava tot el que necessitava 😀
            En realitat no ho vaig fer de el tot i així, no vaig fer servir trobo ni compressió, vaig fer un post sobre això, recentment ho vaig publicar.

            Mil gràcies per l'ajuda amic, de debò que sí.

  2.   Josh va dir

    Que meravella! just estava buscant alguna cosa així i em trobo amb el teu article. Vaig a provar-ho per protegir els meus dades. Pel que fa a seguretat informàtica mai s'és massa paranoic. gràcies

    1.    KZKG ^ Gaara va dir

      Gràcies jaja.
      ¿Vas entendre el funcionament de l'script no?

      Sembla molt més complex del que en realitat és jejeje.

      Gràcies pel comentari, de debò 😀

      Salutacions

      PD: En efecte, la seguretat mai és suficient jajaja.

      1.    Josh va dir

        Em cost una mica entendre-ho (ho vaig llegir 3 vegades) ja que porto poc temps usant linux. Però en veritat és simple i sempre resulta agradable aprendre coses com aquesta. Salutacions i gràcies una altra vegada.

        1.    KZKG ^ Gaara va dir

          L'important és entendre-jeje. Vaig intentar explicar tot summament detallat, però crec que em vaig estendre massa jajaja.
          Gràcies a tu 🙂

  3.   auroszx va dir

    Wow, molt bo l'script 🙂

    PD: Paranoia is Over 9000! xD

    1.    KZKG ^ Gaara va dir

      hahahahahahaha that s em ... LOL !!

  4.   Rafael va dir

    Veient el teu script crec que es pot fer amb xdialog per si no tenen kde :)! salutacions

    1.    KZKG ^ Gaara va dir

      Oh, no coneixia xdialog ... hauré de fer-li un ull a veure 😀
      Gràcies per la dada.

  5.   sieg84 va dir

    en lloc de rar perquè no fer servir tar.xz / gz i gpg ¿?

    1.    Rafael va dir

      és perquè ja ho té en rar on té el seu CMS

  6.   Citux va dir

    Excel·lent @ KZKG ^ Gaara fa dies estava pensant en una cosa així, però camino en exàmens així que no he tingut temps de res, i de sobte veig el teu article ....
    ho provaré la setmana que 🙂

    1.    KZKG ^ Gaara va dir

      Gràcies, qualsevol detall aquí estic 😀

  7.   truko22 va dir

    xD no vaig entendre res uu però si m'agradaria com usar en els scrits kdialog correctament, com treure missatge al notificador del KDE

    1.    KZKG ^ Gaara va dir

      Per treure missatges en les notificacions del KDE prova a instal·lar el paquet: libnotify-bin
      Després en una terminal poses:
      notify-send "texto texto texto"

      I veuràs què xulo 😀 ... i, això funciona per a KDE, Gnome, Unity, Cinnamon, Mate i Xfce 😉

      No obstant en aquest script no ús les notificacions com a tal, sinó simplement finestres de KDialog. En una terminal escriu:
      kdialog

      I veuràs l'ajuda aquí 😉

      Salutacions 😀

      1.    truko22 va dir

        Moltes gràcies o /

  8.   Joel Antonio Vásquez va dir

    Hola, bon post, només un suggeriment, val que amb md5 no es veu a simple vista, però alguns curiosos podran utilitzar un rainbow table per veure si la contrasenya convertida en md5 es troba dins d'aquí, et recomano utilitzar bcrypt (http://bcrypt.sourceforge.net/), Només és un suggeriment, ho pots prendre per a qualsevol ocasió, Salutacions.

    1.    KZKG ^ Gaara va dir

      gràcies 😀
      En realitat sí, MD5 no és perfecte i hi ha els que han aconseguit treure contrasenyes, el trobaré un ull a aquesta aplicació 😉

      Gràcies pel teu comentari.

  9.   sieg84 va dir

    amb la simètrica tot just en kdialog et demani la contrasenya
    i amb la asimètrica utilitzant una clau pública.

    he d'aclarir que no tinc ni un pisca de programador.

    1.    KZKG ^ Gaara va dir

      Síp, ja vaig aconseguir xifrar amb GPG (de fet acabo de posar un post sobre això) jeje.

  10.   Car va dir

    KZKG ^ Gaara llegeixo sempre els teus post.
    Arma't un per usar amb XFCE.
    Petó. car

    1.    KZKG ^ Gaara va dir

      Hola i davant de tot, benvinguda a l'bloc 😀
      jajaja gràcies, sé que de vegades es fa difícil perquè escric coses una mica tècniques, però intento sempre explicar tot tan clar com em sigui possible 🙂

      Experimentaré una mica amb XDialog o Zenity a veure si em surt per Xfce jaja, faré les proves en un Xubuntu virtual 🙂

      Salutacions

  11.   Elynx va dir

    Bastanteee útil home, gràcies!

    Salutacions!

  12.   Damià Rivera va dir

    Gràcies em va servir molt per protegir uns arxius

    El vaig haver d'adaptar a zenity perquè no tinc kde en aquests moments: \

    Aquí deixo l'esquelet que vaig a utilitzar adaptat a zenity

    http://paste.desdelinux.net/4641

    Gràcies de nou i salutacions 😀

    1.    KZKG ^ Gaara va dir

      oooo genial, moltíssimes gràcies 😀 😀
      Recordo que algú va demanar això però per Xfce, amb Zenity funcionaria en Xfce no?

      1.    Damià Rivera va dir

        Si, només que l'ordre d'ordres es va quedar perquè afegissin les ordres a executar, després de passar el password d'shasum o md5

        S'hauria de modificar a diferents necessitats per cada qui, per protegir diferents coses en diferents rutes amb diferents ordres

        O potser afegint una altra part (GUI) per crear la configuració de seguretat del nostre arxiu

        Un Salutació 😀

        1.    Damià Rivera va dir

          Tenia temps i xfce (en Archlinux) i ja he adaptat totalment l'script com estava, per xfce usant zenity (crec) ja que el que deixi dalt només era l'esquelet que usi

          http://paste.desdelinux.net/4644

          ¿Es podrà editar si té una fallada des del paste?

          El que passa és que tinc diverses intèrprets d'ordres gràfiques i no sé si servirà en xfce net, per exemple en xubuntu

          Salutacions 😀

  13.   Matias Gastón va dir

    Interessant che !!! Bona aportació !!!!!!

    Sóc molt nou en això de programar, estic aprenent BASH de poc ... però algunes coses em van passar i et poden servir o no ..
    Quan dieu que l'script pelat té incorporat el password i seria imperdonable que algú l'obri i el llegeixi d'aquí ... vós planteges tot aquest truc de embeure el MD5 com a mesura de protecció.

    La qual cosa està bastant bo com a primer pas per a complicar-li la vida a l'possible intrús, però fixa't en les següents idees (que fins i tot poden aplicar-se una dalt de l'altra)

    IDEA 1) Què tal si el password el guardes dins d'un arxiu en la teva màquina, i no allotjar en l'script?

    EX: en un txt ponés la clau i la guardes a / home / /bla/bla/clave.txt
    En el teu script flames a la clau com a CLAU = "$ (cat $ HOME / bla / bla / clave.txt)", després tirás l'if $ clavepreguntada = $ CLAU, then .. etc etc

    D'aquesta manera, estàs aconseguint 3 coses +1 avantatge:
    1) Que la contrasenya mai va estar en l'script. (Evites el MD5)
    2) La ruta on està la clau, depèn de el nom d'usuari. (Qualsevol que ho vulgui obrir, el redirecciona a qualsevol costat) Al 99.9% dels casos li va fallar el script.
    3) En cas que vulguis més seguretat, treu-li tots els permisos a l'arxiu clave.txt per a tots els altres usuaris excepte el teu.
    4) Avantatge: Portabilitat per canviar la contrasenya quan vulguis, sense editar script. Perquè la comprovació és externa a través d'un fitxer.

    IDEA 2) Què tal si ofuscás tot l'script de bash, perquè ni tan sols es pugui obrir?

    Una manera de fer això és aprofitar que en C és necessari compilar.
    Llavors, introdueix el script dins d'un codi C que l'únic que fa és trucar a aquest Script (però que està ficat dins del programa). A l'hora de compilar ... queda tot dins i la teva sortida és un executable .. i no més un script. Hi ha una persona que ja va fer un "script" que fa el procés d'ofuscació, amb la qual cosa és molt pràctic.

    Més info aquí: http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/Compilar_%28ofuscar%29_BASH_scripts_con_C_-_SHC

    IDEA 3) Què tal si, ponés una condició virtual en l'script on requereixi contrasenya d'administrador?

    Per ex, executar una condició usant "suo" i que després segueixi amb l'script, sinó aturar-la.
    D'aquesta manera tota la protecció recauria com un pont sobre el teu password d'ROOT.

    Bé, res més ...
    Salutacions !!!!!!!! i aguanti BASH.

    1.    KZKG ^ Gaara va dir

      Hahahaha Gacias 😀
      En realitat ara camino usant SHA512 doncs és molt millor que MD5: https://blog.desdelinux.net/como-saber-la-suma-md5-o-sha-de-una-palabra-oracion-o-archivo/
      Així com GPG com a mitjà de protecció en comptes de comprimir amb .rar: https://blog.desdelinux.net/como-proteger-datos-con-gpg-de-forma-simple/

      El problema de posar el password en un arxiu diferent, és que llavors posaria el password en un altre lloc sí, però ¿estaria en text pla ?. Si he de xifrar (que és el recomanat), el deixo al mateix script, doncs ... dubto mooooolt que algú pugui trencar SHA512 jajajaja (miri el 1er link i entendràs 😉)

      Sobre el dels permisos, si algú fa servir un CD autònom podria llavors obrir el .txt usant el root de el CD autònom, de manera que els permisos no és de l'sobretot la millor opció.

      Sobre el de ofuscar el codi de l'Bash ... sí, això ho havia pensat i la idea és GENIAL, el problema és que no sé com fer-ho, de fet ni tan sols sé si es pot fer JAJAJA.

      Oh wait ... ara llegeixo la resta de l'comentari O_O ... jeje, no sabia que es podia fer això. Jo no tinc ni idea de C o C ++, però valdria la pena provar-jajaja.

      Sobre la idea 3, no està malament 😀

      Li he fet diverses millores a l'script des que vaig publicar aquest post, 2 són les que vaig esmentar en els links a l'inici d'aquest comentari, una altra és que si canvia algun caràcter en l'script, s'esborra. I ara tinc pendent provar això de ofuscar el codi jajajaja.

      Gràcies pel teu comentari i ... sí, aguanti bash !!! JAJA

    2.    KZKG ^ Gaara va dir

      WTF !!!
      Ja he fet servir SHC ... GE-NI-A EL !!!! O_O

  14.   Atheyus va dir

    Molt bo l'script, escolta i si fas servir un comprovador de root, per poder executar el script com suo ./script

    Només hauries d'afegir aquest codi a el principi

    http://paste.desdelinux.net/4663

    un Salutació

  15.   Neo61 va dir

    KZKG ^ Gaara, amic, crec que el estendre't en una explicació no és el problema, això és bo per als que no tenim tant coneixement. Aquí mateix s'han publicat articles que no ensenyen, només donen una informació d'alguna cosa que existeix. Així que no et excuses i que hagin mes amb eplicaciones esteses.

  16.   caçador va dir

    Per coses com aquestes ús http://www.truecrypt.org/

  17.   Abel va dir

    Algú podria compartir l'script? Tinc curiositat i tots els links estan caiguts. 🙁

    Gràcies.