useradd não permite que o usuário efetue logon

2

Em um Ubuntu 14.04.2 LTS, o seguinte comando:

adduser fu

e, em seguida, inserindo uma senha bar e apenas pressionando Enter em todas as outras perguntas, cria um usuário que me permite efetuar logon e possui as seguintes características em /etc/passwd :

fu:x:1002:1002:,,,:/home/fu:/bin/bash

No entanto, fazendo um:

useradd fu --password bar --groups adm,cdrom,sudo,dip,plugdev,lpadmin --shell /bin/bash --create-home

cria em /etc/passwd

fu:x:1002:1002::/home/fu:/bin/bash

e não me permite fazer logon e adicionar --user-group não ajuda nem ...

Como preciso de useradd (para um script de encaixe) como procedo?

P.S. Já dei uma olhada no /usr/sbin/adduser , mas como é perl não é óbvio para mim quais parâmetros adicionar ao adduser para ter a mesma funcionalidade que useradd

    
por Fabby 28.04.2015 / 16:21

2 respostas

2

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
por kos 28.04.2015 / 21:21
2

Isso pode não estar funcionando porque sua senha bar não está criptografada. A página man para useradd states:

% bl0ck_qu0te%

This A pergunta sobre o Stack Overflow tem algumas respostas que podem ajudá-lo com seu script, pois a pergunta é sobre como adicionar um usuário junto com uma senha.

Como a resposta aceita não foi atualizada nessa questão com base nos comentários dos usuários, reproduzirei a solução aqui:

echo -e "bar\nbar\n" | passwd fu

Esse comando alterará a senha de um usuário fu to bar . O usuário precisa ter sido criado usando useradd, é claro.

Outra solução seria usar chpasswd , como a segunda resposta mais votada sugere:

echo fu:bar | chpasswd

Eu testei ambas as soluções e as duas funcionam.

Editado para remover adduser info e indicar quais sugestões da pergunta vinculada realmente funcionam.

    
por yzhernand 28.04.2015 / 17:01