« LINUX:SSH et RSYNC » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
__FORCETOC__
__FORCETOC__
----
''→ [[LINUX:RSYNC-Rassemblement sur une autre machine|retour à RSYNC-Rassemblement sur une autre machine]]''
----
=But=
=But=
Dans les opérations suivantes nous allons utiliser le protocole SSH seul ou en conjonction avec RSYNC. Nous allons donc configurer celui-ci et l'utilisateur concerné par notre projet sur la machine distante.
Dans les opérations suivantes nous allons utiliser le protocole SSH seul ou en conjonction avec RSYNC. Nous allons donc configurer celui-ci et l'utilisateur concerné par notre projet sur la machine distante.
Ligne 57 : Ligne 60 :


==Droit ROOT==
==Droit ROOT==
Dans le projet, l'utilisateur "sauvegarde" doit pouvoir pouvoir éteindre la machine (programme "shutdown") or ce droit est réservé à l'utilisateur "root". De plus ceci doit pouvoir se faire sans l'aval du mot de passe. Pour ce faire, il faut ajouter ce droit dans le fichier "'''/etc/sudoers'''":
Dans le projet, l'utilisateur "sauvegarde" doit pouvoir pouvoir éteindre la machine (programme "init") or ce droit est réservé à l'utilisateur "root". De plus ceci doit pouvoir se faire sans l'aval du mot de passe. Pour ce faire, il faut ajouter ce droit dans le fichier "'''/etc/sudoers'''":
----
----
  sauvegarde  ALL= NOPASSWD: /usr/sbin/shutdown
  sauvegarde  ALL= NOPASSWD: /usr/sbin/init
----
----
Cette opération est effectuée sur la machine distante. Le paramètre "ALL" doit être remplacé par le nom de la machine locale ou son adresse IP si ce fichier est partagé vers différentes machines.
Cette opération est effectuée sur la machine distante. Le paramètre "ALL" doit être remplacé par le nom de la machine locale ou son adresse IP si ce fichier est partagé vers différentes machines.
Ligne 71 : Ligne 74 :
==Fichier de configuration==
==Fichier de configuration==
On commence par créer un fichier de configuration. Le fichier de configuration natif se situe sans le répertoire "/etc/ssh" et se nomme "sshd_config"; il utilise le port 22. Notre but est d'utiliser un autre port, le 6333 et nous désirons que seul l'utilisateur "sauvegarde" créé ci-dessus y accède seulement via une clé d'authentification. Seule la machine client ayant l'adresse IP 192.168.1.2 peut y accéder. Nous nommerons ce fichier "sshd6333_config".
On commence par créer un fichier de configuration. Le fichier de configuration natif se situe sans le répertoire "/etc/ssh" et se nomme "sshd_config"; il utilise le port 22. Notre but est d'utiliser un autre port, le 6333 et nous désirons que seul l'utilisateur "sauvegarde" créé ci-dessus y accède seulement via une clé d'authentification. Seule la machine client ayant l'adresse IP 192.168.1.2 peut y accéder. Nous nommerons ce fichier "sshd6333_config".
L'option '''PidFile ''' est ajouté. Elle définit le nom du fichier contenant le n° de ce processus SSHD. Il est conseillé de l'ajouter surtout dans le cas où vous lancez un autre service SSHD classique.


Voici sont contenu:
Voici sont contenu:
Ligne 80 : Ligne 86 :
  ListenAddress 0.0.0.0
  ListenAddress 0.0.0.0
  LogLevel VERBOSE
  LogLevel VERBOSE
# nom du fichier contenant le PID du service
'''PidFile /var/run/sshd6333.pid'''
  # root ne sait pas se connecter
  # root ne sait pas se connecter
  PermitRootLogin no
  PermitRootLogin no
Ligne 170 : Ligne 178 :
* la clé privée "serveur-sauvegarde-rsync-key"
* la clé privée "serveur-sauvegarde-rsync-key"
* la clé publique "serveur-sauvegarde-rsync-key.pub"
* la clé publique "serveur-sauvegarde-rsync-key.pub"
Le répertoire et les clés doivent être protégée:
Le répertoire et les clés doivent être protégés:
  chmod 700 key
  chmod 700 key
  cd key
  cd key
Ligne 180 : Ligne 188 :
On doit transférer la clé publique sur la machine serveur dans le sous-répertoire ".ssh" du répertoire racine de l'utilisateur "sauvegarde", c'est à dire dans le répertoire "/produc/sauvegarde/.ssh". Ce fichier doit être renommé "authorized_keys" comme spécifié dans le fichier de configuration du serveur SSH. Si nécessaire, ce fichier peut contenir plusieurs clés, une par ligne mais toutes différentes.
On doit transférer la clé publique sur la machine serveur dans le sous-répertoire ".ssh" du répertoire racine de l'utilisateur "sauvegarde", c'est à dire dans le répertoire "/produc/sauvegarde/.ssh". Ce fichier doit être renommé "authorized_keys" comme spécifié dans le fichier de configuration du serveur SSH. Si nécessaire, ce fichier peut contenir plusieurs clés, une par ligne mais toutes différentes.


Le répertoire et ce fichier doivent être protégée:
Le répertoire et ce fichier doivent être protégés:
  cd /produc/sauvegarde
  cd /produc/sauvegarde
  chmod 700 .ssh
  chmod 700 .ssh
Ligne 188 : Ligne 196 :


==Contrôler l'accès==
==Contrôler l'accès==
A ce stade, l'utilisateur "sauvegarde" via une session SSH (port 6333) peut exécuter n'importe quelle commande. Nous allons y remédier. Cette opération est a effectuer sur la machine serveur.
A ce stade, l'utilisateur "sauvegarde" via une session SSH (port 6333) peut exécuter n'importe quelle commande. Nous allons y remédier. Cette opération est à effectuer sur la machine serveur.


Dans le fichier "/produc/sauvegarde/.ssh/authorized_keys", devant la clé publique, on ajoute l'option "command=...":
Dans le fichier "/produc/sauvegarde/.ssh/authorized_keys", devant la clé publique, on ajoute l'option "command=...":
Ligne 196 : Ligne 204 :
A chaque ouverture de session qui utilise cette clé publique, cette commande sera exécutée.
A chaque ouverture de session qui utilise cette clé publique, cette commande sera exécutée.


Le projet a besoin d'utiliser la commande "rsync" pour la sauvegarde et la commande "shutdown" pour éteindre la machine serveur.
Le projet a besoin d'utiliser la commande "rsync" pour la sauvegarde et la commande "sudo init 0" pour éteindre la machine serveur.


Voici le contenu du script "/produc/sauvegarde/logssh.bat":
Voici le contenu du script "/produc/sauvegarde/logssh.bat":
----
----
 
#!/bin/bash
if  [ -n "$SSH_ORIGINAL_COMMAND" ]
then
  IP=`echo $SSH_CLIENT | /usr/bin/awk '{print $1}' `
  # on journalise les appels
  echo  "Date: `/usr/bin/date` - Client: $IP - Comande: $SSH_ORIGINAL_COMMAND" >> $HOME/log/ssh-command.log
  # echo  "`env`" >> $HOME/log/ssh-command.log
  # filtrage des commandes autorisées
  TEST1=`echo $SSH_ORIGINAL_COMMAND | grep "rsync --server" | grep "/produc/sauvegarde/courant/" `
  TEST2=`echo $SSH_ORIGINAL_COMMAND | grep "sudo init 0" `
  # éviter les chaînages de commandes
  TESTA=`echo $SSH_ORIGINAL_COMMAND | grep ";" `
  TESTB=`echo $SSH_ORIGINAL_COMMAND | grep "|" `
  # test
  if [ "$TESTA" = "" ] && [ "$TESTB" = "" ]
  then
  if [ "$TEST1" != "" ] || [ "$TEST2" != "" ]
  then
    TEST="OK"
  else
    TEST="BAD"
  fi
  else
  TEST="BAD"
  fi
  # traitement
  if [ "$TEST" = "OK" ]
  then
  # exécution
  exec $SSH_ORIGINAL_COMMAND
  else
  # sinon on avertit l'administrateur
  echo "!!!! commande non valide !!!!" >> $HOME/log/ssh-command.log
  # envoi de mail
  echo -n "Serveur: "                            >  $HOME/log/dfmail.log
  /usr/bin/hostname                              >> $HOME/log/dfmail.log
  echo " "                                      >> $HOME/log/dfmail.log
  echo "Client: $IP "                            >> $HOME/log/dfmail.log
  echo " "                                      >> $HOME/log/dfmail.log
  /usr/bin/date                                  >> $HOME/log/dfmail.log
  echo "Probleme de commande pour la sauvegarde" >> $HOME/log/dfmail.log
  /bin/mail -s "Piratage (sauvegarde)" root < $HOME/log/dfmail.log
  /usr/bin/rm -f $HOME/log/dfmail.log
  fi
fi
----
----
Ce fichier peut être renommé selon vos désirs.




Ligne 207 : Ligne 260 :




----
----
''->[[LINUX:RSYNC-Rassemblement sur une autre machine|retour à RSYNC-Rassemblement sur une autre machine]]''
''&rarr; [[LINUX:RSYNC-Rassemblement sur une autre machine|retour à RSYNC-Rassemblement sur une autre machine]]''
----
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]