Scripts adduser (para criar usuários) em distros não Debian - Para iniciantes

Publicado por Alberto Federman Neto. em 09/06/2014

[ Hits: 8.611 ]

Blog: https://ciencialivre.blog/

 


Scripts adduser (para criar usuários) em distros não Debian - Para iniciantes



Introdução

Para criar usuários em GNU/Linux, deve-se usar o comando useradd:
Esses usuários podem ser associados a grupos, ter diretórios /home, senhas, usarem ou não sudo e etc, às vezes, usando comandos complementares:
Isso tem a vantagem de dar total controle ao administrador do sistema, o root.

Porém, para o iniciante, scripts podem automatizar as tarefas e facilitam muito:
O principal e o mais conhecido desses scripts, se chama adduser:
Porém, é típico das distros baseadas em Debian: Ubuntu Manpage:

E, geralmente (embora não sempre), não existe em outros tipos de GNU/Linux. Por exemplo, no Fedora e no antigo Gentoo, o comando adduser é idêntico (apenas link simbólico ou alias) ao useradd:
Atualmente, nem existe mais comando adduser em Gentoo e Sabayon. Resolvi implementá-lo, para facilitar para o iniciante.

Em distros baseadas em Debian, as versões de adduser são geralmente escritas em Perl (não em bash script):
Inclusive a versão oficial, o pacote adduser:

Preparando os scripts

Eu tentei baixar e testar, adaptar as versões de adduser em Perl, porém, sem sucesso. Não há compatibilidade de certas bibliotecas, além dos scripts necessitarem de infra-estrutura tipo Debian, inexistentes em Gentoo ou Sabayon.

Entretanto, existem versões em bash script e essas rodam universalmente em todas as distros. Testei dois desses scripts (e eles funcionaram):
Por isso, eu traduzi os dois scripts para Português do Brasil, e os publico aqui.

O primeiro script se chamará adduser1.sh (autoria, Nixcraft, EUA, 2009).

Observação: nesse script, aparece o termo "GECOS", é o campo para comentários do usuário:
#!/bin/bash

# Por Nixcraft, EUA (2009).
# URL: nixcraft.com/showthread.php/12744-Linux-Add-User-Shell-Script
# Traduzido por Albfneto, Brasil (2014).


ADMINDIR=/home/admin
ADMINGROUP=admin
BASEDIR=/home
USRSHELL=/bin/bash

USERNAME=""
NORMAL=""
ADMIN=""
ARGS=""
TRUE=0
FALSE=1

usage(){
    echo "Usar: $0 {-a|-n} [ -c GECOS ] {-u username}"
    echo ""
    echo " -a          : Criar Superusuario"
    echo " -n          : Criar usuario normal"
    echo " -c GECOS    : Setar campo GECOS para o novo usuario"
    echo " -u username : Setar nome de LOGIN"
    echo ""
    exit 1
}


isUserExits(){
    grep $1 /etc/passwd > /dev/null
    [ $? -eq 0 ] && return $TRUE || return $FALSE
}

createNewUser(){
    /usr/sbin/useradd "$@"
}

while getopts anc:u: option
do
        case "${option}"
        in
                a) ADMIN="TRUE";;
                n) NORMAL="TRUE";;
                c) GECOS=${OPTARG};;
                u) USERNAME=${OPTARG};;
                \?) usage
                    exit 1;;
        esac
done

[ "$USERNAME" == "" ] && usage
[ "$USERNAME" != "" -a "$ADMIN" == ""  -a "$NORMAL" == ""  ] && usage
[ "$ADMIN" == "TRUE"  -a "$NORMAL" == "TRUE"  ] && usage

if [ $(id -u) -ne 0 ]
then
    echo "Voce precisa ser Root para rodar o Script"
    exit 2
fi

[ "$GECOS" != "" ] && ARGS="-c $GECOS"

if [ "$ADMIN" == "TRUE" ]
then
    if ( ! isUserExits $USERNAME )
    then
        createNewUser -s $USRSHELL -g $ADMINGROUP -d $ADMINDIR $ARGS $USERNAME
    else
        echo "Username \"$USERNAME\" exists in /etc/passwd"
        exit 3
    fi
fi

if [ "$NORMAL" == "TRUE" ]
then
    if ( ! isUserExits $USERNAME )
    then
        createNewUser -m -b $BASEDIR -s $USRSHELL $ARGS $USERNAME
    else
        echo "Username \"$USERNAME\" exists in /etc/passwd"
        exit 3
    fi
fi

exit 0

Para preparar os scripts, abra seu editor de texto em modo root. Eu usei o editor Kate, mas você pode usar o que quiser, ou o padrão da sua distro:

kdesu kate    # Ou o nome do seu editor: gedit, kwrite, etc...

