Eu tento adicionar um usuário interativamente via “useradd”

1

Estou basicamente tentando escrever um script simples para permitir o uso interativo de "useradd" com opções de seleção.

As opções que estou tentando permitir para uso específico são definidas interativamente ou definidas para as próximas configurações padrão ou disponíveis.

O principal problema que estou tendo é como conseguir que os próximos valores disponíveis ocorram para valores como id de grupo e grupos.

Eu imagino que posso definir valores predefinidos para o diretório inicial e shell, mas eu queria descobrir se existe um método de força não tão bruta diferente de fazer constantes para essas variáveis.

Aqui é onde eu cheguei até agora:

#!/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
    read -p "Enter group id or [default to next available]: " gid
    read -p "Enter additional groups or [default to next available]: " group
    read -p "Enter home directory or [default to next available]: " hdir
    read -p "Enter desired shell or [default to next available]: " difshell

    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 -p$pass -g$gid -G$group -d$hdir -s$difshell $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
    
por user3347022 27.10.2014 / 09:58

1 resposta

1

Eu não sei o que você quer dizer com "next available" com relação às variáveis $ HOME e $ SHELL. Aqueles que você acabou de definir para seus padrões: /home/USERNAME e /bin/bash ou qualquer outra coisa. Para o $HOME , apenas certifique-se de que o diretório não exista ( [ -e "/home/$username" ] && echo "Directory exists" ).

Quanto aos grupos, apenas liste os grupos disponíveis e escolha o próximo. A política Debian em grupos (e eu acredito que isto não está restrito a Debian) afirma que os usuários normais devem ter GIDs entre 1000 e 5999. Portanto, tudo que você precisa fazer é analisar /etc/passwd , imprimir os grupos existentes nesse intervalo e, em seguida, adicionar um:

grp=$(awk -F: '$4>=1000 && $4<6000{print $4+1}' /etc/passwd | sort -n | tail -n1)

O comando awk imprimirá o valor do 4º campo separado : mais 1 se o seu valor estiver entre 1000 e 6000. Isso é então classificado e a linha lat é mantida. O resultado é um GID que é um maior que o atual maior.

    
por 27.10.2014 / 15:07