init: projet complet copymail pour Raspberry Pi
Stack: Nginx + PHP 8.2 + MariaDB + Postfix + Dovecot + Samba - install.sh: script installation automatisé pour RPi OS Bookworm - Interface web: visionneuse mails + admin (comptes, domaine, dashboard) - Chaque compte mail génère automatiquement un share Samba - Processeur cron: extraction pièces jointes via zbateson/mail-mime-parser - Zéro injection SQL (PDO + prepared statements) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
70
scripts/create_account.sh
Normal file
70
scripts/create_account.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
# create_account.sh <username> <password> <domain>
|
||||
# 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 <username> <password> <domain>" >&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éé."
|
||||
Reference in New Issue
Block a user