Domanda

Sto lavorando allo script Perl che utilizza Expect per accedere tramite telnet a macchine remote (don chiedi, devo usare telnet). Faccio anche le operazioni di login p4 necessarie come necessario e uso mi aspetto di inserire le password corrette. Per ora ho appena letto le password da una variabile di ambiente in chiaro, vale a dire export PASSWORD = password , che so non è una buona idea per la sicurezza.

Qual è il modo migliore per archiviare le password per script come questi che hanno bisogno di molte password per più sistemi? Crittografato in un file di testo in qualche modo? O qualcos'altro?

Tieni presente che non posso cambiare facilmente i sistemi esistenti, come ad esempio non riesco davvero a installare SSH o cose del genere.

È stato utile?

Soluzione

Probabilmente il tuo modo migliore è mettere le password in un file separato e bloccare la sicurezza per quel file in modo che solo tu abbia accesso in lettura. Sfortunatamente, se memorizzi una password crittografata nel tuo script, dovrai anche memorizzare il metodo di decrittografia, in modo che un utente malintenzionato possa eseguire la decrittografia e recuperare la password.

Altri suggerimenti

In precedenza c'era una domanda molto simile, vedi la mia risposta ad esso.

In breve, un essere umano deve dare il via alla catena della fiducia. Tutto il resto è offuscamento.

Perché preoccuparsi delle password nello script se si utilizza telnet? Un presunto attaccante lo troverà facile o più semplice catturare i dati dal cavo piuttosto che dal computer remoto, e in realtà non c'è davvero nulla che tu possa fare al riguardo.

Sembra un caso di tentativo di mettere le sbarre nella finestra e di lasciare la porta aperta.

Dato che stai già utilizzando un aspetto, dovresti cercare di reindirizzare un gpg -d su un file crittografato che contiene le tue password. Memorizzare le password in una variabile di ambiente di sistema è semplicemente sbagliato. La password che verrebbe utilizzata per decrittografare il file gpg verrebbe inserita all'avvio, quindi carica tutte le password dal file ed esegui le tue cose. Quindi hai finito, quindi le password esistono solo in testo normale mentre l'applicazione è in esecuzione.

Modifica proprio come una nota a margine, inserire qualsiasi password in uno script è un male; ricorda che lo script è solo un file di testo in chiaro che rende tale password facile come qualsiasi altra cosa. Allo stesso modo anche le applicazioni che compili possono essere invertite con "stringhe" che può cercare stringhe contenute nel codice (in genere password).

Nel caso in cui tu stia utilizzando Mac OS X, ho trovato questo elegante modo per catturare nomi utente e password dal tuo portachiavi .

Aggiorna : il collegamento sembra interrotto dal 22 luglio 2013. Il seguente frammento di codice bash mostra come utilizzo la tecnica (per scaricare i dati di vendita di iTunes):

domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)

Mi piace la soluzione menzionata già di mettere le password in un file separato. Inoltre, è possibile eseguire l'hashing delle password effettive, proprio come è stato fatto in / etc / passwd. Anche se potresti usare la stessa chiave hash per tutti loro a seconda di come l'applicazione. Ovviamente lo svantaggio è che qualcuno deve inserire l'hashkey per eseguire lo script e non funzionerà in un ambiente batch.

Un punto per iniziare a imparare qualcosa sull'hash è da questo stackoverflow domanda

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top