Bash Komut Dosyalarında Şifreli Parolalar Nasıl Kullanılır

Yayınlanan: 2022-01-29
Ubuntu tarzı bir Linux dizüstü bilgisayar.
fatmawati achmad zaenuri/Shutterstock.com

Parola korumalı bir kaynağa bağlanmak için bir Linux komut dosyası kullanmak zorunda kalırsanız, bu parolayı komut dosyasına koymaktan muhtemelen rahatsız olursunuz. OpenSSL bu sorunu sizin için çözer.

Şifreler ve Komut Dosyaları

Kabuk komut dosyalarına parola koymak iyi bir fikir değildir. Aslında, bu gerçekten kötü bir fikir. Senaryo yanlış ellere geçerse, onu okuyan herkes şifrenin ne olduğunu görebilir. Ancak bir komut dosyası kullanmak zorunda kalırsanız, başka ne yapabilirsiniz?

İşlem bu noktaya ulaştığında parolayı manuel olarak girebilirsiniz, ancak komut dosyası katılımsız çalışacaksa bu çalışmaz. Neyse ki, şifreleri komut dosyasına sabit kodlamanın bir alternatifi var. Sezgisel olarak, bunu başarmak için bazı güçlü şifreleme ile birlikte farklı bir şifre kullanır.

Örnek senaryomuzda Ubuntu bilgisayarımızdan bir Fedora Linux bilgisayarına uzak bağlantı yapmamız gerekiyor. Fedora bilgisayarına SSH bağlantısı yapmak için bir Bash kabuk betiği kullanacağız. Komut dosyası katılımsız çalışmalıdır ve komut dosyasına uzak hesabın parolasını koymak istemiyoruz. Bu durumda SSH anahtarlarını kullanamayız çünkü Fedora bilgisayar üzerinde herhangi bir kontrol veya yönetici hakkımız yokmuş gibi davranıyoruz.

Şifrelemeyi işlemek için iyi bilinen OpenSSL araç setini ve parolayı SSH komutuna beslemek için sshpass adlı bir yardımcı programı kullanacağız.

İLGİLİ: Linux Kabuğundan SSH Anahtarları Nasıl Oluşturulur ve Yüklenir

OpenSSL ve sshpass'ı yükleme

Diğer birçok şifreleme ve güvenlik aracı OpenSSL kullandığından, bilgisayarınızda zaten yüklü olabilir. Ancak, değilse, yüklenmesi yalnızca bir dakika sürer.

Ubuntu'da şu komutu yazın:

 sudo uygun olsun openssl 

sshpass yüklemek için şu komutu kullanın:

 sudo apt sshpass'ı kurun 

Fedora'da şunu yazmanız gerekir:

 sudo dnf install openssl 

sshpass kurma komutu:

 sudo dnf sshpass'ı kurun 

Manjaro Linux'ta OpenSSL'yi aşağıdakilerle kurabiliriz:

 sudo pacman -Sy openssl 

Son olarak, sshpass kurmak için şu komutu kullanın:

 sudo pacman -Sy sshpass 

Komut Satırında Şifreleme

openssl komutunu betiklerle kullanmaya başlamadan önce, komut satırında kullanarak onu tanıyalım. Diyelim ki uzak bilgisayardaki hesabın şifresi rusty!herring.pitshaft . Bu şifreyi openssl kullanarak şifreleyeceğiz.

Bunu yaparken bir şifreleme şifresi sağlamamız gerekiyor. Şifreleme şifresi, şifreleme ve şifre çözme işlemlerinde kullanılır. openssl komutunda bir çok parametre ve seçenek bulunmaktadır. Her birine birazdan göz atacağız.

 yankı 'paslı!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password' 

Uzak hesap parolasını bir boru aracılığıyla ve openssl komutuna göndermek için echo kullanıyoruz.

openssl parametreleri şunlardır:

  • enc -aes-256-cbc : Kodlama türü. Şifre bloğu zincirleme ile Gelişmiş Şifreleme Standardı 256 bit anahtar şifresini kullanıyoruz.
  • -md sha512 : Mesaj özeti (karma) türü. SHA512 şifreleme algoritmasını kullanıyoruz.
  • -a : Bu, openssl şifreleme aşamasından sonra ve şifre çözme aşamasından önce base-64 kodlamasını uygulamasını söyler.
  • -pbkdf2 : Parola Tabanlı Anahtar Türetme İşlevi 2'yi (PBKDF2) kullanmak, bir kaba kuvvet saldırısının parolanızı tahmin etmede başarılı olmasını çok daha zor hale getirir. PBKDF2, şifrelemeyi gerçekleştirmek için birçok hesaplama gerektirir. Bir saldırganın tüm bu hesaplamaları çoğaltması gerekir.
  • -iter 100000 : PBKDF2'nin kullanacağı hesaplamaların sayısını ayarlar.
  • -salt : Rastgele uygulanan bir tuz değeri kullanmak, düz metin aynı olsa bile şifreli çıktıyı her seferinde farklı kılar.
  • -pass pass:'pick.your.password' : Şifrelenmiş uzak parolanın şifresini çözmek için kullanmamız gereken parola. pick.your.password , seçtiğiniz sağlam bir parolayla değiştirin.

rusty!herring.pitshaft şifreli hali terminal penceresine yazılır.

Terminal penceresine yazılan şifreli şifre

Bunun şifresini çözmek için, bu şifreli dizgiyi, şifrelemek için kullandığımız aynı parametrelerle, ancak -d (şifre çözme) seçeneğini ekleyerek openssl geçirmemiz gerekiyor.

 yankı U2FsdGVkX19iiiRNHESG+wm/uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password' 

Reklamcılık

