Outils pour utilisateurs

Outils du site


doc:formations:hebergement:serveur:sauvegarder:exemple

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
doc:formations:hebergement:serveur:sauvegarder:exemple [2020/06/11 16:05] – ↷ Page déplacée de projets:iaxon:doc:formations:hebergement:serveur:sauvegarder:exemple à doc:formations:hebergement:serveur:sauvegarder:exemple jeremiedoc:formations:hebergement:serveur:sauvegarder:exemple [2020/12/02 17:58] (Version actuelle) – [Renforcement: SSH utilisateur bridé sur une commande] jeremie
Ligne 18: Ligne 18:
   chown -R backuper:backuper /home/backuper   chown -R backuper:backuper /home/backuper
   chmod -R go-rwx /home/backuper   chmod -R go-rwx /home/backuper
 +
 +=== sudoer ===
  
 On va permettre à ''backuper'' d'exécuter ''rsync'' en "root", car on va avoir besoin de ces privilèges pour parcourir librement tout ''srvsrc'': On va permettre à ''backuper'' d'exécuter ''rsync'' en "root", car on va avoir besoin de ces privilèges pour parcourir librement tout ''srvsrc'':
  
   apt install sudo   apt install sudo
 +
 +Utiliser ensuite ''visudo'', ou mieux, créer un fichier spécifique:
 +  
   echo 'backuper ALL=(ALL) NOPASSWD: /usr/bin/rsync' > /etc/sudoers.d/10-backuper   echo 'backuper ALL=(ALL) NOPASSWD: /usr/bin/rsync' > /etc/sudoers.d/10-backuper
  
