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.695 ]
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 para instalação de um servidor web
Automatizando backups no Samba
Adiciona, remove e lista usuários web (htpasswd)
Pré Configuração do SQuiD Slackware
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









