Problema # 1:
As vírgulas na entrada do usuário em /etc/passwd
são apenas separadores de campo para informações do usuário, como "Nome completo", "Número da sala", "Telefone comercial" e "Telefone residencial", por isso eu acho
Problema # 2:
Na página Trusty man
para useradd
:
[...] -p, --password PASSWORD The encrypted password, as returned by crypt(3). The default is to disable the password. Note: This option is not recommended because the password (or encrypted password) will be visible by users listing the processes. You should make sure the password respects the system's password policy. [...]
Isso significa que a senha esperada por useradd
é uma senha já criptografada (a julgar pelo meu teste em SHA-512
): na verdade, a string passada como um argumento para a opção -p
é escrita como texto simples em /etc/shadow
e senhas lidas aqui no login devem ser criptografadas.
Portanto, a solução mais simples é definir a senha usando passwd
:
echo -e 'bar\nbar' | passwd fu
Se você não pode usar passwd
, este comando python em um subshell como um argumento para a opção -p
deve ser:
python -c 'import crypt; print crypt.crypt("bar", "$6$'$(< /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32)'")'
Resumo dos comandos :
python -c 'import crypt; print crypt.crypt("<string>", "$<encryption_type>$<encryption_salt>")'
* < string > = string para criptografar; < encryption_type > = tipo de criptografia; < encryption_salt > = sal de criptografia
Criptografa um <string>
usando <encryption type>
e <encryption_salt>
usando a chamada da biblioteca crypt()
Neste caso:
-
<string>
=bar
, a senha para criptografar -
<encryption_type>
=6
,SHA-512
-
<encryption_salt>
=< /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32
, sequência aleatória de 32 caracteres