Skip to content

Instantly share code, notes, and snippets.

@matheuseduardo
Created June 24, 2025 21:50
Show Gist options
  • Save matheuseduardo/8438b0d9c7498d84197f14d2a05985b9 to your computer and use it in GitHub Desktop.
Save matheuseduardo/8438b0d9c7498d84197f14d2a05985b9 to your computer and use it in GitHub Desktop.
htpsswd manager é uma forma rápida de gerenciar usuários em um arquivo .htpssw

Guia do Script de Gerenciamento de .htpasswd

Este documento explica o funcionamento do script shell htpasswd_manager.sh, que gerencia usuários e senhas em um arquivo .htpasswd.

Pré-requisitos

  • Um arquivo .htpasswd existente.
  • OpenSSL instalado para criptografia de senhas.
  • Permissões de leitura/escrita no arquivo .htpasswd.

Uso

Execute o script com o parâmetro -f ou --file seguido do caminho do arquivo .htpasswd:

./htpasswd_manager.sh -f caminho/para/.htpasswd

Se o parâmetro não for fornecido ou o arquivo não existir, o script exibe uma mensagem de erro e termina.

Funcionalidades

O script apresenta um menu interativo com as seguintes opções:

  1. Adicionar usuário

    • Solicita um nome de usuário e uma senha.
    • Criptografa a senha usando o algoritmo APR1 (via OpenSSL).
    • Adiciona a entrada ao arquivo .htpasswd no formato: username:encrypted_password # Added YYYY-MM-DD HH:MM:SS.
  2. Excluir usuário

    • Lista todos os usuários do arquivo com números sequenciais.
    • Solicita o número do usuário a ser excluído.
    • Remove a linha correspondente do arquivo.
  3. Editar usuário

    • Lista os usuários com números sequenciais.
    • Solicita o número do usuário a ser editado.
    • Mantém o mesmo nome de usuário, mas solicita uma nova senha.
    • Remove a linha antiga e adiciona uma nova com a senha atualizada e um comentário com a data/hora: username:encrypted_password # Modified YYYY-MM-DD HH:MM:SS.
  4. Sair (Q)

    • Encerra o script.

Observações

  • O script usa um arquivo temporário para manipulações, garantindo segurança nas alterações.
  • A data e hora nos comentários seguem o formato YYYY-MM-DD HH:MM:SS.
  • Entradas inválidas (como números fora do intervalo na exclusão/edição) são tratadas com mensagens de erro.

Exemplo de Arquivo .htpasswd

Após adicionar/editar usuários, o arquivo pode se parecer com:

user1:$apr1$... # Added 2025-06-24 18:48:23
user2:$apr1$... # Modified 2025-06-24 18:50:10
#!/bin/bash
# Check if file parameter is provided
if [[ "$1" != "-f" && "$1" != "--file" ]]; then
echo "Error: Please provide a file with -f or --file parameter"
exit 1
fi
HTPASSWD_FILE="$2"
# Check if file exists
if [[ ! -f "$HTPASSWD_FILE" ]]; then
echo "Error: File $HTPASSWD_FILE does not exist"
exit 1
fi
# Function to add user
add_user() {
read -p "Enter username: " username
read -s -p "Enter password: " password
echo
# Encrypt password and append to file with timestamp
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
encrypted=$(echo "$password" | openssl passwd -apr1 -stdin)
echo "$username:$encrypted # Added $timestamp" >> "$HTPASSWD_FILE"
echo "User $username added successfully"
}
# Function to list users with numbers
list_users() {
echo "Users in $HTPASSWD_FILE:"
awk -F: '{print NR ") " $1}' "$HTPASSWD_FILE"
}
# Function to delete user
delete_user() {
list_users
read -p "Enter the number of the user to delete: " user_number
if [[ ! "$user_number" =~ ^[0-9]+$ ]]; then
echo "Error: Please enter a valid number"
return
fi
total_users=$(wc -l < "$HTPASSWD_FILE")
if [[ "$user_number" -lt 1 || "$user_number" -gt "$total_users" ]]; then
echo "Error: Invalid user number"
return
fi
# Create temporary file and remove selected line
temp_file=$(mktemp)
awk -v n="$user_number" 'NR != n' "$HTPASSWD_FILE" > "$temp_file"
mv "$temp_file" "$HTPASSWD_FILE"
echo "User deleted successfully"
}
# Function to edit user
edit_user() {
list_users
read -p "Enter the number of the user to edit: " user_number
if [[ ! "$user_number" =~ ^[0-9]+$ ]]; then
echo "Error: Please enter a valid number"
return
fi
total_users=$(wc -l < "$HTPASSWD_FILE")
if [[ "$user_number" -lt 1 || "$user_number" -gt "$total_users" ]]; then
echo "Error: Invalid user number"
return
fi
username=$(awk -F: -v n="$user_number" 'NR == n {print $1}' "$HTPASSWD_FILE")
read -s -p "Enter new password for $username: " password
echo
# Create temporary file, remove old entry, add new one
temp_file=$(mktemp)
awk -v n="$user_number" 'NR != n' "$HTPASSWD_FILE" > "$temp_file"
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
encrypted=$(echo "$password" | openssl passwd -apr1 -stdin)
echo "$username:$encrypted # Modified $timestamp" >> "$temp_file"
mv "$temp_file" "$HTPASSWD_FILE"
echo "User $username updated successfully"
}
# Main menu
while true; do
echo -e "\n.htpasswd Manager"
echo "1) Add user"
echo "2) Delete user"
echo "3) Edit user"
echo "Q) Quit"
read -p "Select an option: " choice
case $choice in
1)
add_user
;;
2)
delete_user
;;
3)
edit_user
;;
[Qq])
echo "Exiting..."
exit 0
;;
*)
echo "Invalid option"
;;
esac
done
// fonte: https://grok.com/share/bGVnYWN5_ffc94a5e-6a99-4afb-8529-2449da2ccb8e
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment