2010-08-17 38 views
5

Ho un semplice script Bash che automatizza le attività che richiedono un'autenticazione basata su password. Attualmente mi memorizzare le credenziali in testo normale:password di crittografia/decrittografia memorizzata nel file di configurazione

$ cat ~/.myconfig 
username=foo 
password=bar 

Ovviamente questo è male - quindi mi chiedo se c'è un modo semplice per cifrare/decifrare la password utilizzando la mia coppia di chiavi pubblica/privata. Usando Yet Another Password per la crittografia non guadagneresti molto, quindi voglio che accada praticamente automaticamente.

ho fatto qualche ricerca (intorno qui e altrove), ma sono fuori dalla mia profondità su questo ...

risposta

3

È possibile memorizzare la password in MD5, aggiungere un po 'di sale prima.

creare:

\#!/bin/bash 

salt=12345_ 

protocol=sha1sum 

read -p "Enter login: " username 
read -p -s "Password: " pass1 
read -p -s "Repeat: pass2 

if [ "pass1 != pass2" ]; then echo "Pass missmatch"; exit 1; else password=pass1; fi 

echo -en "$username " >> ./mypasswd 
echo -e "${salt}${password} | $protocol | awk '{print $1}'" >> ./mypqsswd 

lettura:

\#!/bin/bash 
salt=12345_ #(samesalt) 
protocol=sha1sum 

read -p "Enter username: " username 
read -p -s "Enter password: " password 

if [ `grep $username ./mypasswd | awk '{print $2}' != `echo -e "`echo ${salt}${password} | $protocol | awk '{print $2}'`" ]; then echo -e "wrong username or password"; exit 127; else echo -e "login successfull"; fi 

Ecco il tuo codice.

+0

MD5 non è sicuro. Usa invece SHA. ('sha1sum',' sha256sum', 'sha512sum', _etc_., a seconda della lunghezza dell'hash che desideri.) –

+0

è meglio che salvare in testo normale e mostro solo come funziona .. aggiungo solo protocollo variabile, quindi basta cambiarlo, e si ottiene sha256 sha512 .. etc – Sky

+0

Grazie, questo sembra utile! – AnC

2

Se si vuole semplicemente nascondere la password poi memorizzare il suo hash SHA1. Confronta l'hash della password inserita con l'hash memorizzato.

+1

E modificare i permessi dei file 'chmod go-rw myconfig' contro gli attacchi di dizionario. – Eike

+0

'Automatizzato' significa che non vi è alcuna password inserita. Non c'è nessuno ad entrare. –

+0

GregS ha ragione: se automatizzo l'inserimento della password effettiva richiedendo all'utente di immettere un'altra password, non è molto importante archiviare la password effettiva in primo luogo. – AnC

3

Per automatizzare il tuo compito significa fornire la password; non farà differenza se decidi di crittografare/offuscare la password, dovrai fornire anche la decodifica.
L'unico modo per aggirare questo dilemma è un programma tipo agente, come ad esempio ssh-agent, che memorizza le password per te.

(edit: collegamento corretto)

+0

ssh-agent suona come quello che sto cercando - tuttavia, non riesco a capire esattamente come dovrei impiegarlo. a) Supponendo che carico la password crittografata dal file, come posso decrittografarla? b) Cosa uso per crittografare la password in primo luogo? (Mi aspetto che questo sia un passaggio manuale separato). – AnC

+0

ssh-agent è stato fornito come esempio per come potrebbe essere implementato. Tuttavia, questa è una soluzione specifica per le connessioni relative a ssh. Per la tua situazione specifica potrebbe essere creato qualcosa di simile, ma il modo in cui dipende dalla tua applicazione. – pavel

+0

Suppongo che stavo pensando a un portachiavi/gestore di portachiavi per determinare e accedere alla rispettiva coppia di chiavi - ma potrebbe non esserci una soluzione portatile per questo. (La mia applicazione è solo uno script Bash che invia alcuni comandi - pensa all'autenticazione di base HTTP con arricciatura.) – AnC

Problemi correlati