Como adicionar usuários de dados em um arquivo de texto

0

Eu sou um iniciante no linux. Eu tenho uma pergunta sobre a criação de vários usuários no linux, mas eu preciso de um programa para trabalhar nele. Há um novo arquivo txt de usuários, o conteúdo está seguindo:

adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash

... (há 70 nomes de usuários no arquivo)

Eu gostaria de saber como escrever um script para adicionar esses usuários automaticamente. Alguém poderia me dar alguma orientação? Eu realmente agradeço!

    
por pete 23.06.2016 / 20:59

3 respostas

2

Digamos que seu arquivo tenha apenas o nome file . Este script fará o trabalho:

USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"

ID=$(cat file | cut -d: -f2)
echo "$ID"

USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"

useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"
    
por 23.06.2016 / 22:14
1

Este é um script mínimo para realizar o trabalho. Isso garante que nem o nome de usuário nem o uid já estão em uso. Ele faz um grupo correspondente para cada usuário (com gid = uid) - ele não verifica se o nome do gid ou do grupo já existe (deixado como um exercício para o leitor - dica: use getent group ).

Nota: o script abaixo não foi testado, mas eu escrevi scripts muito parecidos um milhão de vezes antes (exagero) .... pode haver alguns bugs menores que precisam ser consertados.

#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"

# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
 uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"

yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"

while IFS=: read u uid gecos shell; do
    gid="$uid" ; homedir="/home/$u"

    useradd  -e "$yesterday" -m -d "$homedir" -c "$gecos" \
             -u "$uid" -g "$gid" -s "$shell" "$u"

    groupadd -g "$gid" "$u"

    # generate a random password for each user..
    p=$(makepasswd)
    echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")

# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2    

# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"

# set passwords using 'chpasswd:
chpasswd < "$tf"

Use pwgen ou makepassword ou qualquer programa semelhante se makepasswd não estiver instalado. Ou escreva o seu próprio que concatene 4+ palavras aleatórias de 5 ou mais letras para obter uma senha fácil de lembrar com pelo menos 20 caracteres - capitalize algumas palavras e insira números aleatórios de 1 a 3 dígitos ou um símbolo de pontuação entre cada palavra para tornar a senha ainda mais tempo e aumentar o espaço de busca de força bruta. Geração de senha aleatória é algo que foi reinventado muitas vezes.

Você pode imprimir os nomes de usuário e senhas (de "$tf" ) e cortá-los em tiras (deixar algumas linhas em branco entre cada user:password ) para dar a cada usuário. Diga-lhes para alterar sua senha imediatamente e destruir a tira de papel. As senhas são configuradas para expirar "$yesterday" (requer GNU date ), portanto, os usuários devem ser solicitados a alterá-las na primeira vez que fizerem login no shell.

    
por 24.06.2016 / 10:51
0

Há uma maneira mais fácil de adicionar ou atualizar usuários de um arquivo no modo em lote: o comando newusers(8) , que é fornecido pelo ferramenta de sombra swite. O pacote de ferramentas deve estar disponível como um pacote para pelo menos o Debian e seus derivados. Está disponível no Arch Linux, que estou usando.

Para obter informações sobre como usá-lo, consulte man newusers

    
por 01.10.2016 / 13:59