Como fazer um arquivo de lote adicionar usuários a grupos?

2

Preciso de ajuda com um projeto do GCSE, estou preso na última pergunta. Ele pede um script bash para criar usuários e depois atribuí-los aos grupos. Eu já fiz o script adicionar novos usuários, mas não tenho certeza de como adicioná-los aos grupos no script bash (script bash feito com nano ).

Alguma ajuda / exemplos?

Meu script atual:

#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
        useradd -m -p $pass $username
        [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
    fi
else
    echo "Only root may add a user to the system"
    exit 2
fi

(parece algo assim)

    
por Chipiee 15.05.2015 / 00:40

1 resposta

4

Você pode usar este script modificado:

#!/bin/bash
# Script to add a user to Linux system

if [ "$(id -u)" -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    IFS=' ' read -a grps -p "Enter group names : "

    if grep "^${username}:" /etc/passwd &>/dev/null; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)

        if useradd -m -p "$pass" "$username" &>/dev/null; then
            echo "User has been added to system!"

            for grp in "${grps[@]}"; do
                usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
                || echo "Failed to add user to group $grp"
            done

        else
            echo "Failed to add a user!"
        fi
     fi

else
    echo "Only root may add a user to the system"
    exit 2
fi

Note que você deve sempre citar as variáveis.

Aqui eu adicionei principalmente duas coisas:

  • IFS=' ' read -a grps -p "Enter group names : " solicitará que o root forneça nomes de grupos separados por espaços dos quais o usuário recém-criado será membro de

  • Em seguida, este curto for executa um loop sobre os valores da matriz grps :

    for grp in "${grps[@]}"; do
         usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
         || echo "Failed to add user to group $grp"
    done
    

Dado que os grupos já existem. Caso contrário, você pode usar groupadd para criar o grupo e, em seguida, adicionar o usuário a esse grupo.

Aqui usamos usermod para adicionar o usuário a um grupo existente, esses grupos serão complementares para o usuário.

Verifique man usermod para detalhes.

Observe que você não deve usar egrep , ele está obsoleto em favor de grep -E . Na verdade, neste caso, você não precisa de grep -E .

Seu padrão grep falhará em alguns casos. se você tiver um usuário foobar e estiver adicionando um novo usuário chamado foo . Para superar isso, corresponda o nome de usuário seguido por um : (dado que nenhum nome de usuário possui : ):

grep "^${username}:" /etc/passwd &>/dev/null

Envie também STDERR para /dev/null .

Isso pode ser simplificado como:

if grep "^${username}:" /etc/passwd &>/dev/null; then
        echo "$username exists!"
        exit 1
else ......

Além disso, a próxima instrução if com useradd pode seguir isso.

** Outras melhorias também podem ser feitas no seu script atual, que não se encaixam nesse contexto.

    
por heemayl 15.05.2015 / 01:17