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.328 ]
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
Instalação do Adobe Flash Player em distros Debian-like
usando a lixeira em modo texto
Abrir e redirecionar portas TCP em firewall iptables
Visualizar os processos que mais consomem memória
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta