Programaticamente a construção de nagiosadmin
-
09-06-2019 - |
Pergunta
Existe uma programação para construir nagiosadmin arquivos, sem depender SO de funções específicas (i.e. exec()
, passthru()
)?
Solução
.httpasswd arquivos são apenas arquivos de texto com um formato específico, dependendo da função de hash especificado.Se você estiver usando MD5 eles se parecem com isso:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
Esse é o início de sessão, dois-pontos ,$apr1$, o sal e 1000 vezes md5 codificado em base64.Se você selecionar SHA1 eles se parecem com isso:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
Esse é o início de sessão, dois pontos, a seqüência {SHA} e o hash SHA1 codificado com base64.
Se o seu idioma foi uma implementação de um MD5 ou SHA1 e codificação base64 você pode apenas criar o arquivo como este:
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
Veja mais informações sobre o formato de:
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
Outras dicas
Trac fornecido com uma Píton de substituição para htpasswd, que eu tenho certeza que você poderia porta para a linguagem de sua escolha: htpasswd.py.
A partir do que ele diz sobre o PHP site, você pode usar crypt() do seguinte método:
<?php
// Set the password & username
$username = 'user';
$password = 'mypassword';
// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);
?>
Parte deste exemplo pode ser encontrado: http://ca3.php.net/crypt
Este será, naturalmente, substituir todo o arquivo existente, de modo que você vai querer fazer algum tipo de concatination.
Eu não tenho 100% de certeza de que isso vai funcionar, mas tenho quase certeza.