#!/bin/bash # create_account.sh # Appelé par l'interface web (via sudo) quand on crée un compte set -e USERNAME="$1" PASSWORD="$2" DOMAIN="$3" if [[ -z "$USERNAME" || -z "$PASSWORD" || -z "$DOMAIN" ]]; then echo "Usage: $0 " >&2 exit 1 fi MAILDIR="/var/mail/vhosts/${DOMAIN}/${USERNAME}/Maildir" SMBDIR="/srv/copymail/${USERNAME}" DOVECOT_PASSWD="/etc/dovecot/users" # --- Maildir --- mkdir -p "${MAILDIR}/new" "${MAILDIR}/cur" "${MAILDIR}/tmp" chown -R vmail:vmail "/var/mail/vhosts/${DOMAIN}/${USERNAME}" chmod -R 770 "/var/mail/vhosts/${DOMAIN}/${USERNAME}" # --- Postfix virtual mailboxes --- VMAILBOX="/etc/postfix/vmailbox" if ! grep -qF "${USERNAME}@${DOMAIN}" "${VMAILBOX}" 2>/dev/null; then echo "${USERNAME}@${DOMAIN} ${DOMAIN}/${USERNAME}/Maildir/" >> "${VMAILBOX}" fi postmap "${VMAILBOX}" # --- Dovecot passwd-file --- # Format: username@domain:{SHA512-CRYPT}hash:::::: PASS_HASH=$(doveadm pw -s SHA512-CRYPT -p "${PASSWORD}") if ! grep -qF "${USERNAME}@${DOMAIN}" "${DOVECOT_PASSWD}" 2>/dev/null; then echo "${USERNAME}@${DOMAIN}:${PASS_HASH}:::" >> "${DOVECOT_PASSWD}" else # Met à jour le mot de passe si le compte existe déjà sed -i "s|^${USERNAME}@${DOMAIN}:.*|${USERNAME}@${DOMAIN}:${PASS_HASH}:::|" "${DOVECOT_PASSWD}" fi # --- Dossier SMB --- mkdir -p "${SMBDIR}" chown -R vmail:vmail "${SMBDIR}" chmod -R 775 "${SMBDIR}" # --- Section Samba --- SMB_CONF="/etc/samba/smb.conf" if ! grep -qF "[${USERNAME}]" "${SMB_CONF}"; then cat >> "${SMB_CONF}" << SAMBA [${USERNAME}] path = ${SMBDIR} browseable = yes writable = yes valid users = ${USERNAME} create mask = 0664 directory mask = 0775 SAMBA fi # Ajoute l'utilisateur Samba (sans login système) (echo "${PASSWORD}"; echo "${PASSWORD}") | smbpasswd -a -s "${USERNAME}" 2>/dev/null || true # --- Rechargement services --- systemctl reload postfix systemctl reload dovecot systemctl reload smbd echo "OK: compte ${USERNAME}@${DOMAIN} créé."