mik*_*n32 5 kickstart anaconda rhel6 scientific-linux
我尝试了几种在 SL 6.5 上生成加密密码的不同方法,但似乎对我没有任何作用。我在各种 /var/log/anaconda* 文件中的任何地方都没有发现任何错误,但我无法登录,因此它显然无法正常工作。
/root/anaconda-ks.cfg
我用作模板的原始自动创建文件如下所示:
rootpw --iscrypted $6$...(about 100 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
接下来我尝试了openssl passwd -1
这给了我:
rootpw --iscrypted $1$...(about 30 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
我意识到这不是 SHA-512,所以我尝试了一个 Python one-liner 我发现在几个地方重复:
rootpw --iscrypted $6...(about 10 characters)
authconfig --enableshadow --passalgo=sha512
Run Code Online (Sandbox Code Playgroud)
没有任何效果;我无法登录,最终不得不在单用户模式下重置 root 密码。
确保机器上有 shadow 和 passalgo=sha512,将 root pass 设置为该机器上您想要的任何密码,然后从 /etc/shadow 中获取它并将其放入 kickstart。这对于生产用途是不可取的。
要以编程方式执行此操作,请使用生成 kickstart 文件的所选语言的 crypt 库:
红宝石:
'password'.crypt('$6$' + (Base64.encode64(6.times.map{ Random.rand(256).chr }.join)).strip)
Run Code Online (Sandbox Code Playgroud)
PHP:
crypt ('password', '$6$' . base64_encode (openssl_random_pseudo_bytes(6)));
Run Code Online (Sandbox Code Playgroud)
珀尔:
crypt ('password', '$6$' . encode_base64 (join '' => map chr (rand (256)), 0..5))
Run Code Online (Sandbox Code Playgroud)
Python:
crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))
Run Code Online (Sandbox Code Playgroud)
强烈建议您每次使用随机盐,就像我在这里所做的那样,特别是如果您在所有服务器上使用相同的密码。
编辑: Python 3:
crypt.crypt("password", crypt.mksalt())
Run Code Online (Sandbox Code Playgroud)
os.random
用特定于 crypt 的替换对 的调用mksalt
。
请参阅Python 标准库:crypt :: crypt.mksalt()
“返回指定方法的随机生成的盐。如果没有给出方法,则使用 methods() 返回的可用最强方法”
编辑:
1) '$6$' 用于 SHA512。您需要将其替换为您选择的加密类型。
2)您也可以将其中任何一个转换为一个衬垫,以便从 bash 中完成。
3) BSD crypt 与 GNU 相比是一种不同的实现,因此它们不兼容。如果您想在 BSD 系统(如 OSX)上使用它,您可以使用 PHP(PHP 版本 > 5.3.0)版本,因为它实现了自己的crypt()函数。
mac 上的另一种选择是使用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 "")'
Run Code Online (Sandbox Code Playgroud)
或者,使用 glibc 的默认编号。回合数(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 "")'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13710 次 |
最近记录: |