Copie e cole as linhas dos scripts, e salve em uma pasta que conheça a localização. Por exemplo, eu salvei em ~/Desktop/PACOTES.

Se não quiser preparar os scripts, você pode baixá-los prontos da minha área de download público do Dropbox:
Feitos os scrips, dê permissão de execução:

sudo chmod +x adduser1.sh
E/ou:
sudo chmod +x adduser2.sh

E execute (veja abaixo).

Testando

Eis os testes dos scripts, mostrando que criam o usuário e a respectiva pasta /home:

Criando usuários (teste e teste3) com o script 1:

sudo sh adduser1.sh
Senha:

Usar: adduser.sh {-a|-n} [ -c GECOS ] {-u username}

 -a          : Criar Superusuario
 -n          : Criar usuario normal
 -c GECOS    : Setar campo GECOS para o novo usuario
 -u username : Setar nome de LOGIN


Criando os dois usuários, um com comentário, outro sem:

sudo sh adduser1.sh -n teste
$ sudo sh adduser1.sh -n -c "Benvindo" -u teste3


Vejam os usuários criados:

grep teste /etc/passwd
teste:x:1001:1020::/home/teste:/bin/bash
teste3:x:1002:1002:Benvindo:/home/teste3:/bin/bash


Criando usuário (teste2) com o script 2:

A mensagem de senha incorreta, é porque eu testei com uma palavra muito simples, mas ele homologou a senha mesmo assim:

sudo sh adduser2.sh
 Requer 2 Parametros : Nome de Usuario e Senha...

sudo sh adduser2.sh teste2 senha2

Nova senha:SENHA INCORRETA: é uma palavra da língua portuguesa
Redigite a nova senha:passwd: senha atualizada com sucesso
 User teste2 Usuario adicionado ao Sistema com sucesso

 Voce quer adicionar esse Usuario ao Sudoers, o Sudo? (s/n)
s

 User teste2 Adicionado com sucesso ao Sudoers!!!


grep teste /etc/passwd
teste:x:1001:1020::/home/teste:/bin/bash
teste3:x:1002:1002:Benvindo:/home/teste3:/bin/bash
teste2:x:1003:1003::/home/teste2:/bin/bash


Scripts e pacotes alternativos

Você pode testar o clássico script-pacote: useradd do Slackware:
Em sua versão modificada, superadduser, se ele existir para sua distro, porque ele deve rodar em outras distros.

Você pode baixar uma versão completa, aqui:
Mas, em Gentoo e Sabayon, o pacote superadduser já existe nos repositórios:
Mas não está totalmente traduzido. Instale-o, através destes comandos:

Em Gentoo:

# emerge --sync
# emerge -av superadduser


Em Sabayon:

# equo up
# equo i superadduser


Execute diretamente, como root:

sudo superadduser

Eis o pacote, funcionando:

sudo superadduser
Senha:

Login name for new user []: teste4

User ID ('UID') [ defaults to next available ]:

Initial group [ users ]:

Additional groups (comma separated) []:

Home directory [ /home/teste4 ]

Shell [ /bin/bash ]

Expiry date (YYYY-MM-DD) []:

New account will be created as follows:

---------------------------------------
Login name.......:  teste4
UID..............:  [ Next available ]
Initial group....:  users
Additional groups:  [ None ]
Home directory...:  /home/teste4
Shell............:  /bin/bash
Expiry date......:  [ Never ]

This is it... if you want to bail out, hit Control-C.  Otherwise, press
ENTER to go ahead and make the account.

# APERTAR ENTER:

Creating new account...

Modificando as informações de usuário para teste4
Informe o novo valor ou pressione ENTER para aceitar o padrão
        Nome Completo []: Usuario Teste 4
        Número da Sala []: 1
        Fone de Trabalho []: (16)3030-3030
        Fone Residencial []: (16)7777-7777
        Outro []: (11)8888-8888
Nova senha:
Redigite a nova senha:
passwd: senha atualizada com sucesso
Account setup complete.


Eis o usuário:

grep teste /etc/passwd
teste4:x:1002:100:Usuario Teste 4,1,(16)3030-3030,(16)7777-7777,(11)8888-8888:/home/teste4:/bin/bash

Removendo usuários e pastas

Naturalmente, por serem testes, necessitei remover os usuários criados e os respectivos diretórios /home. Um jeito simples de fazer isso, é:

sudo userdel -f -r USUARIO

Onde "USUARIO", é o nome do usuário criado.
No caso, apliquei o comando aos usuários "teste", "teste2", "teste3" e "teste4", removendo-os.

Conclusão

Você pode adaptar os pacotes e/ou scripts adduser (do Debian ou do Slackware) para funcionarem em outras distros.