-On va cependant [[doc:formations:hebergement:serveur:ssh#restreindre_les_commandes_appelables|brider]] un peu ce que cet utilisateur peut faire, en ajoutant ceci au début des lignes de ''authorized_keys'':+===== Planification "cron" ===== 
 + 
 +A ce stade, on peut simplement automatiser une sauvegarde presque complète de ''srvbak'' sur le système ''srvsrc'' ainsi. 
 + 
 +  * si ce n'est pas fait on ajoute la clé publique de ''root@srvbak'' à ''backuper@srvsrc:.ssh/authorized_keys'' 
 +  * on crée sur ''srvbak'' le dossier qui sera le miroir: ''mkdir -p /home/srvsrc_miroir'' 
 +  * on crée sur ''srvbak'' le fichier ''/etc/cron.d/backup_remote'' avec ce contenu: 
 + 
 +<code> 
 +# Chemins vers les exécutables (car crontab ne le fait pas) 
 +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
 + 
 +# Lance un miroir à 3h45 tous les jours 
 +45 3 * * * root rsync -a --delete --exclude /proc --exclude /run --exclude /dev backuper@srvsrc:/ /home/srvsrc_miroir > /dev/null 
 +</code> 
 + 
 +   
 + 
 +===== Renforcement: SSH utilisateur bridé sur une commande ===== 
 + 
 +Certes, la configuration sudo ci-dessus ne permet à l'utilisateur de n'éxécuter "en root" que la commande prévue. Ceci étant, il n'est pas souhaitable qu'il puisse se logguer pour faire autre chose que ce pour quoi il a été conçu (que ce soit en root ou non). 
 + 
 +On va donc [[doc:formations:hebergement:serveur:ssh#restreindre_les_commandes_appelables|brider]] celles qu'il va pouvoir appeler en ajoutant ceci au début des lignes de ''/home/backuper/.ssh/authorized_keys'' de ''srvsrc'': 
 + 
 +  command="/home/backuper/backup.sh", ssh-rsa AAAAB3NzaC1yc2EAAA...H1tl root@srvbak 
 + 
 +Cela signifie que lors de son appel SSH, l'utilisateur ne peut exécuter que cette commande ! 
 + 
 +Note: si l'appelant est sur une adresse IP connue on peut même brider la source de l'appel ainsi
  
-  command="/home/backuper/backup.sh", ssh-rsa AAAAB3NzaC1yc2EAAA...H1tl jeremie@silex+  from="11.22.33.44", command="/home/backuper/backup.sh", ssh-rsa AAAAB3NzaC1yc2EAAA...H1tl root@srvbak
  
 Et enfin l'on crée ce script ''/home/backuper/backup.sh'' (toujours sur ''srvsrc''): Et enfin l'on crée ce script ''/home/backuper/backup.sh'' (toujours sur ''srvsrc''):
Ligne 40: Ligne 73:
 echo "$SSH_ORIGINAL_COMMAND" | grep -q '[&;]' && fail echo "$SSH_ORIGINAL_COMMAND" | grep -q '[&;]' && fail
  
-# On oblige à baser les chemins sont bien indiqués depuis la racine du site+# On oblige à donner des chemins ancrés sur la racine du site
 echo "$SSH_ORIGINAL_COMMAND" | tr "\t" ' ' | grep -q ' /[^ ]*$' || fail echo "$SSH_ORIGINAL_COMMAND" | tr "\t" ' ' | grep -q ' /[^ ]*$' || fail
  
Ligne 65: Ligne 98:
   *.zip   *.zip
  
-Note: on fait un peu de zèle ici dans ce script, mais qui illustre un moyen de brider les commandes et données gérables par l'appelant, ainsi que l'injection d'arguments dans le ''rsync'' (ici, l'exclusion des dossiers non sauvegardables sur le serveur, ''/sys'', ''/proc'', ''/run'' et ''/dev'' ainsi que divers fichiers et dossiers). Même sans les spécifier lors du rsync, ces options seront utilisées!+Note: on fait un peu de zèle ici dans ce script, mais qui illustre un moyen de brider les commandes et données gérables par l'appelant, ainsi que l'injection d'arguments dans le ''rsync'' (ici, l'exclusion des dossiers non sauvegardables sur le serveur, ''/sys'', ''/proc'', ''/run'' et ''/dev'' ainsi que divers fichiers et dossiers). Même sans les spécifier lors du rsync, ces options seront utilisées (car "injectées" de force avec le ''sed'' ci-avant).
  
  
Ligne 81: Ligne 114:
 Nb: l'option ''-a'' conserve les noms et propriétés des fichiers, l'option ''%%--%%progress'' affiche ce qui se passe, et l'option ''%%--%%delete'' surpprime de la destination les fichiers qui ont disparu de la source. Le résultat est un //miroir// de la source (hormis les fichiers et dossiers ignorés bien entendu). Nb: l'option ''-a'' conserve les noms et propriétés des fichiers, l'option ''%%--%%progress'' affiche ce qui se passe, et l'option ''%%--%%delete'' surpprime de la destination les fichiers qui ont disparu de la source. Le résultat est un //miroir// de la source (hormis les fichiers et dossiers ignorés bien entendu).
  
-==== Planification "cron" ==== 
  
-On peut simplement automatiser une sauvegarde presque complète de ''srvbak'' sur le système ''srvsrc'' ainsi. 
- 
-  * si ce n'est pas fait on ajoute la clé publique de ''root@srvbak'' à ''backuper@srvsrc:.ssh/authorized_keys'' 
-  * on crée sur ''srvbak'' le dossier qui sera le miroir: ''mkdir -p /home/srvsrc_miroir'' 
-  * on crée sur ''srvbak'' le fichier ''/etc/cron.d/backup_remote'' avec ce contenu: 
- 
-<code> 
-# Chemins vers les exécutables (car crontab ne le fait pas) 
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
- 
-# Lance un miroir à 3h45 tous les jours 
-45 3 * * * root rsync -a --delete backuper@srvsrc:/ /home/srvsrc_miroir > /dev/null 
-</code> 
- 
-   
doc/formations/hebergement/serveur/sauvegarder/exemple.1591891502.txt.gz · Dernière modification : 2020/06/11 16:05 de jeremie