Como atribuir uma senha inicial / padrão a um usuário no Linux?

10

Encontrei um guia que explica como definir a senha de um usuário . Estou tentando automatizá-lo e enviar um email para o usuário como:

userid created with password XYZ.
request to change the initial password.

De acordo com o documento acima, uma senha criptografada precisa ser criada usando Python e alimentada com o usermodcomando da seguinte maneira:

 usermod -p "<encrypted-password>" <username>

Existem outras maneiras mais simples de fazer isso? Não quero baixar nenhum utilitário especial para fazer isso; deve ser generalizado o máximo possível.


Edit : Mesmo o método fornecido no link acima parece não funcionar para mim:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
munish
fonte
Aqui está mais um elo i encontrado, mas não parece um problema de segurança também com o uso de opção -p em usermodquando usos alguém pspara ver processo de listagem a senha é visível
Munish

Respostas:

13

Você pode usar chpasswdpara fazer isso, assim:

echo "username:newpassword" | chpasswd

Você pode entrar chpasswdem programas que não sejam echo, se for conveniente, mas isso funcionará.

Editar: para gerar a senha dentro do script shell e configurá-la, você pode fazer algo assim:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Para mais informações chpasswd, consulte http://linux.die.net/man/8/chpasswd

(O comando para gerar a senha era de http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Dominick Pastore
fonte
obrigado @Dominick hmm, talvez o chpasswd esteja no AIX ... eu não o usei. e evrytime eu tenho que escrever uma senha ... não pode ele ser gerado pelo script como nas perguntas Link ... infelizmente, mesmo que não funcionou para mim
Munish
@ Munish Não sei bem o que você quer dizer com gerar no script, mas atualizei minha resposta para, espero, ser mais útil.
Dominick Pastore
Não funciona. "Erro de manipulação de token de autenticação"
Cerin 30/06
@Cerin Por acaso você está fazendo algo parecido sudo echo "username:newpass" | chpasswd? Como as permissões elevadas de sudonão passam pelo canal, elas chpasswdseriam executadas como um usuário normal. Pode ser corrigido movendo o sudo, como em echo "username:newpass" | sudo chpasswd. Também existem outros problemas que podem causar essa mensagem de erro, mas erros de permissão como esse são provavelmente os mais comuns.
Dominick Pastore
1
As senhas na linha de comando podem estar visíveis para outros usuários conectados na mesma máquina usando w, ps ou outros comandos que mostram informações sobre outros processos. As senhas definidas dessa maneira devem ser alteradas pelo usuário o mais rápido possível.
Mnebuerquo 28/01
3

Você pode usar o OpenSSL para gerar a senha aleatória (16 caracteres, neste caso):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Em seguida, alimente a senha com hash useraddouusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Crédito no vencimento: a geração da senha é adaptada de um método semelhante usado em /dev/urandomvez de openssl.

James Sneeringer
fonte
2

useradd deve funcionar (eu fiz no Ubuntu). Talvez verifique se cada um de seus argumentos está correto (existem grupos, o caminho é correto). Você pode executar o comando apenas com uma senha e um usuário e, em seguida, usar o userdel para remover e tentar novamente com mais parâmetros, para ver o que causa o problema (abordagem de força bruta).

Há também usuários novos (veja a página de manual), pelo menos no Ubuntu, onde você fornece um arquivo com arquivo passwd, como informações, incluindo senhas em texto simples e isso criará esses usuários. Ótima maneira de fazer muitos usuários ao mesmo tempo.

pcm
fonte
+1 para mencionar o newuserscomando do Ubuntu
Levon
1

maneira mais simples que encontrei:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
fonte
Você ainda testou isso? passwd: unrecognized option '--stdin'
Cerin
Sim, eu usei isso muitas vezes, mas, como em quase qualquer outro comando, não é a solução definitiva para o problema em questão. Algumas variações do binário passwd, não suportam a opção --stdin.
21414 MelBurslan