Als je gedwongen bent om een Linux-script gebruiken om verbinding te maken met een wachtwoord beveiligde bron, heb je waarschijnlijk een gevoel van onbehagen over het zetten van dat wachtwoord in het script. OpenSSL lost dat probleem voor je.
Wachtwoorden en Scripts
Het is niet een geweldig idee om wachtwoorden in shell scripts te zetten. In feite is het een heel slecht idee. Als het script in de verkeerde handen, kan iedereen die het leest te zien wat het wachtwoord is. Maar als je gedwongen om een script te gebruiken, wat kun je doen?
U kunt het wachtwoord handmatig wanneer het proces bereikt dat punt, maar als het script gaat zonder toezicht uit te voeren, dat zal niet werken in te voeren. Gelukkig is er een alternatief voor het hard coderen van de wachtwoorden in het script. Counterintuitively, het maakt gebruik van een ander wachtwoord om dit te bereiken, samen met enkele sterke encryptie.
In ons voorbeeld scenario, moeten we een externe verbinding met een Fedora Linux computer van onze Ubuntu computer te maken. We zullen met behulp van een Bash shell script om een SSH-verbinding met de Fedora computer te maken. Het script moet laten uitvoeren, en we willen niet om het wachtwoord voor de externe rekening in het script zetten. We kunnen niet SSH-sleutels gebruikt in dit geval, omdat we doen alsof we geen enkele controle of admin rechten heeft op de Fedora computer te hebben.
We gaan naar het gebruik van de bekende te maken
OpenSSL-toolkit
om de encryptie en een utility genaamd verwerken
sshpass
om het wachtwoord in te voeren in de SSH commando.
VERWANT: Hoe SSH-toetsen van de Linux Shell te maken en te installeren
Het installeren van OpenSSL en sshpass
Omdat veel van de andere encryptie en security tools te gebruiken OpenSSL, is het misschien al op de computer geïnstalleerd. Echter, als het niet, het duurt maar een moment om te installeren.
Op Ubuntu, typt u deze opdracht:
sudo apt get openssl
Installeren
sshpass
Gebruik deze opdracht:
sudo apt installeren sshpass
Op Fedora moet u typen:
sudo dnf installeren openssl
De opdracht om te installeren
sshpass
is:
sudo dnf installeren sshpass
Op manjaro linux, kunnen we OpenSSL installeren met:
sudo pacman -Sy openssl
Tot slot, te installeren
sshpass
Gebruik deze opdracht:
sudo pacman -Sy sshpass
Het versleutelen op de opdrachtregel
Voordat we naar het gebruik van de
openssl
commando met scripts, laten we vertrouwd raken met haar door het te gebruiken op de opdrachtregel. Laten we zeggen dat het wachtwoord voor de account op de externe computer
Rusty! Herring.PitShaft
. We gaan dat wachtwoord te versleutelen met behulp van
openssl
.
We moeten een encryptie-wachtwoord op te geven als we dat doen. De encryptie wachtwoord wordt gebruikt in de encryptie en decryptie processen. Er zijn een groot aantal parameters en opties in het
openssl
opdracht. We zullen een kijkje nemen op elk van hen in een moment te nemen.
Echo 'Rusty! Hirring.PitShaft' | openssl enc -aes-256-CBC -md sha512 -a -pbkdf2 -iter 100000 -zout-pass door: 'pick.your.password'
Wij gebruiken
echo
het wachtwoord extern account verzenden via een leiding en in de
openssl
opdracht.
De
openssl
parameters zijn:
- ENC -aes-256-CBC : Het coderingstype. We gebruiken de Advanced Encryption Standard 256 bits cipher met cipher-block chaining.
- -MD sha512 De berichtsamenvatting (hash) type. We gebruiken de SHA512 cryptografisch algoritme.
-
-een
: Dit vertelt
opensslom base-64 codering toepassing na de codering fase en voor de decodering fase. - -pbkdf2 : Met behulp van Password-Based Key Afleiding Functie 2 (PBKDF2) maakt het veel moeilijker voor een brute force attack om te slagen in raden uw wachtwoord. PBKDF2 vereist vele berekeningen om de encryptie te voeren. Een aanvaller zou moeten al die berekeningen te repliceren.
- -iter 100000 : Stelt het aantal berekeningen die PBKDF2 gebruiken.
- -zout : Gebruik van een willekeurig toegepaste zoutwaarde maakt de gecodeerde uitgang elke keer anders, zelfs als de gewone tekst hetzelfde is.
-
-Pass: 'pick.your.password'
: Het wachtwoord dat we moeten gebruiken om het gecodeerde wachtwoord-wachtwoord te decoderen. Vervanging
pick.your.passwordmet een robuust wachtwoord van uw keuze.
De gecodeerde versie van onze
Rusty! Herring.PitShaft
Wachtwoord is naar het terminalvenster geschreven.
Om dit te decoderen, moeten we die versleutelde string doorgeven
openssl
met dezelfde parameters die we gebruikten om te coderen, maar het toevoegen van de
-NS
(decoderen) optie.
ECHO U2FSDGVKX19IIIRNESG + WM / UKJTZJWNOPJZPHYRDKYZH5LVZRPIGO1S0GOZU46 | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -TER-DEPBKDF2-ITEER 100000 -SALT-PASSEN: 'Pick.your.Password'
De tekenreeks wordt gedecodeerd en onze oorspronkelijke tekst - het wachtwoord voor de remote gebruikersaccount - is geschreven naar het aansluitingsvenster.
Dat bewijst dat we ons wachtwoord op afstand gebruikersaccount veilig kunnen coderen. We kunnen het ook decoderen wanneer we het nodig hebben met behulp van het wachtwoord dat we in de coderingsfase hebben verstrekt.
Maar verbetert dit onze situatie eigenlijk? Als we het versleutingswachtwoord nodig hebben om het wachtwoord van de externe account te decoderen, moet het decoderingswachtwoord zeker in het script zijn? Nou ja, het doet het. Maar het versleutelde wachtwoord van de gebruikersaccount wordt in een ander, verborgen bestand opgeslagen. De machtigingen op het bestand zullen iemand behalve u - en de root-gebruiker van het systeem voorkomen, natuurlijk - van het toegang krijgen.
Om de uitvoer van de coderingsopdracht naar een bestand te verzenden, kunnen we omleiding gebruiken. Het bestand heet ".secret_vault.txt." We hebben het versleutingswachtwoord veranderd voor iets robuuster.
Echo 'Rusty! Hirring.PitShaft' | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -RITER 100000 -SALT-PASSEN: 'SECRET # Vault! Wachtwoord' & GT; .Secret_vault.txt
Niets zichtbaar gebeurt, maar het wachtwoord is gecodeerd en verzonden naar het bestand ".Secret_vault.txt".
We kunnen testen dat het werkte door het wachtwoord in het verborgen bestand te decoderen. Merk op dat we gebruiken
kat
hier niet
echo
.
Cat .Secret_vault.txt | OPERSSL ENC -AES-256-CBC-MD SHA512 -A -D -PBKDF2 -DRITER 100000 -SALT-PASSEN: 'Secret # Vault! Wachtwoord'
Het wachtwoord is succesvol gedecodeerd uit de gegevens in het bestand. We zullen
gebruik maken van
chmod
Om de machtigingen op dit bestand te wijzigen, zodat niemand anders toegang heeft.
CHMOD 600 .Secret_vault.txt
LS -L .Secret_vault.txt
Met behulp van een machtigingsmasker van 600 verwijdert alle toegang voor iemand anders dan de eigenaar van het bestand. We kunnen nu verder gaan met het schrijven van ons script.
VERWANT: Hoe de CHMOD-opdracht op Linux te gebruiken
Met OpenSSL in een script
Ons script is vrij eenvoudig:
#! / Bin / bash # Naam van het externe account Remote_User = Geek # wachtwoord voor het externe account Remote_Passwd = $ (Cat .secret_vault.txt | OpensSL ENC -AES-256-CBC-MD SHA512 -A -D -PBKDF2 -A -Altype 100000 -Salt-Pass Pass: 'Secret # Vault! Wachtwoord') # computer op afstand Remote_Linux = Fedora-34.Local # Maak verbinding met de externe computer en plaats een tijdstempel in een bestand met de naam script.log Sshpass -P $ Remote_Passwd Ssh -t $ Remote_User @ $ Remote_Linux & LT; & LT; _Remote_commands ECHO $ User "-" $ (DATUM) & GT; & GT; /home/$Remote_user/script.log _Remote_commands
-
We stellen een variabele genoemd
Remote_usernaar "geek." -
We zetten vervolgens een variabele in de naam
Remote_passwdTot de waarde van het gedecodeerde wachtwoord getrokken uit het bestand ".Secret_vault.txt", met behulp van hetzelfde commando dat we een moment geleden hebben gebruikt. -
De locatie van de externe computer wordt opgeslagen in een variabele genaamd
Remote_Linux.
Met die informatie kunnen we de
ssh
opdracht om verbinding te maken met de externe computer.
-
De
sshpassopdracht is het eerste opdracht op de verbindingslijn. We gebruiken het met de-P(wachtwoord) optie. Hiermee kunt u het wachtwoord opgeven dat naar desshopdracht. -
Wij gebruiken de
-T(Schakel de optie Pseudo-terminal toewijzing uit)sshOmdat we geen pseudo-tty hebben toegewezen aan ons op de externe computer.
We gebruiken een korte
hier document
om een opdracht aan de externe computer door te geven. Alles tussen de twee
_Remote_commands
Strings wordt verzonden als instructies voor de gebruikerssessie op de externe computer-in dit geval, het is een enkele lijn van Bash-script.
Het opdracht dat naar de externe computer is verzonden, logt u eenvoudig de naam van de gebruikersaccount en een tijdstempel in op een bestand met de naam "Script.log."
Kopieer en plak het script in een editor en sla deze op in een bestand met de naam "Go-Remote.SH." Vergeet niet om de details te wijzigen om het adres van uw eigen externe computer, extern gebruikersaccount en wachtwoord-wachtwoord weer te geven.
Gebruik maken van
chmod
om het uitvoerbare bestand te maken.
Chmod + x Go-Remote.SH
Alles wat overblijft is om het uit te proberen. Laten we ons script opvatten.
./ Go-Remote.SH
Omdat ons script een minimalistisch sjabloon is voor een onbewaakt script, is er geen uitvoer aan de terminal. Maar als we het bestand "Script.log" op de Fedora-computer controleren, kunnen we zien dat externe verbindingen met succes zijn gemaakt en dat het bestand "Script.log" is bijgewerkt met tijdstempels.
CAT-script.log
Uw wachtwoord is privé
Uw Remote Account-wachtwoord wordt niet opgenomen in het script.
En hoewel het decoderingswachtwoord is, In het script heeft niemand anders toegang tot uw bestand ".Secret_vault.txt" om het te decoderen en het wachtwoord van de afstandsbediening op te halen.