como criar usuários em tempo real

1

Esta é apenas uma má ideia que acabei de ter.

Existe uma maneira de criar contas de usuários em tempo real?

Digamos que eu tenha criado um Ubuntu vm, e eu quero dar acesso a um monte de pessoas. Mas por alguma razão eu não me importo particularmente com o que eles fazem com isso.

Como posso configurá-lo quando o usuário A ssh na vm a conta do usuário for criada automaticamente?

e sim, eu sei, em teoria, que eu poderia criar uma conta de convidado e compartilhar isso com as pessoas que precisam de acesso. mas um monte de pessoas estará compartilhando a conta e eu também quero registrar o que todo mundo fez, então tê-los na mesma conta tornaria isso muito difícil.

e sim, esta é uma péssima ideia.

    
por D.Zou 20.06.2015 / 20:05

2 respostas

0

Eu gosto de um desafio. Sim, você pode fazer isso, se estiver disposto a deixar o primeiro ssh falhar. O seguinte script (que eu realmente testei) coroa o log sshd, que por padrão (no meu sistema) produz linhas como esta em um login com falha ssh:

Jun 20 21:06:35 home sshd[18163]: Invalid user dummy from ::1

Quando essa linha é correspondida, o ID do usuário (fictício neste exemplo) é extraído e uma conta de usuário é criada com uma senha criptografada que é o mesmo que o id do usuário (fictício). Uma segunda tentativa de login agora funcionará.

# encrypt a cleartext password given as arg
cryptpw(){
        perl -e '
        my $pw = "'"$1"'";
        my $salt = join("",("a".."z")[rand 26,rand 26]);
        printf "%s\n", crypt($pw,$salt);'
}

sudo journalctl --no-pager -lfu sshd | 
while read line
do    if [[ "$line" =~ "Invalid user "([^ ]*) ]]
      then  newuser=${BASH_REMATCH[1]}
            pw=$(cryptpw "$newuser")
            sudo useradd "$newuser" -p "$pw"
      fi
done

O usuário pode então copiar sua chave para o controle remoto:

ssh-copy-id dummy@host

Se eles ainda não tiverem uma chave, faça primeiro:

ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''
    
por meuh 20.06.2015 / 21:30
0

Usando python :

#!/usr/bin/env python2
import re, crypt, subprocess

with open('/var/log/auth.log') as logfile, open('/etc/passwd') as passfile:
    given_usernames = []
    for line in logfile:
        name = re.search(r'(?<= Invalid user ).*?(?= from)', line)
        if name:
            given_usernames.append(name.group())

    current_usernames = []
    for line in passfile:
         current_usernames.append(re.search(r'^[^:]+', line).group())

    for i in given_usernames:
        if i not in current_usernames:
            password = crypt.crypt(i + str(123), 'foobar12')
            subprocess.call('sudo useradd -m -p {0} {1}'.format(password, i).split())
  • Quando um usuário tentar fazer login em um computador usando ssh e não tiver uma conta existente, o login será negado e esse incidente será registrado no arquivo /var/log/auth.log com uma linha, por exemplo:

    Jun 21 01:11:03 my_hostname sshd[17763]: Invalid user foobar from 192.168.4.2
    
  • exploraremos essa linha para extrair o nome de usuário fornecido para criar uma conta para esse usuário, para que, na próxima vez, o usuário possa fazer login sem qualquer problema

  • Usamos a senha como o nome de usuário fornecido mais 123 (o sal é foobar12 ), ou seja, se um nome de usuário for spamegg , a senha será spamegg123 . Você pode alterá-lo e sal para qualquer valor que você quiser e, claro, o usuário deve alterar a senha após o login pela primeira vez

  • Nesta abordagem, todos os nomes de usuário do arquivo /var/log/auth.log são incluídos em uma lista e, da mesma forma, todos os nomes de usuário de /etc/passwd também são incluídos em uma lista.

  • Em seguida, verificamos se o nome de usuário inserido já existe, senão o usuário é criado com a senha mencionada anteriormente.

  • Você pode executá-lo como um trabalho cron para garantir que os nomes de usuários sejam adicionados automaticamente.

por heemayl 20.06.2015 / 22:27