Bir komut dosyası tarafından kullanılan bir parolayı saklamanın en az güvenli olmayan yolu nedir?


13

Kullanıcı adımı ve şifremi kullanarak otomatik olarak bir hizmetle kimlik doğrulaması yapan bir Bash betiğim var. Kimlik bilgileri şu anda kod içinde düz metin olarak saklanır.

Komut dosyası erişimine izin verirken bu kimlik bilgilerini en güvenli şekilde saklamak için ne gibi önlemler almalıyım?

Açıklama noktaları:

  • Mümkünse, bunun yerine başka kimlik doğrulama yöntemlerinin kullanılması gerektiğini anlıyorum. Hala şifre doğrulamanın tek seçenek olması durumunda ne yapacağımı bilmek istiyorum.
  • Parolanın hiç saklanmaması burada kabul edilebilir bir cevap değildir. Betiğin parolaya katılımsız erişime sahip olması gereken durumu soruyorum.

2
belki de kimlik bilgilerinin şifresini saklamıyor musunuz?
Thomas Ward

GNOME Anahtarlık veya benzeri bir şeye erişmek işe yaramaz mı?
Firefeather

Belki de şifreli bir karma (SHA-1 gibi) olarak saklayabilseydiniz, bu iyi olurdu.
İsimsiz

ROT13 bunu gizleyecekti, ancak hiçbir şekilde GÜVENMEZ.
İsimsiz

@Anonymous Parola bir şifreleme karması olarak depolanmışsa, onu almayı nasıl önerirsiniz?
ændrük

Yanıtlar:


8

Ne tür bir hizmet? Bazı hizmetlerin kimlik doğrulaması için başka yöntemleri vardır, örneğin SSH aracısı ile birlikte SSH için SSH anahtarları.

Şifreyi koddan ayrı olarak saklarım ve tüm yol bileşenlerinin doğru izinlerin ayarlandığından emin olurum. Örneğin, yolunda emin olun /path/to/file, /, /pathve /path/tosen (güvendiğiniz bir kullanıcı tarafından sahip olunan root) ve bu dosyalarınızı görmesine izin verilmez biri tarafından yazılabilir olmadığını. Son olarak, için önerilen izinler file600 veya 400'dür.

Bu fileşöyle görünebilir:

PASSWORD='something that you cannot remember'

Komut dosyanızda, değişkeni içe aktarmak için aşağıdaki kodu kullanın:

. /path/to/file

Komut dosyanızla ilgili olarak, saldırganların komut dosyası bağlamında kod yürütmesine izin verebilecek delikler içermediğinden emin olun (örn. Keyfi bir $PATHdeğişken kümesi veya başka dosyaların geçersiz kullanımı olabilir (örneğin, dünya tarafından yazılabilir bir dosyanın kaynağı) .

Parolanızın gerçek korumasına gelince, yapamazsınız. Bir şekilde diğer hizmet için kullanılabilir olmalıdır. Alternatif olarak, parolayı içeren dosyayı / komut dosyasını opensslveya kullanarak şifreleyebilirsiniz, gpgböylece kimlik bilgilerinin kilidi açılmadan önce bir parola girmeniz gerekir. Bu özellikle hizmetinizin şifresini hatırlamak zorsa yararlıdır.


14

Parolayı dosyada sabit kodlamak yerine, parolayı ayrı bir dosyada saklayın ve dosyayı ( chmod 700veya chmod 500) yalnızca yetkili kullanıcıların erişebileceği şekilde koruyun .

cat /dir/to/file/with/.passwordDosyayı okumak ve içeriğini bir değişkene depolamak yerine parolayı alın .


Bazı araçların, gpg --passphrase-fileseçeneği gibi, tam da bu nedenle bir dosyadan şifreyi okuma seçeneği vardır.

2
... ve alışkanlık yaratan bir .dotfile (/dir/to/file/with/.password)
KNB

2
chmod 400dosyalar için (salt okunur). Tabii ki, önde gelen dizinleri (700 veya 500, hatta paranoyaksanız 100) güvenceye almalısınız. 400'ün (veya dizinler için 500'ün) yeterli olduğuna dikkat edin, diğer modlar (100) tıpkı adın önüne bir nokta koyarak dosyayı gizlemek gibi belirsizlik nedeniyle güvenlik olarak düşünülebilir .
Lekensteyn

1

Bu eski bir soru olduğunu biliyorum ama ben bu benzer sorunla karşı karşıya ve ben çözmek için Ubuntu anahtarlık kullanılır. Ubuntu 18.04LTS üzerinde bir çözüm Terminali açın keyring set {{service}} {{username}} Örneğin, bunu okul şifre kaydı için kullanıyorsanız yazın :

keyring set school mohamed

Parolanızı girmek için bir parola girmeniz gerekir. Şimdi girdiğiniz şifre Ubuntu anahtarlığında saklanıyor.

Bu şifreyi almak için terminale yazın:

keyring get school mohamed

bunu bir betik bağlamında kullanmak için:

password=$(keyring get school mohamed)

Şimdi şifre daha önce girdiğiniz şifreyi içeriyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.