Dizenin şifresi çözülür ve orijinal metnimiz—uzak kullanıcı hesabının parolası—terminal penceresine yazılır.

Terminal penceresine yazılan şifresi çözülmüş şifre

Bu, uzak kullanıcı hesabı parolamızı güvenli bir şekilde şifreleyebileceğimizi kanıtlar. Ayrıca şifreleme aşamasında verdiğimiz şifreyi kullanarak ihtiyaç duyduğumuzda şifresini de çözebiliriz.

Ama bu durumumuzu gerçekten iyileştiriyor mu? Uzak hesap şifresinin şifresini çözmek için şifreleme şifresine ihtiyacımız varsa, şifre çözme şifresinin kesinlikle komut dosyasında olması gerekecek mi? Evet, öyle. Ancak şifrelenmiş uzak kullanıcı hesabı parolası farklı, gizli bir dosyada saklanacaktır. Dosyadaki izinler, sizin ve sistemin kök kullanıcısı dışında herkesin dosyaya erişmesini engeller.

Çıktıyı şifreleme komutundan bir dosyaya göndermek için yeniden yönlendirmeyi kullanabiliriz. Dosyanın adı “.secret_vault.txt”. Şifreleme parolasını daha sağlam bir parolayla değiştirdik.

 yankı 'paslı!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' > .secret_vault.txt 

Görünür bir şey olmaz, ancak parola şifrelenir ve “.secret_vault.txt” dosyasına gönderilir.

Gizli dosyadaki şifreyi çözerek çalıştığını test edebiliriz. Burada cat kullandığımızı unutmayın, echo değil.

 kedi .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' 

Reklamcılık

Parola, dosyadaki verilerden başarıyla çözüldü. Bu dosyadaki izinleri başka kimsenin erişemeyeceği şekilde değiştirmek için chmod kullanacağız.

 chmod 600 .secret_vault.txt
 ls -l .secret_vault.txt 

600 izin maskesi kullanmak, dosya sahibi dışındaki herkesin tüm erişimini kaldırır. Artık senaryomuzu yazmaya geçebiliriz.

İLGİLİ: Linux'ta chmod Komutu Nasıl Kullanılır

Bir Komut Dosyasında OpenSSL Kullanmak

Senaryomuz oldukça basit:

 #!/bin/bash

# uzak hesabın adı
REMOTE_USER=geek

# uzak hesap için şifre
REMOTE_PASSWD=$(cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password')

# uzak bilgisayar
REMOTE_LINUX=fedora-34.yerel

# uzak bilgisayara bağlanın ve script.log adlı bir dosyaya bir zaman damgası koyun
sshpass -p $REMOTE_PASSWD ssh -T $REMOTE_USER@$REMOTE_LINUX << _remote_commands
echo $USER "-" $(tarih) >> /home/$REMOTE_USER/script.log
_remote_commands
  • REMOTE_USER adlı bir değişkeni “geek” olarak belirledik.
  • Daha sonra “.secret_vault.txt” dosyasından alınan şifresi çözülmüş şifrenin değerine REMOTE_PASSWD adlı bir değişkeni, biraz önce kullandığımız komutun aynısını kullanarak ayarlıyoruz.
  • Uzak bilgisayarın konumu, REMOTE_LINUX adlı bir değişkende saklanır.

Bu bilgi ile uzaktaki bilgisayara bağlanmak için ssh komutunu kullanabiliriz.

  • sshpass komutu, bağlantı satırındaki ilk komuttur. -p (şifre) seçeneği ile kullanıyoruz. Bu, ssh komutuna gönderilmesi gereken şifreyi belirlememizi sağlar.
  • -T (sözde terminal tahsisini devre dışı bırak) seçeneğini ssh ile kullanıyoruz çünkü uzak bilgisayarda bize tahsis edilmiş bir sözde-TTY'ye ihtiyacımız yok.
Linux'ta Bash'de "Buradaki Belgeler" Nasıl Kullanılır
İLGİLİ Linux'ta Bash'te "Buradaki Belgeler" Nasıl Kullanılır

Uzak bilgisayara bir komut iletmek için kısa bir burada belge kullanıyoruz. İki _remote_commands dizesi arasındaki her şey, uzak bilgisayardaki kullanıcı oturumuna talimatlar olarak gönderilir; bu durumda, bu tek bir Bash betiği satırıdır.

Uzak bilgisayara gönderilen komut, kullanıcı hesabı adını ve zaman damgasını "script.log" adlı bir dosyaya kaydeder.

Komut dosyasını kopyalayıp bir düzenleyiciye yapıştırın ve "go-remote.sh" adlı bir dosyaya kaydedin. Ayrıntıları kendi uzak bilgisayarınızın adresini, uzak kullanıcı hesabını ve uzak hesap parolasını yansıtacak şekilde değiştirmeyi unutmayın.

Komut dosyasını yürütülebilir hale getirmek için chmod kullanın.

 chmod +x go-remote.sh 

Reklamcılık

Geriye sadece denemek kalıyor. Senaryomuzu ateşleyelim.

 ./go-remote.sh 

Komut dosyamız, katılımsız bir komut dosyası için minimalist bir şablon olduğundan, terminale çıktı yoktur. Ancak Fedora bilgisayarındaki “script.log” dosyasını kontrol edersek, uzak bağlantıların başarıyla yapıldığını ve “script.log” dosyasının zaman damgalarıyla güncellendiğini görebiliriz.

 kedi betiği.log 

Şifreniz Gizli

Uzak hesap parolanız komut dosyasına kaydedilmez.

Ve şifre çözme şifresi komut dosyasında olmasına rağmen, şifresini çözmek ve uzak hesap şifresini almak için “.secret_vault.txt” dosyanıza başka hiç kimse erişemez.