Grenode peut fournir à ses membres un espace de stockage à des fin de sauvegarde. Ces espaces se trouvent sur la machine (gaffe à Toulouse, chez Tétaneutral et sont accessibles en ssh.

Caratéristiques

Le principe est de fournir deux comptes un pour réaliser les backups <user> l'autre pour les administrer <user>-admin. Le premier ayant des droits restreints.

  • Les comptes n'ont pas de mot de passe

  • Avec le compte <user>-admin, il est possible d'éxécuter n'importe quelle commande sous l'identité <user> via la commande :

    sudo -u <user> ma_comande

    Ainsi le compte <user>-admin peut changer les clés ssh du compte (et manipuler les fichiers à souhait).

  • Les connections ssh au compte <user> sont chrootées, et seul sftp est activé (pas de shell).

  • Le répertoire de données est /srv/backup/<user>/backups/ un lien symbolique pointe dessus dans le compte <user>-admin.

Ajouter un compte de backup

  • créer l'utilisateur et son home

    export BKP_USER=<user>
    sudo adduser $BKP_USER --gecos $BKP_USER \
                           --home /srv/backup/$BKP_USER \
                           --no-create-home \
                           --disabled-password \
                           --shell /bin/false
    sudo addgroup $BKP_USER backup-user
    sudo mkdir /srv/backup/$BKP_USER/
    sudo chown root:$BKP_USER /srv/backup/$BKP_USER/
    sudo chmod 750  /srv/backup/$BKP_USER/
    
  • configurer ssh avec les clés nécessaires

    sudo mkdir /srv/backup/$BKP_USER/.ssh
    sudo chown $BKP_USER: /srv/backup/$BKP_USER/.ssh
    sudo chmod 550 /srv/backup/$BKP_USER/.ssh
    echo "<CLE_SSH_PUBLIQUE>" | sudo tee -a /srv/backup/$BKP_USER/.ssh/authorized_keys
    sudo chown $BKP_USER: /srv/backup/$BKP_USER/.ssh/authorized_keys
    sudo chmod 440 /srv/backup/$BKP_USER/.ssh/authorized_keys
    
  • créer un utilisateur <user>-admin pour l'administration de ses backups (installation de cron, etc.).

    sudo adduser ${BKP_USER}-admin --gecos $BKP_USER \
                                   --home /srv/backup/${BKP_USER}-admin \
                                   --disabled-password
    sudo adduser ${BKP_USER}-admin ${BKP_USER}
    sudo adduser ${BKP_USER}-admin backup-admin
    
    
    sudo chmod 770 /srv/backup/${BKP_USER}-admin
    
  • configurer ssh avec les clés nécessaires

    sudo mkdir /srv/backup/${BKP_USER}-admin/.ssh
    sudo chown ${BKP_USER}-admin: /srv/backup/${BKP_USER}-admin/.ssh
    sudo chmod 700 /srv/backup/${BKP_USER}-admin/.ssh
    sudo su ${BKP_USER}-admin -c \
        "echo <CLE_SSH_PUBLIQUE> >> /srv/backup/${BKP_USER}-admin/.ssh/authorized_keys"
    
  • permettre au compte ${BKP_USER}-admin de modifier les clés ssh de ${BKP_USER}

    On utilise sudo en permetant à ${BKP_USER}-admin qui est membre du groupe ${BKP_USER} d'exécuter n'importe quelle commande en tant que ${BKP_USER} sans mot de passe. Pour cela il est possible de rajouter la ligne suivante :

    %${BKP_USER} ALL=($BKP_USER) NOPASSWD: ALL
    
  • créer le répertoire de données

    Le répertoire qui contient les données de sauvegarde, a le bit sticky activé : cela force a ce ce soit le prorpiétaire du fichier ou du répertoire qui puisse le supprimer ou de le renommer. Son propriétaire est ${BKP_USER}-admin et son groupe est ${BKP_USER}.

    sudo mkdir /srv/backup/$BKP_USER/backups
    sudo chown ${BKP_USER}-admin:$BKP_USER /srv/backup/$BKP_USER/backups
    sudo chmod 1770 /srv/backup/$BKP_USER/backups
    sudo ln -s ../${BKP_USER}/backups /srv/backup/${BKP_USER}-admin/backups
    

    Cela permet par exemple, par un simple changement de propriétaire et de droit, d'interdire toute modification des sauvegardes par le compte ${BKP_USER} tout en lui permetant de les lire.

Détails de configuration

Les backups consistent à fournir un espace de stockage accessible en sftp. La partition stockant les données se trouve sur /srv/backup/<user>/. Chaque utilisateur dispose d'un compte unix dont le shell est /bin/false. OpenSSH permet de chrooter un utilisateur dans un environnement propre à un compte unix.

Les opérations faites :

  • ajout/modification dans le fichier /etc/ssh/sshd_config :

    Subsystem sftp internal-sftp
    
    
    Match Group backup-user
        ChrootDirectory /srv/backup/%u
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
        PubkeyAuthentication yes
        PasswordAuthentication no
    
    
    Match Group backup-admin
        AllowTCPForwarding no
        X11Forwarding no
        PubkeyAuthentication yes
        PasswordAuthentication no
    

    Le subsystem internal-sftp est nécessaire pour chrooté les environnements des utilisateurs.

  • créer le groupe backup-user et le group backup-admin

    sudo addgroup backup-user
    sudo addgroup backup-admin