Como adicionar um usuário do Linux com uma senha aleatória ou inválida de um script

4

Eu quero adicionar um usuário ao sistema linux de um script, mas não quero inventar ou cuidar da senha. Isso deve ser feito automaticamente.

O objetivo é gerar chaves ssh e esse usuário precisa apenas fazer o login remotamente. Ou, alternativamente, esse usuário será usado por um usuário do sudo via sudo su - thatuser .

Eu quero salvar o incômodo de inventar e digitar algumas senhas seguras toda vez que eu criar esse usuário, e também fazer isso a partir de scripts.

Ninguém deve ser capaz de logar com a senha como usuário, então minha ideia é que ele tenha uma boa senha aleatória, mas ninguém sabe disso.

Eu poderia escrever um script que gera algo ramdom mas mabye há algo embutido? Ou apenas desative a senha (para que o login da senha não seja possível, mas o login do ssh com chaves e sudo su - thatuser funcionem bem.

Editar: Já existem algumas respostas, ótimo, mas ainda não sei como fazê-lo. Como seria o roteiro?

Ele deve se comportar como adduser e criar tudo o que for padrão (como std. home dir, esqueleto copiado, grupo com o mesmo nome)

Edit2: No final e com a sua ajuda, encontrei uma solução que funciona e quero compartilhá-la. Este é um script que eu chamo de "adduser-nopasswd" e eu coloco em / usr / local / sbin (este é um bom lugar?) E ele pode ser executado apenas pelo root. Leva um argumento, que é o nome do novo grupo e usuário ao mesmo tempo:

#!/bin/sh -e
# the -e makes the script exit immediateley if one command fails
NAME=$1
groupadd $NAME
useradd --create-home -d /home/$NAME --shell /bin/bash -g $NAME $NAME

Algum comentário sobre esta função?

    
por user12096 16.07.2009 / 14:08

6 respostas

14

Se você não especificar uma senha para useradd , ela não será configurada (e o usuário não poderá efetuar login por senha). Observe que useradd e adduser são dois comandos diferentes.

O seguinte deve criar o novo usuário com seu próprio grupo, criar seu diretório pessoal (no local padrão, já que não especificamos nenhum local) e copiar arquivos de esqueleto.

useradd --create-home <user>

Em seguida, basta criar o diretório .ssh em seu diretório inicial, chmod it para 0700 (o SSH desejará isso para segurança) e colocar a chave pública dos usuários em .ssh/authorized_keys (a chave privada / pública par deve ser gerado pelo próprio usuário, em seu próprio computador).

Se você quiser desativar a senha de uma conta já existente, use o seguinte.

usermod --lock <user>
    
por 16.07.2009 / 14:15
3

O utilitário / usr / sbin / useradd sempre criou usuários para mim sem exigir senhas. Eu escrevi muitos scripts que pegaram o / etc / passwd de outro sistema e criaram usuários para mim.

Como alternativa, se você observar a documentação do mercurial-server, verá como configurar várias chaves SSH (clientes) para executar programas como apenas um usuário no lado do servidor.

    
por 16.07.2009 / 14:12
2
# cat user-pw_list
john:p455W0rD
geany:p455W0rD


# cat CreateUsers.sh
#!/bin/bash
#
# filename: CreateUsers.sh
# usage: cat "User:passwd" | $0
#
set -e
# set -x
while read ; do
  USER=${REPLY%%:*}
  PWD=${REPLY##*:}
  # alternative for random passwd, where $RANDOM is a bash function
  #PWD=${REPLY%%:*}$RANDOM$RANDOM

  echo -e "adding User $USER "
  # for disabled users: /usr/sbin/nologin, otherwise /bin/bash
  /usr/sbin/useradd -c automaticUser -m -k/dev/null -s /usr/sbin/nologin $USER
  echo "$USER:$PWD" | chpasswd --md5 $USER

  ## also add user to samba:
  #echo -e "$PWD\n$PWD" | pdbedit -t -u $USER
done

Ok, vamos adicionar nossos usuários:

cat user-pw_list | ./CreateUsers.sh
    
por 16.07.2009 / 15:50
1

Se você quiser apenas comandos incorporados para gerar senhas aleatórias, tente isto:

dd se = / dev / urandom bs = 16 contados = 1 2 > / dev / null | uuencode - | cabeça -n 2 | grep -v begin | corte -b 2-10

Isto irá ler 16 bytes de dados aleatórios, codificá-los para convertê-los em caracteres imprimíveis, cortar a saída extra do uuencode e, em seguida, usar apenas os caracteres aleatórios da codificação. Aqui está um exemplo de saída:

$ dd se = / dev / urandom bs = 16 contados = 1 2 > / dev / null | uuencode - | cabeça -n 2 | grep -v begin | corte -b 2-10

RJ < B6QYRO

    
por 17.07.2009 / 00:18
0

Coloque um * no campo de senha em / etc / shadow (isso deve acontecer se você não definir uma senha). Isso impedirá que o usuário faça o login.

    
por 16.07.2009 / 14:15
0

Eu uso o passook para gerar senhas nos servidores de login que eu mantenho. Enquanto o login não é um requisito no seu caso, acho que quando ele é, o passook gera senhas memoráveis o suficiente.

    
por 16.07.2009 / 15:25