Last active
October 13, 2025 19:48
-
-
Save thiagozs/25ab0777897300b1453f0f05f0034e18 to your computer and use it in GitHub Desktop.
Create user home with password linux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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