Skip to content

Instantly share code, notes, and snippets.

@thiagozs
Last active October 13, 2025 19:48
Show Gist options
  • Save thiagozs/25ab0777897300b1453f0f05f0034e18 to your computer and use it in GitHub Desktop.
Save thiagozs/25ab0777897300b1453f0f05f0034e18 to your computer and use it in GitHub Desktop.
Create user home with password linux
#!/usr/bin/env bash
#
# Script para criar um usuário no Ubuntu e configurar o diretório HOME
# Autor: Thiago Zilli Sarmento
# Uso:
# sudo ./create_user_with_home.sh <nome_usuario> [grupo_adicional]
#
# Exemplo:
# sudo ./create_user_with_home.sh asapadm sudo
#
set -euo pipefail
# --- Auto-elevação ---
if [[ "$EUID" -ne 0 ]]; then
echo "⚠️ Este script precisa ser executado como root."
echo "🔁 Reexecutando com sudo..."
exec sudo "$0" "$@"
fi
USER_NAME="${1:-}"
GROUP_EXTRA="${2:-}"
if [[ -z "$USER_NAME" ]]; then
echo "❌ Erro: informe o nome do usuário."
echo "Uso: $0 <nome_usuario> [grupo_adicional]"
exit 1
fi
echo "🚀 Iniciando criação/configuração do usuário '$USER_NAME'..."
# 1. Cria grupo adicional (ex: sudo) se informado e não existir
if [[ -n "$GROUP_EXTRA" ]]; then
if ! getent group "$GROUP_EXTRA" >/dev/null; then
echo "🔧 Criando grupo adicional '$GROUP_EXTRA'..."
groupadd "$GROUP_EXTRA"
fi
fi
# 2. Cria grupo primário se não existir
if ! getent group "$USER_NAME" >/dev/null; then
echo "🔧 Criando grupo primário '$USER_NAME'..."
groupadd "$USER_NAME"
fi
# 3. Cria ou corrige o usuário
if ! id "$USER_NAME" &>/dev/null; then
echo "👤 Criando usuário '$USER_NAME'..."
if [[ -n "$GROUP_EXTRA" ]]; then
useradd -m -s /bin/bash -g "$USER_NAME" -G "$GROUP_EXTRA" "$USER_NAME"
else
useradd -m -s /bin/bash -g "$USER_NAME" "$USER_NAME"
fi
else
echo "ℹ️ Usuário '$USER_NAME' já existe. Verificando grupo..."
CURRENT_GROUP=$(id -gn "$USER_NAME")
if [[ "$CURRENT_GROUP" != "$USER_NAME" ]]; then
echo "🔄 Corrigindo grupo primário para '$USER_NAME'..."
usermod -g "$USER_NAME" "$USER_NAME"
fi
fi
USER_HOME=$(eval echo "~$USER_NAME")
# 4. Garante que o diretório home exista
if [[ ! -d "$USER_HOME" ]]; then
echo "📁 Criando diretório home em $USER_HOME..."
mkdir -p "$USER_HOME"
fi
# 5. Copia arquivos padrão de ambiente
echo "📄 Copiando arquivos padrão..."
cp -n /etc/skel/.bash* "$USER_HOME"/ 2>/dev/null || true
# 6. Ajusta permissões
echo "🔒 Ajustando permissões..."
chown -R "$USER_NAME:$USER_NAME" "$USER_HOME"
chmod 755 "$USER_HOME"
# 7. Define shell padrão como bash
echo "🧰 Definindo shell padrão para /bin/bash..."
chsh -s /bin/bash "$USER_NAME" >/dev/null || true
# 8. Configura senha
echo
read -p "Deseja definir a senha manualmente? (s/n): " -r RESP
if [[ "$RESP" =~ ^[Ss]$ ]]; then
echo "Digite a nova senha para o usuário $USER_NAME:"
passwd "$USER_NAME"
PASSWORD_SET="(definida manualmente)"
else
PASSWORD=$(openssl rand -base64 12)
echo "${USER_NAME}:${PASSWORD}" | chpasswd
PASSWORD_SET="$PASSWORD"
fi
# 9. Mostra resultado final
echo
echo "✅ Usuário '$USER_NAME' configurado com sucesso!"
echo "📁 Home: $USER_HOME"
echo "🐚 Shell: $(getent passwd "$USER_NAME" | cut -d: -f7)"
echo "👥 Grupo primário: $(id -gn "$USER_NAME")"
echo "👥 Grupos extras: $(id -Gn "$USER_NAME" | sed 's/ /\n - /g' | sed '1s/^/ - /')"
if [[ "$PASSWORD_SET" != "(definida manualmente)" ]]; then
echo "🔑 Senha gerada automaticamente: $PASSWORD_SET"
echo "⚠️ Guarde essa senha com segurança — ela não será exibida novamente."
fi
echo
echo "Para testar: sudo su - $USER_NAME"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment