« 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 " | 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/ | 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 | 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 | 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 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 " | 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]]'' | ||
---- | |||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
[[Category:LINUX]] | [[Category:LINUX]] |