salut
je vois qu'une archi va se mettre en place pour du site web.
voici ce que je fais (en amateur dans l'asso que je gère) afin de mettre en place un serveur multi admins et multi utilisateurs.
peu importe le cms utilisé, c'est juste de l'admin sys.
la premiere chose que je fais est de changer le port ssh et interdire l'acces par mot de passe (clef obligatoire).
bien sur j'installe fail2ban tout en lui disant que le port ssh a changé.
il est aussi possible de restreindre l'acces à la machine à tout ce qui est autre que ssh et http en utilisant iptables.
ensuite :
1/ j'installe sudo et ajoute les admins potentiels dans le groupe sudo
2/ je cree une clef ssh pour root
3/ je crée un dépot git privé sur framagit (ou autre) et y mets la clef publique de root
4/ dans /opt je cree un dossier qui contiendra tout ce qui sera sauvé sur ce dépot en partant du nom de la machine donc si la machine s'appelle toto, je cree /opt/toto
5/ tout fichier de conf que j'édite, je le copie d'abord en .bak par exemple, /etc/nginx/nginx.conf est copié en /etc/nginx/nginx.conf.bak
6/ tout fichier de conf que j'edite est déplacé dans /opt/toto en respectant l'arborescence de /etc par exemple /etc/nginx/nginx.conf est déplacé vers /opt/toto/etc/nginx/nginx.conf
7/ je crée un lien symbolique du fichier de /opt/toto vers l'emplacement definitif par exemple : "ln -s /opt/toto/etc/nginx/nginx.conf /etc/nginx/"
ce mecanisme permet de revisionner les fichiers de conf et si on veut savoir qui a modifié quoi, il est possible d'ajouter les clefs publiques de chaque personne faisant partie d'un groupe ayant les droits de modifier les fichiers dans /opt/toto
rien n'empeche de revisionner directement /etc sans passer par un dossier intermédiaire mais avec ma technique, je vois de suite ce qui a seulement été modifié.
si on ne veut pas passer par un hebergeur de dépot tiers, on peut tres bien utiliser un "git init --bare".
pour les sites web, je crée un dossier www dans la home de chaque utilisateur.
j'utilise ensuite le chroot par sftp dans la config de ssh en verrouillant l'utilisateur dans son dossier www (il n'a pas le droit de se connecter en ssh mais peut seulement accéder à son www par sftp et ne voit rien d'autre)
(on peut permettre à sftp d'utiliser les mots de passe tout en interdisant l'acces par mot de passe par ssh comme vu au debut).
ce dossier www a une hierarchie spécifique :
ce qui permet d'heberger plusieurs sites avec des domaines différents sous le meme utilisateur.
bien sur, dans le vhost on pointera vers le dossier htdocs en lui demandant de mettre les logs dans log.
seul ce dossier est accessible en modifications à l'utilisateur (etc et log appartiennent à root).
on pourrait aussi d'ailleurs verouiller l'utilisateur dans le dossier htdocs mais je prefere monter plus haut comme ça il peut lire la config et les logs de tous ses sites.
avec cette config, il faut que l'utilisateur www-data ait acces en ecriture à certains dossiers donc je fais un "chown monuser:www-data htdocs" puis un "chmod 2775 htdocs" avant d'y ajouter des fichiers.
ce script passe tous les fichiers en 664 et dossiers en 2775 (il est bien sur possible de le lancer par cron et granulariser les droits selon les dossiers).
le 2 devant le 775 permet de garder le meme groupe lors de la creation d'un dossier ou fichier enfant.
pour les backups, je crée un fichier /root/.my.cnf qui contient le login et pass du root mysql (bien sur, faire un "chmod 600" sur ce fichier.
ensuite, je me suis fait un script de backup lancé par cron qui scanne les dossiers des users en cherchant les domaines en www et fait un targz du dossier htdocs puis un mysqldump de la base correspondante sachant que le nom de la base est le meme que le domaine en remplacant les points par des underscores. (
domaine.du.site.com = domaine_du_site_com)