Criando usuário e configurando o sudo através de script no Slackware
Publicado por César (última atualização em 30/08/2020)
[ Hits: 2.625 ]
Download config_user_v2 (versão 2)
Criei este breve script para que o usuário criado tivesse configurações especificas além de configurar o sudo, o mesmo pode ser modificado para criação de usuários em massa.
#!/bin/sh
#######################################################################################################
#                                                                                                      
# Autor: Jean Zonta                                                                                    
# Pseudonym: wiki.anon                                                                                 
# Script Name: config_user                                                                            
# License: GNU/GPL V3+                                                                                 
# DateTime: seg 16 set 2019 00:43:32                                                                   
# echo "ykmk0cpqpB{cjqq0eqo0dt" | perl -pe \ 's/(.)/chr(ord($1)-2*1)/ge'                              
# echo 'comhttps://slackwarewww' | sed 's@\(com\)\(https://\)\(slackware\)\(www\)@\2\4.\3.\1 ..!!!@'   
#                                                                                                      
#######################################################################################################
HOSTNAME=${HOSTNAME:-/etc/HOSTNAME}
GROUP=${GROUP:-/etc/group}
SUDOERS=${SUDOERS:-/etc/sudoers}
PROFILE=${PROFILE:-/etc/profile}
PASSWD=${PASSWD:-/etc/passwd}
SHADOW=${SHADOW:-/etc/shadow}
PROMPTS=($(cat /etc/shells)) #Vetor com default shell's
BASHRCADM=${BASHRCADM:-/root/.bashrc}
######################################
if [ ${UID} != 0 ]; then 
echo -e "\n\e[1;31mYou must be root\e[0m..!!!\n"
exit 1
else
######################################
#configura arquivo issue
ISSUE=${ISSUE:-/etc/issue}
SLVERSION=${SLVERSION:-/etc/slackware-version}
VERSION=${VERSION:-$(cat ${SLVERSION})}
if [ -f ${SLVERSION} ]; then
 if [ "$(cat ${ISSUE})" = "Welcome to $2 \s-\r.\m \l" ]; then
  echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${ISSUE}\e[0m\" \e[1;34mjá foi alterado\e[0m!"
   else
    
    echo "Welcome to $2 \s-\r.\m \l" > ${ISSUE}
    if [ $? -eq 0 ]; then
     echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${ISSUE}\e[0m\" \e[1;34mconfigurado com sucesso\e[0m!\n"
      fi
  fi
fi
######################################
######################################
#configura usuário
USUARIO=""
while [ -z "$dark777" ]; do
 echo -ne "\n\e[1;33mEnter username\e[0m: " 
 read USUARIO
 
  if [ -z "$dark777" ]; then
   echo -e "\n\e[1;31mEnter the username\e[0m!\n"
    fi
done
if [ ! -z "$(getent passwd $dark777)" ]; then
 echo -e "\n\e[1;34mUser \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34malready exists\e[0m!\n"
  exit
   else
######################################
######################################
#configura id do usuário
IDLASTPASSWD="$(cat ${PASSWD} | sed -n '$p' | cut -f3 -d':')" # id do último usuário ou linha
IDLASTGROUP="$(cat ${GROUP} | sed -n '$p' | cut -f3 -d':')" # id do ultimo grupo para não ficar repetido com o id do usuário
:<<COMENT
A verificação do id do usuário se faz nescessária automaticamente, uma vez que,
o primeiro usuário é criado assumindo o id 1000 se for criado com o comando useradd,
depois o grupo sudo será criado assumindo o id 1001 se for criado com o comando groupadd. 
Caso o usuário recorra ao script para criar um novo usuário ou mesmo seu primeiro, 
pode ocorrer do grupo sudo ficar com o id do usuário, para que isso
não aconteça, foi nescessário fazer a verificação do id em passwd e group, 
assim o próximo usuário que for criado com o script, não terá o mesmo id do grupo sudo,
e nem o grupo sudo ficará com o id idêntico ao do novo usuário,
este script pode ser usado tanto para criar e configurar apenas um usuário, 
quanto para criação de usuários em massa.
COMENT
if [ "${IDLASTPASSWD}" -eq "99" ]; then 
 IDUSER="1000"
  else
   IDUSER="$((${IDLASTPASSWD}+1))"
      
   if [ ! -z "$(cat ${PASSWD} | grep ${IDUSER})" -a "${IDLASTPASSWD}" = "${IDUSER}" ]; then
    IDUSER="$((${IDLASTPASSWD}+1))"
   else
    IDUSER="${IDUSER}"     
   fi
    
   if [ ! -z "$(cat ${GROUP} | grep ${IDUSER})" -a "${IDLASTGROUP}" = "${IDUSER}" ]; then
    IDUSER="$((${IDLASTGROUP}+1))"
   else
    IDUSER="${IDUSER}"      
   fi
fi
######################################
######################################
#configura senha do usuário
PASSWORD="$(tr -dc _a-z-A-Z-0-9#* < /dev/urandom | head -c8)" #gera senhas de até 8 caracteres
echo -ne "\n\e[1;33mEnter password user or\nPressione [enter] generate password\e[0m: "
read SENHA
if [ -z "${SENHA}" ]; then
  SENHA="${PASSWORD}"
 else
  SENHA="${SENHA}"
fi
echo "$dark777:${PASSWORD}" >> ~/user_senha #Adiciona um arquivo contendo o usuário e senha no diretorio do usuario root
######################################
######################################
#configura shell padrão
echo -ne "\n\e[1;33mDefault shell's \e[1;35m(\e[1;31m${PROMPTS[@]/*\/}\e[1;35m)\n\e[1;33mEnter your shell\e[0m: "
read SHELLS
if ! grep -wq "${SHELLS}" <<< ${PROMPTS[@]/*\/}; then
  SHELLS="bash"
 else
  SHELLS="${SHELLS}"
fi
######################################
######################################
#comentário sobre tipo do usuário
echo -ne "\n\e[1;33mEnter the coments\e[0m: "
read COMENTARIO
if [ -z "$
Eita! O script tá gigante. Os meus são tão pequenos. Mas eu achei muito bom.
___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]" ]; then
 COMENTARIO="Slackware User Comun"
  fi
######################################
######################################
#adiciona usuário em /etc/passwd
echo -e "\n\e[1;31mAdicionando usuário \e[1;36m$dark777\e[0m!"
#adiciona usuário em /etc/passwd
echo "$dark777:x:${IDUSER}:${IDUSER}:$
Eita! O script tá gigante. Os meus são tão pequenos. Mas eu achei muito bom.
___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]:/home/$dark777:/bin/${SHELLS}" >> ${PASSWD}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mUsuário \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mAdicionado a \e[0m\"\e[1;36m${PASSWD}\e[0m\" \e[1;34mcom sucesso\e[0m!" 
  fi
#adiciona linha de usuário sem senha em /etc/shadow
echo "$dark777:x:$(sed -n '1p' ${SHADOW}- | cut -f3 -d':'):0:99999:7:::" >> ${SHADOW}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mUsuário \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mAdicionado em \e[0m\"\e[1;36m${SHADOW}\e[0m\" \e[1;34mcom sucesso\e[0m!" 
  fi
  
#configura senha do usuário
echo "$dark777:${SENHA}" | chpasswd -m
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mSenha do usuário \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mconfigurada com sucesso\e[0m!"
  fi
#alterando a linha de usuário sem senha em /etc/shadow-
sed -i "/$dark777/ s/$dark777:.*/$dark777:\!:$(sed -n '1p' ${SHADOW}- | cut -f3 -d':'):0:99999:7:::/g;" ${SHADOW}-
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${SHADOW}-\e[0m\" \e[1;34malterado com sucesso\e[0m!"
  fi
#cria grupo com nome do usuário em /etc/group
echo "$dark777:x:${IDUSER}:" >> ${GROUP}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mGrupo \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mAdicionado \e[0m\"\e[1;36m${GROUP}\e[0m\" \e[1;34mcom sucesso\e[0m!"
  fi
#cria grupo com nome do usuário em /etc/group-
echo "$dark777:x:${IDUSER}:" >> ${GROUP}-
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mGrupo \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mAdicionado \e[0m\"\e[1;36m${GROUP}-\e[0m\" \e[1;34mcom sucesso\e[0m!"
  fi
#configura diretorios do usuário
mkdir -p /home/$dark777/{Documentos,Downloads,Imagens,Músicas,Vídeos,Filmes,Packages,Projetos,Workspace/GitHub,.mozilla/{extensions,firefox/574CK34R3.default}}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mDiretorios \e[0m(\e[1;36mDocumentos\e[0m,\e[1;36mDownloads\e[0m,\e[1;36mImagens\e[0m,\e[1;36mMúsicas\e[0m,\e[1;36mVídeos\e[0m,\e[1;36mFilmes\e[0m,\e[1;36mPackages\e[0m,\e[1;36mProjetos\e[0m,\e[1;36mWorkspace\e[0m) \e[1;34mdo usuário \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mcriado com sucesso\e[0m!"
 
 #configura dono das pastas em /home/${USER}
 chown -R $dark777.$dark777 /home/$dark777
  if [ $? -eq 0 ]; then
   echo -e "\n\e[1;34mDono dos diretórios de \e[0m\"\e[1;36m/home/$dark777\e[0m\" \e[1;34malterado com sucesso\e[0m!"
   fi
fi
#cria grupo sudo se não existir
if [ ! -z "$(getent group sudo | cut -f1 -d':')" ]; then
 echo -e "\n\e[1;34mGrupo \e[0m\"\e[1;36msudo\e[0m\" \e[1;34malready exists\e[0m!"
  else
  
  echo "sudo:x:$((${IDUSER}+1)):" >> ${GROUP}
  if [ $? -eq 0 ]; then
   echo -e "\n\e[1;34mGrupo \e[0m\"\e[1;36msudo\e[0m\" \e[1;34mcriado com sucesso\e[0m!"
    
    #configura grupo sudo em /etc/sudoers
    if [ ! -z "$(cat ${SUDOERS} | grep "%sudo ALL=(ALL) ALL")" ]; then
     echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${SUDOERS}\e[0m\" \e[1;34mjá foi alterado\e[0m!"
      else
       sed -i '/%sudo/ s/# %sudo.*/%sudo ALL=(ALL) ALL\n\n## Same thing without a password\n%sudo ALL=(ALL) NOPASSWD: ALL/g;' ${SUDOERS}
        if [ $? -eq 0 ]; then
         echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${SUDOERS}\e[0m\" \e[1;34malterado com sucesso\e[0m!"
          fi
    fi
  fi
fi
#adiciona usuário aos grupos existentes
if [ -z "$(getent group disk lp kmem wheel floppy dialout audio video cdrom plugdev power netdev scanner sudo | grep $dark777)" ]; then
 
 usermod -aG disk,lp,kmem,wheel,floppy,dialout,audio,video,cdrom,plugdev,power,netdev,scanner,sudo $dark777
 if [ $? -eq 0 ]; then
  echo -e "\n\e[1;34mUsuário \e[0m\"\e[1;36m$dark777\e[0m\" \e[1;34mAdicionado aos grupos \e[0m(\e[1;36mdisk\e[0m,\e[1;36mlp\e[0m,\e[1;36mkmem\e[0m,\e[1;36mwheel\e[0m,\e[1;36mfloppy\e[0m,\e[1;36mdialout\e[0m,\e[1;36maudio\e[0m,\e[1;36mvideo\e[0m,\e[1;36mcdrom\e[0m,\e[1;36mplugdev\e[0m,\e[1;36mpower\e[0m,\e[1;36mnetdev\e[0m,\e[1;36mscanner\e[0m,\e[1;36msudo\e[0m)\e[1;34m com sucesso\e[0m!"
   fi
fi
MATAR_PROCESSO="`echo 'kill_process()
{
 if [ -z \$1 ]; then
  echo -e "\\nDigite o nome do processo\\npara que ele seja morto\\n"
   else
    NUM=\$(ps -axc | grep \$1 | awk '{print \$1}')
     su -c "kill -9 \${NUM}"
      fi
}
'`"
#cria o arquivo .bashrc em /home/${USER}
BASHRCUSER=${BASHRCUSER:-/home/$dark777/.bashrc}
echo "# Aliases
alias repo-pl='git add .;git commit -m \"Scripts e Comandos Perl\";git push;'
alias repo-py='git add .;git commit -m \"Python e Django\";git push;'
alias repo-cs='git add .;git commit -m \"Sources code Asp.net/C-Sharp\";git push;'
alias repo-cpp='git add .;git commit -m \"Sources code C/C++\";git push;'
alias repo-java='git add .;git commit -m \"Sources code Java\";git push;'
alias repo-slack='git add .;git commit -m \"Packages e Settings\";git push;'
alias repo-shell='git add .;git commit -m \"Scripts e Settings\";git push;'
alias repo-dmars='git add .;git commit -m \"Sources code Digital Mars D\";git push;'
alias del='mv \$@ --target-directory=\${HOME}/.local/share/Trash/files/'
alias trash='su -c \"rm -rf \${HOME}/.local/share/Trash/{files/,info/}\"'
# Functions
# Kill process
${MATAR_PROCESSO}
# Clear and organize .bash_history
clsh()
{
# Remove linha em branco:
BLANK_LNRM=\${BLANK_LNRM:-\$(sed  -i '/^$/d' .bash_history)}
# Remove caracteres em branco no inicio da linha:
BLANK_INIRM=\${BLANK_INIRM:-\$(sed -i 's/^ //g' .bash_history)}
# Remove caracteres em branco no final da linha:
BLANK_FIMRM=\${BLANK_FIMRM:-\$(sed -i 's/ $//g' .bash_history)}
# Remove linhas duplicadas
RMDUP=\${RMDUP:-\$(sort -u .bash_history > str_history)}
# Salva os comandos devolta em .bash_history
NEWSTORE=\${NEWSTORE:-\$(cat str_history > .bash_history)}
#Remove os arquivos de suporte
RMFILES=\${RMFILES:-\$(rm -rf str_history)}
}
[ -r ${PROFILE} ] &&  . ${PROFILE}" >> ${BASHRCUSER}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${BASHRCUSER}\e[0m\" \e[1;34mcriado com sucesso\e[0m!"
  
  #troca a permissão do arquivo .bashrc
  #-rw-r--r--
   chmod 644 ${BASHRCUSER}
    chown $dark777.$dark777 ${BASHRCUSER}
     if [ $? -eq 0 ]; then
      echo -e "\n\e[1;34mPermissão do arquivo \e[0m\"\e[1;36m${BASHRCUSER}\e[0m\" \e[1;34malterada com sucesso\e[0m!"
       fi
fi
#cria o arquivo .bashrc no home do usuário /root
cat  ${BASHRCUSER} > ${BASHRCADM}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${BASHRCADM}\e[0m\" \e[1;34mcriado com sucesso\e[0m!"
 
  #remove command su in function kill_process do .bashrc
  sed -i 's/su -c "//g;/${NUM}"/ s/"$//g;' ${BASHRCADM}
   if [ $? -eq 0 ]; then
    echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${BASHRCADM}\e[0m\" \e[1;34malterado com sucesso\e[0m!"
    
     #-rw------- 
     chmod 600 ${BASHRCADM}
      if [ $? -eq 0 ]; then
       echo -e "\n\e[1;34mPermissão do arquivo \e[0m\"\e[1;36m${BASHRCADM}\e[0m\" \e[1;34malterada com sucesso\e[0m!"
        fi 
   fi
fi
#cria o arquivo profile.ini em /home/${USER}/.mozilla/firefox
PROFILEINI=${PROFILEINI:-/home/$dark777/.mozilla/firefox/profiles.ini}
echo "[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path=574CK34R3.default
Default=1" >> ${PROFILEINI}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${PROFILEINI}\e[0m\" \e[1;34mconfigurado com sucesso\e[0m!"
 
 #drwx------ .mozilla/
 chmod -R 700 /home/$dark777/.mozilla/
 #-rw-r--r-- 
 chmod 644 ${PROFILEINI}
  chown $dark777.$dark777 ${PROFILEINI}
   if [ $? -eq 0 ]; then
    echo -e "\n\e[1;34mPermissão do arquivo \e[0m\"\e[1;36m${PROFILEINI}\e[0m\" \e[1;34malterada com sucesso\e[0m!"
     fi 
fi
#cria o arquivo .gitconfig em /home/${USER}
GITCONFIGUSER=${GITCONFIGUSER:-/home/$dark777/.gitconfig}
echo "[user]
       name = Jean Zonta
       email = wiki.anon@yahoo.com.br
       username = dark777
[core]
       editor = nano
[merge]
       tool = diff
[push]
       default = matching
[web]
       browser = mozilla-firefox
[color \"branch\"]
       current = yellow bold
       local = green bold
       remote = cyan bold
[color \"diff\"]
       meta = yellow bold
       frag = magenta bold
       old = red bold
       new = green bold
       whitespace = red reverse
[color \"status\"]
       added = green bold
       changed = yellow bold
       untracked = red bold
     " >> ${GITCONFIGUSER}
if [ $? -eq 0 ]; then
 echo -e "\n\e[1;34mArquivo \e[0m\"\e[1;36m${GITCONFIGUSER}\e[0m\" \e[1;34mconfigurado com sucesso\e[0m!"
  
  #troca a permissão do arquivo .gitconfig
  #-rw-r--r-- 
  chmod 644 ${GITCONFIGUSER}
   chown $dark777.$dark777 ${GITCONFIGUSER}
    if [ $? -eq 0 ]; then
     echo -e "\n\e[1;34mPermissão do arquivo \e[0m\"\e[1;36m${GITCONFIGUSER}\e[0m\" \e[1;34malterada com sucesso\e[0m!"
      fi
fi
fi #fim de verificação se usuário existe em /etc/passwd
######################################
######################################
#configura a variável PATH
#pega o número da linha em que se encontra a primeira ocorrência da variável PATH
#NUM=$(cat -n ${PROFILE} | grep "PATH=\"" | head -1 | awk '{print $1}')
#se a variável EXTPATH for vazia então configure a variável PATH
#if [ ! -z "$(cat ${PROFILE} | grep "/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin:/usr/sbin:/sbin")" ]; then
# echo -e "\n\e[1;34mVariável \e[0m\"\e[1;36m\$PATH\e[0m\" \e[1;34mjá foi alterada\e[0m!\n"
#  else
  
#   sed -i ''${NUM}'s/games"/games/g;'${NUM}'s/$/:\/usr\/local\/sbin:\/usr\/sbin:\/sbin"/g;' ${PROFILE}
#    if [ $? -eq 0 ]; then
#     echo -e "\n\e[1;34mVariável \e[0m\"\e[1;36m\$PATH\e[0m\" \e[1;34malterada com sucesso\e[0m!\n"
#      fi
#fi
######################################
######################################
#configura ambiente para a variável PATH
EXISTS=($(cat ${PROFILE} | grep "\"`id -u`\""))
if [ "${#EXISTS[@]}" -eq "13" ]; then
 echo -e "\n\e[1;34mVariável \e[0m\"\e[1;36m\$PATH\e[0m\" \e[1;34mjá foi alterada\e[0m!\n"
  else
   
   #comenta a linha e cria uma nova linha para verificação da variável PATH para qualquer usuário criado
   #sed '/"`id -u`"/ s/^/#/g;/"`id -u`"/ s/$/\nif [ "`id -u`" = "0" -o "`id -un`" = "${HOME\/*\\\/}" ]; then/g;' ${PROFILE}
   
   #altera a linha adiciona no fim a verificação do PATH para qualquer usuário criado
   sed -i '/"`id -u`"/ s/]; then/-o "`id -un`" = "${HOME\/*\\\/}" ]; then/g;' ${PROFILE}
   if [ $? -eq 0 ]; then
     echo -e "\n\e[1;34mAmbiente da variável \e[0m\"\e[1;36m\$PATH\e[0m\" \e[1;34mconfigurado com sucesso\e[0m!\n"
      fi
fi
######################################
fi #Fim se user equal a root
Script simples para encerrar conexões
Gzipar arquivos com determinadas extensões
Localizando tentativas de invasão
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









