Soru Anaconda kickstart ve rootpw seçeneği


SL 6.5'te şifrelenmiş bir şifre oluşturmak için birkaç farklı yöntem denedim, ancak hiçbir şey benim için işe yaramıyor. Çeşitli / var / log / anaconda * dosyalarında herhangi bir hata bulamadım, ancak oturum açamıyorum, bu yüzden çalışmıyor.

Otomatik olarak oluşturulan orijinal dosya /root/anaconda-ks.cfg Böyle bir şablon olarak kullandım:

rootpw  --iscrypted $6$...(about 100 characters)
authconfig --enableshadow --passalgo=sha512

Sonra denedim openssl passwd -1 bana verdi:

rootpw  --iscrypted $1$...(about 30 characters)
authconfig --enableshadow --passalgo=sha512

Ben SHA-512 değildi anladım ben denedim Birkaç yerde tekrarlanan bir Python one-liner bulundu:

rootpw  --iscrypted $6...(about 10 characters)
authconfig --enableshadow --passalgo=sha512

Hiç birşey çalışmıyor; Giriş yapamıyorum ve tek kullanıcı modunda root şifresini sıfırlamak zorunda kalıyorum.


5
2018-04-11 23:38


Menşei




Cevaplar:


Bir makinede gölge ve passalgo = sha512 olduğundan emin olun, bu makinede istediğiniz şifreyi root geçişine getirin ve / etc / shadow'dan alın ve kickstart'a koyun. Bu, üretim kullanımı için tavsiye edilmez.

Programlı yapmak için, kickstart dosyasını oluşturan seçtiğiniz dilin crypt kütüphanesini kullanın:

YAKUT:

'password'.crypt('$6$' + (Base64.encode64(6.times.map{ Random.rand(256).chr }.join)).strip)

PHP:

crypt ('password', '$6$' . base64_encode (openssl_random_pseudo_bytes(6)));

Perl:

crypt ('password', '$6$' . encode_base64 (join '' => map chr (rand (256)), 0..5))

Python:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

Tüm sunucularda aynı şifreyi kullanırsanız, her zaman, burada yaptığım gibi, rastgele bir tuz kullanmanız şiddetle tavsiye edilir.

DÜZENLE: Piton 3:

crypt.crypt("password", crypt.mksalt())

Aramayı değiştirir os.random şifreli ile mksalt.

Görmek Python Standart Kitaplığı: crypt: crypt.mksalt() : "Belirtilen yöntemin rastgele oluşturulmuş bir tuzunu döndür. Yöntem belirtilmezse, yöntemler () tarafından döndürülen en güçlü yöntem kullanılır"

DÜZENLE:

1) '$ 6 $' SHA512 içindir. Seçtiğiniz şifreleme türü ile değiştirmeniz gerekir.

2) Bunları bash yapmak için bunlardan herhangi birini tek bir astar haline dönüştürebilirsiniz.

DÜZENLE (tam bir cevap için, teşekkürler miken32 ve Davud):

3) BSD şifrelemesi, GNU'ya göre farklı bir uygulama olup, uyumlu değildir. Bunu BSD sistemlerinde (OSX gibi) kullanmak isterseniz, PHP'yi (PHP sürümü> 5.3.0 ile) kendi başlarına uygulayacak şekilde kullanabilirsiniz. kript () işlevi.

Mac üzerinde başka bir alternatif kullanmaktır passlib:

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'

veya glibc'nin varsayılan no. mermi (5000):

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.using(rounds=5000).hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'

5
2018-04-12 04:49



Bir atış verecek, ancak bunları kendim ks kuşağının bir parçası olarak üretebilmek istiyorum. - miken32
PHP benim için hile yaptı. Aşağıda dawud dikkat çekiyor, BSD crypt() Gnu'dan farklı crypt().Fortunately PHP, "PHP 5.3.0'dan itibaren PHP'nin kendi uygulamasını içerir ve eğer sistem bir veya daha fazla algoritmanın desteğinden yoksundur." - miken32


Karma bir şifre oluşturulduğu şekilde belgelendi İşte.

$ python -c 'import crypt; print(crypt.crypt("My Password", "$6$My salt"))'

Sizin için çalışmadığının nedeni, hash üretmek için bir Mac kullandığınız içindir. crypt Uygulama GNU / Linux birinden farklıdır.

İtibaren crypt(3) manpage:

   Glibc notes
   The glibc2 version of  this  function  supports  additional  encryption
   algorithms.

   If  salt is a character string starting with the characters "$id$" fol-
   lowed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine,  id  identifies  the  encryption
   method  used  and  this  then  determines  how the rest of the password
   string is interpreted.  The following values of id are supported:

          ID  | Method
          ---------------------------------------------------------
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So   $5$salt$encrypted   is   an   SHA-256   encoded    password    and
   $6$salt$encrypted is an SHA-512 encoded one.

   "salt" stands for the up to 16 characters following "$id$" in the salt.
   The encrypted part of the password string is the actual computed  pass-
   word.  The size of this string is fixed:

   MD5     | 22 characters
   SHA-256 | 43 characters
   SHA-512 | 86 characters

   The  characters  in  "salt"  and  "encrypted"  are  drawn  from the set
   [a-zA-Z0-9./].  In the MD5 and SHA implementations the  entire  key  is
   significant (instead of only the first 8 bytes in DES).

$id$ uzatma mevcut değil OSX crypt

SHA512 için bir GNU / Linux makinesinde karma üretmeniz gerekir.


3
2018-04-12 09:15



Cevabımda listelenen son kişi. Benim için 12 karakterlik bir sonuç üretti. Mac'tayım, ama bunun Python'un şifrelemeyi nasıl etkilediğini düşünmüyorum ... - miken32


Kickstart seçeneği için karma bir şifre oluşturma konusunda daha fazla bilgi edinebileceğiniz yeni dokümantasyon konumu: --iscrypted:

http://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#rootpw

python -c 'import crypt; print(crypt.crypt("My Password", "$6$My Salt"))

Bu, sağladığınız tuzu kullanarak şifrenizin sha512 şifresini üretecektir.


1
2018-01-17 16:37



Belgelere bir bağlantı iyidir, ancak hangi komutun çalıştırılacağını göstermek daha yararlıdır. - Andrew Schulman
Cevabım için daha fazla tazelik ekledim. Başlangıçta @dawud için bir ölü bağlantı düzeltmesi olduğu düşünülüyordu, ancak daha fazla itibara sahip olana kadar diğer yayınları yorumlayamıyorum / düzenlemem. - mastash3ff


Yukarıdaki Python örneği eksik:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

Çalışan bir tek liner olurdu:

python -c 'import crypt,base64,os; print(crypt.crypt("password", "$6$" + base64.b64encode(os.urandom(6))))'

Python 3 altında

python -c 'import crypt; print(crypt.crypt("password", crypt.mksalt()))'

0
2017-07-17 12:05



Yukarıdaki iki Python örneğinden hangisi eksik? - ceejayoz