Em Slackware, o script se chama "adduse" (não é o comando: adduser), mas possui versões modificadas em Gentoo e Sabayon, chamadas superadduser.

Testei os scripts em Sabayon Linux, mas tenho em mente que funcionem em várias outras distros. Quem quiser testar em outros GNU/Linux, pode depois comentar, para informar à comunidade.

Observação final: se seu Desktop já tem um usuário root padrão, não crie outro usuário com poderes de root (em outras palavras, não use a opção -a do script adduser1.sh). Não é uma boa ideia.

A existência de mais de um superusuário em um sistema não é segura, principalmente, se ele é logável na interface gráfica. Em todo o caso, possivelmente o sistema se proteja, e só te deixará criar, se existir um grupo admin.

Outras dicas deste autor

Navegador Maxthon em Sabayon Linux e Gentoo

Obtendo sempre o GParted mais recente

Corrigindo perfis de Portage em Sabayon e Gentoo

Aplicativo de horário e clima no GNOME e no MATE: Ribeirão Preto/SP está com o nome errado!

Tecla "PrintScreen" não captura mais a tela em KDE5 [Resolvido]

Leitura recomendada

apt-get update/upgrade - Atualização automática

Buscando palavras (strings) em arquivos dentro de diretório recursivamente

Exemplos de uso do comando SCP

Backups simples e seguros com o ssh e dd no Linux

Geração automática de relatórios do Sarg

  

Comentários
[1] Comentário enviado por albfneto em 11/06/2014 - 15:41h

ERRATA DA DICA:

1) Onde se lê:

"Em Slackware, o script se chama "adduse" (não é o comando: adduser)" , Lê-se:


"Em Slackware, o SCRIPT se chama "adduser" (não é o COMANDO adduser)"


2) Faltou o conteúdo do Segundo Script, adduser2.sh (autoria de Manoj Kumar, Índia e Brasil, 2012):

# CÓDIGO
#!/bin/bash
UCOM="/usr/sbin/useradd"
PCOM="/usr/bin/passwd"
DCOM="/usr/sbin/userdel"
GCOM="/bin/grep"

if [ "$#" != "2" ]
then
echo -e "{COMENTARIO}33[33m Required 2 Parameters : User Name and Password..."
exit;
else
$UCOM $1
( echo $2; echo $2 ) | $PCOM $1

if [ "$?" != "0" ]
then
$DCOM -r $1
else
echo -e "{COMENTARIO}33[35m User $1 Successfully Added To System"
echo -e "{COMENTARIO}33[0m"
fi
fi

echo -e "{COMENTARIO}33[33m Do You Want To Add User to Sudoers/Super User List (y/n)"
read choice
echo -e "{COMENTARIO}33[0m"

if [ "$choice" == "y" -o "$choice" == "Y" ]
then
$GCOM $1 /etc/sudoers

if [ "$?" == "0" ]
then
echo -e "{COMENTARIO}33[31m User $1 Already Added To Sudoers File"
echo -e "{COMENTARIO}33[0m"
else
echo "$1 ALL=(ALL) ALL" | cat >> /etc/sudoers
echo -e "{COMENTARIO}33[35m User $1 Successfully Added To Sudoers!!!"
echo -e "{COMENTARIO}33[0m"
fi

elif [ "$choice" == "n" -o "$choice" == "N" ]
then
echo -e "{COMENTARIO}33[35m $1 User Not Added To Sudoers!!!"
echo -e "{COMENTARIO}33[0m"
else
echo -e "{COMENTARIO}33[37m Invalid Choice....User Not Added To Sudoers :-("
echo -e "{COMENTARIO}33[0m"
fi
# FIM DO CÓDIGO




[2] Comentário enviado por albfneto em 18/05/2015 - 13:54h

COMPLEMENTOS DA DICA:

Atualizado até 18 de Maio de 2015.

Se preferir usar um outro script fácil, para o iniciante, pode usar este simples Shell Script para adicionar usuários.
Ele é de autoria do conhecido programador Vivek Gite, Índia, da NixCraft, autor do Livro "Linux Shell Scriptting Tutorial, a Beginner's Handbook."

Script:
http://www.cyberciti.biz/tips/howto-write-shell-script-to-add-user.html

Outras Referências:
http://www.freeos.com/guides/lsst/
http://bash.cyberciti.biz/guide/Linux_Shell_Scripting_Tutorial_-_A_Beginner's_handbook
http://bash.cyberciti.biz/guide/Linux_Shell_Scripting_Tutorial_-_A_Beginner's_handbook:About
http://www.linuxtoday.com/author/Vivek+Gite/
http://www.cyberciti.biz/tips/about-us
http://roest8.home.xs4all.nl/mike/boek/E-books/2_Linux%20Shell%20Scripting%20Tutorial%20-%20A%20Begi...

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts