Les différents visages de SSH
Le 10 February 2009 à 16:12.

SSH est un utilitaire absolument vitale pour Unix, mais aussi pour Windows. Dans une première approche il permet juste d'ouvrir un terminal à distance et n'est alors pas sans rappeler le vénérable Telnet. Mais à y regarder de plus prés il se révèle sous le jour d'un véritable couteau suisse sécurisé, permettant en vrac de lancer à distance des applications graphiques, de créer des proxy sécurisés, de router tout un trafic IP sur un canal crypté, de lancer des commandes à distances,etc. En somme, outil fondamental qu'il est indispensable de maîtriser.

Du shell distant au flux sécurisé

Comme le laisse entendre son nom, le Secured Shell est un outil permettant, à travers une connexion sécurisée, de lancer une shell (généralement un bash) sur une machine distante, de lui fournir des données et d’en recueillir les résultats. Ainsi lorsque je tape la commande suivante, SSH m'ouvre dans mon terminal, après saisi des accréditations, un shell distant sur la machine titine en utilisant le login gaston.

gaston$ssh gaston@titine
gaston@titine
gaston@titine 
Exemple de connexion simple

La première chose qui se passe ici est un tunnel chiffré entre le client SSH local et le serveur SSH distante. Tout ce qui arrive par l'entrée standard du client est expédié vers le serveur et tout ce qui est reçu par le serveur est envoyé vers la sortie standard du client.

A l'autre bout, le serveur SSH lance un shell. Il injecte dans son entrée standard tout ce qui est reçu et expédie tout ce qui est émis sur la sortie standard du shell. En résulte un bash distant "télécommandé" à travers un tube chiffré.

Il ne faut pas confondre terminal et shell. Le terminal est l'outil qui gère les entrées clavier et les affichages sous la forme d'un vénérable écran texte. De manière caricaturale, un terminal est l'émulateur des anciens écrans d'ordinateur à l'époque où la souris n'existait pas encore. Un shell quant à lui est une application texte, que l'on lance pour pouvoir saisir des commandes. Le shell utilise donc le terminal pour lire les données et écrire les résultats.

Par défaut, le serveur SSH ne lance qu'un simple bash. Mais il est possible, par le biais du client, de lui demander de lancer une commande au sein même de ce bash. Attention, j'ai bien dit au sein du bash, pas en remplacement.

Imaginons que nous voulions créer à distance le fichier helloWorld.txt contenant la chaîne bonjour. En utilisant SSH, la syntaxe serait la suivante :

gaston$echo "Bonjour" | ssh utilisateur@machine "cat > helloWorld.txt"
gaston$ 
Exemple de redirection simple

Pour ceux qui ne sont pas à l’aise avec les tubes et les redirection, vous pouvez faire un petit tour ici.

  1. La commande echo va écrire dans la sortie standard la chaîne de caractères "Bonjour".
  2. Le tube (|) redirige cette sortie vers l'entrée du client ssh, comme si nous avions saisi cette chaîne à la main.
  3. SSH va établir une connection sur la machine titine et sur le compte de l'utilisateur gaston.
  4. Une fois la connection établie, le serveur SSH lance un bash auquel il ajoute le paramètre -c cat > helloWorld.txt. Cette commande ne fait qu'attendre les données venant de son entrée standard et envoie ce qu'elle y trouve dans le fichier helloWorld.txt

Pratique non ? Et nous pouvons faire la même chose dans les deux sens. Pour rendre la commande précédente un peu plus polie, faisons répondre la machine distante.

gaston$echo "Bonjour" | ssh utilisateur@machine "cat > helloWorld.txt ; echo 'Bien le bonjour à vous'"
Bien le bonjour à vous
gaston$ 
Exemple de redirection simple avec réponse

Ici la seule différence est que l'on a groupé l'exécution de deux commandes en une seule (grâce au ;). La seconde ayant pour rôle de répondre dans la sortie standard, ce que SSH relaye immédiatement dans son tunnel, vers la machine locale. Et comme il n'y a pas de redirection en plus, le remerciement s'affiche simplement à l'écran.

Ces deux exemples très simples vous permettent de voir que SSH est loin d'être le simple shell qui parait être. Il est possible d'effectuer grâce à lui des tâches complexes comme des backups de machines distantes vers une machine locale. Après c'est une question de besoin, d'imagination et de goût pour les légos Wink

Paramétrage du serveur

En passant directement par le démon SSH

SSH se compose d'un client (commande ssh) et d'un serveur (démon sshd). Le couple est installé en standard par l'immense majorité des distributions. Les commandes que j'ai données plus haut marchent donc, clef en main, sur la plupart des installations. Mais ceci n'empêche pas de changer les comportements standard pour faire coller tout cela à vos besoins.

Pour les Windowsiens, un serveur SSH est disponible dans le projet cygwin. Il marche exactement comme la version unix. Il a en plus le bon goût de s'installer en tant que service et offrir aux expatriés du monde Unix une VRAIE console Smiling

Dans la majorité des cas, la configuration de l'ensemble de la chaîne SSH se trouve dans le dossier /etc/ssh. Et plus spécifiquement celle du serveur sshd se trouve dans le fichier /etc/ssh/sshd_config. Un classique man sshd_config vous en détaillera les nombreuses options.

La plupart du temps, le serveur se lance simplement comme un service linux par un /etc/init.d/sshd start.

En passant par xinetd

Normalement, lorsque l'on lance un service réseau (OpenSSH, ftp, etc...) il se met en écoute d'un port (22 pour SSH, 21 pour FTP, etc...) et attends patiemment qu'un utilisateur veuille bien s'y connecter. Pendant ce temps, lorsque personne n'y fait appel, le service reste en mémoire et parfois occupe aussi un peu de CPU. Xinetd est un outil qui va écouter un port à la place d'un service. Lorsqu'un utilisateur se connecte, xinetd charge le service en mémoire et le colle sur le port. Lorsque le client se déconnecte, xinetd décharge le service et libère ainsi la mémoire.

Son utilisation est qui plus est conseillée en façade à un réseau public car finalement c'est lui qui sera du coup en première ligne, pas le serveur réel. Et vu qu'il est très simple de conception, il est aussi très sûr.

xinetd est installé en standard dans la majorité des cas. Si vous n'avez pas de /etc/init.d/xinetd vous pouvez l'installer par un simple urpmi xinetd.

Pour utiliser sshd avec xinetd, il faut simplement créer ou modifier le fichier /etc/xinetd.d/sshd-xinetd comme suit :

service ssh {
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/sshd
        server_args             = -i
        nice                    = 10
}
configuration d'XInetd pour SSH

C'est le disable=no qui indique que le fichier est actif. Maintenant il va nous falloir arrêter le service sshd par un /etc/init.d/sshd stop et un chkconfig --del sshd pour éviter qu'il ne se relance au démarrage de la machine. Ensuite opération inverse pour xinetd : /etc/init.d/xinetd start et chkcnfig --add xinetd. ET voilà c'est tout. Et pour vérifier que c'est bien xinetd et non plus sshd qui est en écoute du port 22 :

root#netstat -anlp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 926/xinetd
root# 
Vérification du lancement d'Xinetd pour SSH

SSH Sans mot de passe

A la longue c'est un peu fatiguant de rentrer un mot de passe à chaque connexion. Pour automatiser cela, OpenSSH peut remplacer l'authentification classique par un jeu clef publique/clef privée.

Cette technique est très pratique mais est aussi à manier avec beaucoup de précautions. Ne jamais permettre un login sans mot de passe d'un compte utilisateur vers un compte root car si le premier est compromis (ce qui peut arriver facilement), le second l'est aussi, et là, ce peut être beaucoup plus grave !!

SSH est un outil pointilleux et encore plus lorsqu'il s'agit de se connecter sans mot de passe. La première chose à valider est que le dossier home de l’utilisateur sur lequel on va chercher à se connecter lui appartienne vraiment. Cela peut sembler idiot mais souvent ssh manque sa connexion simplement pour cette raison. Nous allons donc tout d'abord vérifier que l'utilisateur gaston possède bien un compte et un groupe propre. Pour cela, nous utilisons la commande suivante :

root#id gaston
uid=500(gaston) gid=500(gaston)
root# 
Vérification de l'utilisateur

Nous avons donc bien un utilisateur gaston et son groupe gaston . Nous pouvons donc vérifier que ce dossier lui appartient bien en tapant sur la machine distante :

root#chown gaston:gaston /home/gaston -Rc
root# 
Vérification des bons propriétaires

Si la commande vous affiche des changements, c'est que l'on a bien fait de l'exécuter Wink

Dans le même ordre d'idée, SSH n'aime pas trop que le dossier d'un utilisateur soit lisible par le reste du monde, nous allons donc vérifier que les droits sont les bons par un :

root#chmod 700 /home/gaston -Rc
root# 
Vérification des bons droits

Ceci fait, nous allons nous intéresser au dossier /home/gaston /.ssh. Normalement il existe déjà, sinon, créez le. Lui aussi doit avoir des droits bien stricts que nous allons vérifier ainsi :

root#chmod 700 /home/gaston/.ssh
root# 
Vérification des droits sur .ssh

Pour l'instant, nous allons nous arrêter là et tenter une connexion distante par un

root#ssh gaston@titine
gaston@titineexit
root#
root# 
Tentative de connexion

Si tout est bien configuré, ssh devrait vous demander le mot de passe et vous donner l'accès.

Nous voulons maintenant que gaston puisse se connecter de sa machine à la machine titine sans mot de passe. Pour cela, il faut que gaston génère sur son compte une paire de clefs et que sur son compte distant, il autorise cette clef.

La marche à suivre est donc la suivante. Tout d'abord, sur la machine locale, il faut générer un couple de clef :

gaston$ssh-keygen -t dsa
Appuyez sur [Entrée] à chaque question...
gaston$ 
génération de la paire de clefs

Une fois terminée, vous devez avoir dans le dossier /home/gaston/.ssh deux clefs : id_dsa et id_dsa.pub. Pour que ssh les accepte, nous devons en modifier les droits :

gaston$chmod 600 ~/.ssh/* -c
gaston$ 
Vérification des droits sur les clefs

Ceci fait, nous allons recopier la clef PUBLIQUE, c'est-à-dire id_dsa.pub dans le fichier /home/gaston/.ssh/authorized_keys de la machine distante. Ce fichier peut contenir plusieurs clefs, les unes dernières les autres, une ligne à chaque fois.

Pour copier cette clef, soit vous utilisez le bon vieux presse-papiers, soit vous utilisez un script fourni en standard avec ssh :

gaston$ssh-copy-id gaston@titine
gaston$ 
Transmission de la clef

Cette ligne magique va vous demander (une dernière fois) le mot de passe sur la machine distante et y expédier ensuite, via ssh, le contenu de la clef publique.

Voilà, c'est terminé, il ne suffit plus qu'à tester votre nouvelle connexion sans mot de passe. En ajoutant un paramètre à ssh, il est aussi possible de mettre de prendre les clefs ailleurs sur ~/.ssh/, par exemple sur une clefs usb, et ainsi de les garder avec vous en permanence.

Redirections de ports

Redirection d'un port distant vers un port local

Nous avons vu que SSH fonctionnait comme un tunnel sécurisé permettant de faire passer de manière chiffrée des données d'une commande à une autre, l'une locale, l'autre distante. Mais ce ne serait pas rendre hommage à cet outil que de le limiter à ce simple usage.

En effet, ssh est parfaitement capable de faire la même chose mais directement sur un port TCP/IP cette fois. Imaginons un cas classique. J'ai un réseau local utilisant webmin. Ce dernier est un serveur WEB utilisant le port 10000. Or je n'ai pas très envie de publier ce port sur un réseau public, et pourtant pouvoir accéder à cette interface d'administration à distance peut-être très utile. La solution ? Passer par un routage de port avec ssh :

10000 vers le port local localhost:8080":
gaston$ssh titine -L 8080:localhost:10000
gaston@titine
gaston@titine 

Une fois la commande exécutée et la connexion établie, si vous prenez votre navigateur WEB et que vous allez à l'adresse localhost:8080 (le port 8080 de VOTRE machine locale), la requête va transiter par ssh et être effectuée sur le serveur distant au port localhost:10000. Le résultat de la requête va revenir par le même chemin et s'afficher sur votre navigateur. Et voilà Smiling

Alors nous avons utilisé localhost indiquant la machine l'adresse local de la machine distante (faut suivre Wink ). Mais cette commande permet d'atteindre toutes les machines du réseau local qui contient ma machine distante. A méditer très sérieusement lorsque vous ouvrez benoîtement un accès ssh à un tiers...

Redirection d'un port local vers un port distant

Il est aussi possible par ssh d'effectuer l'opération inverse et ainsi autoriser la machine distance à se connecter sur un serveur de votre lan

10000 sur le port distant titine:8080":
gaston$ssh titine -R 8080:localhost:10000
gaston@titine
gaston@titine 

Si sur la machine distante je vais cette fois à l'adresse localhost:8080, j'accède en réalité au port 10000 de ma machine locale.

Redirection globale via SOCKS

SSH complète la panoplie du tunnel chiffré par un outil de poids : un proxy SOCKS.

Un proxy SOCKS est un petit serveur utilisant un protocole conçu pour permettre à l'application qui sait en faire usage (un navigateur WEB, un messenger, un client FTP, etc..) de se connecter sur le net sans avoir directement de connexion à internet. Toutes les demandes de l'application vont donc passer par le proxy SOCKS.

Un proxy SOCKS se distingue d'un Proxy HTTP en le fait qu'il n'est pas spécialisé à un seul protocole (contrairement au cas précédents) mais va router globalement le trafic qu'il soit FTP, HTTP, POP, etc...

Pour utiliser une machine distante comme passerelle internet et la machine locale comme proxy socks, il me suffit donc de lancer la commande suivante :

gaston$ssh titine -D 3128
gaston@titine
gaston@titine 
Établissement d'un proxy SOCKS à partir de la machine distante sur le port local 3128

Et si je configure par exemple FireFox pour utiliser le serveur SOCKS localhost:3128, je vais pouvoir, à travers la connexion SSH, utiliser la connexion Internet de la machine distante sans aucune limite. Je peux aller sur n'importe quelle machine du réseau distant, je peux aussi utiliser la connexion Internet du réseau distant. Bref, faire à peu près ce que je veux. La aussi, c'est le genre de chose à méditer avant de donner sans réfléchir un accès ssh sur une machine.

Limiter les droits à SSH

Présenté comme cela, si vous créer un utilisateur sur voir machine il va de-factor avoir accès à SSH, et donc à tout ce que cet outil permet. Cela va de la création du tunnel SSH, au lancement d'un shell distant, en passant, nous allons le voir un peu plus loin, la possibilité d'utiliser votre ligne Internet comme si c'était la sienne (mode "redirection"). Il n'est pas dit que vous y teniez... Voyons donc comment limiter cela.

Interdire l'accès root

Règle générale, ne connectez JAMAIS un serveur SSH sur un réseau public en oubliant de désactiver les accès de l'utilisateur root. En effet si une faille est trouvée un jour sur ssh, et qu'elle est utilisée avec cet utilisateur, c'est toute votre machine qui est du coup compromise. Veillez donc à ce que le paramètre PermitRootLogin No soit bien présent dans votre fichier de configuration. Si vous tenez à pouvoir vous connecter en root à partir d'internet, allez à la technique SSH sans mot de passe dans le chapitre Améliorer la sécurité de l'accès root.

Ne pas utiliser le port par défaut

Par défaut, le serveur utilise le port 22. Il est malin si l'on envisage de connecter se service au réseau public de changer se port et opter pour quelque chose de moins standard, par exemple 12401 (paramètre Port 12401 dans sshd_config). L'avantage est que vous vous mettez à l’abri des attaques automatisées. L'inconvénient est que vous devrez du coup spécifier à chaque fois ce port dans une commande ssh, par un ssh -p 12401 titine. Pour éviter cela si vous êtes amené à vous connecter souvent de la même machine, je vous conseille d'ajouter l'entrée suivante au fichier ssh_config

Host titine
        Port 12401
configuration SSH cliente pour un port non standard

Cette technique vous permet d'avoir des paramètres de connections par défaut différent pour chaque serveur cible. L'entrée host * définissant le paramétrage par défaut, commun à tous.

Interdire l'accès root sans mot de passe

La technique de la connexion sans mot de passe peut être très utile pour améliorer la sécurité d'un serveur SSH connecté au réseau public. En effet, comme nous l'avons vu plus haut, il est irresponsable de laisser à root le droit de se connecter sur un serveur ssh à partir d'internet. Il n'y a pas de failles connues à ce jour sur ce point mais nul ne sait ce qu'il peut arriver. Mais si vous tenez à pouvoir vous connecter en root sur un serveur SSH public, la bonne solution consiste à utiliser justement un couple de clefs et à paramétrer le serveur distant pour qu'il refuse la connexion par mot de passe et donc n'accepte QUE la connexion par clef.

Il va sans dire que la règle énoncée plus haut tient toujours, ne faite ce genre de chose qu'entre deux comptes root, pas entre celui d'un utilisateur standard et le root. Je me répète, je sais, mais bon.

Pour indiquer au serveur SSH de refuser toute méthode d'authentification autre que celle de la clef, il suffit simplement de modifier le fichier /etc/ssh/sshd_config et de modifier le paramètre PermitRootLogin "without-password". Bien évidemment, il faut relancer le serveur après cette modification.

Interdire l'accès à SSH complètement

Deux approches (au moins) sont possibles. La première consiste à créer un groupe, par exemple utilisateurs-ssh, et d'y ajouter les utilisateurs qui ont le droit d'accéder à SSH (quel qu'en soit l'usage, console ou tunnel).

Ceci fait, vous devez éditer votre fichier /etc/ssh/sshd_config pour ajouter la directive AllowGroups utilisateurs-ssh. Relancez le serveur et à partir de maintenant, seuls les membres du groupe utilisateurs-ssh pourront utiliser SSH.

gaston$ssh gaston@titine
gaston@titine's password:
Access denied.
gaston$ 
Interdiction de shell

Remarquez comme le SSH est vicieux, il va quant même demander un mot de passe alors qu'il sait déjà pertinemment que l'accès est interdit pour cet utilisateur Smiling

L'autre approche est de déconnecter le shell de l'utilisateur qui ne doit pas avoir accès à SSH. Cette méthode a ma préférence car elle est fonctionellement plus logique. Je ne cherche en réalité pas à interdire l'accès distant spécifiquement mais tout accès de type console ou tunnel.

Il suffit pour cela de modifier le fichier /etc/passwd et de remplacer le shell (la fin de la ligne, généralement à /bin/bash) par la commande /sbin/nologin. Le résultat sera le suivant :

gaston$ssh gaston@titine
gaston@titine's password:
── Bienvenue sur Titine !! ──
This account is currently not available.
Connection to titine closed.
gaston$ 
Interdiction de shell

Attention cependant, les techniques de modification du shell peuvent avoir de drôles d'effets de bords. Par exemple VSFTP utilise le shell courant pour ouvrir une session utilisateur via PAM. Or le /sbin/nologin, comme son équivalent moins loquasse /bin/false renvoient un code d'erreur indiquant un échec de connection qui empêcherait la session FTP de se former. La solution dans ce cas est de plutôt utiliser /bin/true.

Autre effet de bord, certains vérifient que le shell est valide dans le système et s'il ne l'est pas, refusent la connexion, même avec un /bin/true. La solution est d'ajouter /bin/true dans /etc/shells.

Interdire les redirections

Comme nous l'avons vu, SSH permet de créer des redirections de ports qu'il peut-être sage d'empêcher. Pour commencer, ce n'est pas la peine d'interdire cet usage si vous laissez un libre accès au shell. En effet, rien n'empêche un utilisateur de créer sa petite redirection à la main... Et si vous avez déconnecté le shell par un nologin ou équivalent l'utilisateur en question sera de toute façon bien en peine de tenter un tunnel vu que SSH va l'envoyer bouler faute de point d'atterrissage. Il reste cependant des cas, comme nous allons le voir plus loin, qui rend cela intéressant.

Vous pouvez donc globalement désactiver les redirections en ajoutant à /etc/ssh/sshd_config la directive AllowTcpForwarding No. Maintenant si vous désirez faire la même chose par utilisateur, c'est globalement beaucoup plus sport et passe obligatoirement par l'authentification par clef publiques/privées. Pas très pratique. Du coup c'est redirection pour tout le monde ou pour personne.

Autoriser l'accès au redirections mais pas au reste

Dans certains cas, nous aimerions bien que le shell ainsi que le lancement de commande en général soit interdits, sans pour autant bloquer les redirections qui sont utiles pour accéder de manière sécurisée à un service local (postgresql, mysql, subversion, etc.).

Pour cela nous allons utiliser non pas un nologin mais un faux shell qui ne fera rien d'autre que roupiller. Un tel shell est téléchargeable ici et il convient de le décompresser puis le compiler (make) et de le placer dans le dossier /sbin/sleepshell. Ensuite, nous pouvons tester :

gaston$ssh gaston@titine
gaston@titine's password:
── Bienvenue sur Titine !! ──
Connection: 88.111.222.33 57248 88.22.32.44 22
Client: 8.111.222.33 57248 22
Terminal: /dev/pts/1
******
<CTRL-C>
gaston$ 
Interdiction de shell

Comme vous le voyez, ce shell un peu spécial n'autorise rien du tout et permet donc de se connecter sur le serveur via SSH sans avoir la moindre possibilité d'obtenir un terminal.

Après il suffit, comme pour le nologin, de coller ce shell dans la bonne ligne du /etc/passwd et de l'ajouter dans /etc/shells.

Accepter seulement certaines commandes

Solution ultime s'il en est, interdire le shell et toutes les commandes qui ne sont pas explicitement désignées comme valides. Toujours en utilisant la technique du nologin, nous pouvons créer un script filtrant qui fera office de shell :

#!/bin/sh

# récupération de la ligne de commande complète
ligne=$2

# extraction de la commande
commande=${ligne%% *}

case "$commande" in
  # c'est une commande autorisée...
  "svnserve")
     $ligne
     ;;

  # tout le reste est interdit
  *)
        echo "Pas de $commande ($ligne) chez nous !!" > /dev/stderr
  ;;
esac
/sbin/restricted_shell

Ici nous interdisons tout sauf svnserve (le serveur de subversion). Le script en lui-même n'est pas sorcier, il s'agit juste de prendre le deuxième paramètre donnée par ssh (ce qu'il y a après le -c), d'extraire le premier mot et de le tester. Si c'est bon, on exécute la commande comme un bash l'aurait fait. Le cas échéant, une erreur est écrite sans pour autant renvoyer un code d'erreur, ce qui permet d'utiliser ce script comme un /bin/true.

Conclusion

Ce rapide tour d'horizon nous a permis de voir à quel point SSH est un outil versatile et souple. Et dangereux aussi. A manier donc avec d'infinies précautions dès qu'il s'agit d'ouvrir un accès ssh sur votre machine, ou de laisser passer ssh sur un firewall.

Commentaires

Dab, le 12 septembre, 2007 - 23:59

Excellent dossier Wink
Il manque juste un petit paragraphe sur 'scp'. Dailleurs à ce propos il est possible sous gnome de s'en servir en serveur de fichier sécurisé avec Nautilus.
Fichier->se connecter à un serveur->SSH
J'imagine que ça l'est aussi sous KDE.

Anthony, le 11 février, 2009 - 12:24

Juste pour rajouter sur scp:
Bash sait faire la complétion des fichier distante si on a une authentification par clé.
Et pour compléter les |, quand on a beaucoup de petit fichier, il est plus efficace de faire :
tar czf - | ssh user@machine "( cd rep_destination; tar xzf -)"

Ulhume, le 11 février, 2009 - 13:32

Ah bé ça je savais pas, j'ai même pas eu l'idée d'essayer !!

Anthony, le 11 février, 2009 - 15:27

Pour compléter encore mes dire :
On peut également, copier directement d'un ordi à un autre, même si les deux ne se voit pas :

ssh user1@ordi1 "(cd rep_source; tar czf -)" | ssh user2@ordi2 "(cd rep_dest; tar xzf -)"

On peut aussi faire du multi rebond en un :

ssh -T user@passerel ssh user2@ordi_final

On se retrouve sur un ordi_final, même s'il n'y a pas de routage. On peut faire pas mal de chose aussi avec les tunnels, donc admin reseau, méfiez vous comme de la peste de ses utilisateurs avancés, et configurer bien vos config de sshd.

On peut faire toutes les astuces que vous trouverez avec rsh en ssh, mais de manière sécurisée.

J'ai déja était dans le cas où il me fallait aller d'un réseau de dev. vers un réseau de test. Mais on ne pouvait faire de ssh, copie, etc. que de test -> Dev. Pour éviter les clé usb, on avait mis un système de tunnel ssh fait par les utilisateurs. Les admin voulaient pas nous aider Frown, du coup, on leur a quand même signalé la manip, et après quelques question, ils nous l'avaient laissé. ouf !

Dab, le 13 septembre, 2007 - 01:27

En effet j'avais constaté, j'aime d'ailleurs beaucoup ton système de versionning... sniff j'ai pas ça sous wordpress Frown ... heu quoi que ... je m'en vais de suite vérifié.

Ben non c'est pas plus simple, fo taper tout un tas de choses les une à la suite des autres, sous gnome tu as une jolie fenêtre qui s'ouvre ou tout est expliqué na Wink
ftps est mort vive sftp Wink

Ulhume, le 13 septembre, 2007 - 07:57

Pour les versions, c'est moi qui me le suis frappé. Drupal a juste un truc pas mal, c'est que lorsque tu sauves un document, tu peux le faire en tant que modification simple, ou nouvelle révision. Du coup, il créé un nouvelle version qui devient la version courante et les anciennes sont toujours dispo. Tu dois aussi avoir cela dans WP non ? Parce qu'après, c'est juste une exploitation de ces informations dans le thème.

Ban, je vois, mauvaise foi va Smiling Et je fais comment avec nautilus pour ouvrir un document sur le protocole sieve ? Wink Et comment (ça ça m'intéresse vraiment !) dans n'importe quel boite de dialogue gnome, genre au hasard, gimp, tu ouvres un fichier via ssh ?

Dab, le 13 septembre, 2007 - 09:39

Heu ... c'est quoi sieve ? Sur le Net on me cause de langage de filtrage des mails.
Si je tente l'ouverture avec gimp j'ai le message :
Impossible d'ouvrir « /home/dab/ssh://dab@localhost:22/tmp/toto.png » en lecture : Aucun fichier ou répertoire de ce type
Bon j'imagine que ça sera possible dans un proche avenir car pour l'édition de document, la visualisation d'image, ... ça l'est.

Ulhume, le 13 septembre, 2007 - 10:15

Ce n'était pas une question piège, si cela avait existé, ça aurait été intéressant pour les applis qui ne sont qu'en GTK. En fait, c'est pour moi la grosse lacune de Gnome. Un équivalent de KIO qui permettrait d'unifier l'accès aux fichiers par plugins.

Sous Gnome, sans vouloir vexer, c'est comme sous Windows, tout passe par l'explorer/Nautillus qui monte comme il peut les resources. Les applications Gnome, elles, ne connaissent que le FS local, et c'est un peu dommage. Surtout lorsque les protocoles réseau sont de plus en plus variés (nfs, smb, cifs, webdav, ssh, ftp, web, etc...). C'est la raison principale qui fait que j'ai lâché cet environnement pour kde (ou plutôt que je suis chaque fois revenu à kde après quelques jours de tests de la dernière mouture de Gnome).

Après c'est une question de goût, de sensibilité et d'usage.

Pour Sieve, c'est un langage de filtrage de mail en effet, mais aussi un protocole pour communiquer avec le serveur qui gère se filtrage. Du coup, si je veux éditer le script de filtrage de mon cyrus, je n'ai qu'à taper taper dans kwrite par exemple : sieve://user@server/default, l'éditer et le sauver. KIO est vraiment étonnant, ou plutôt le nombre de plugins développé l'est. Il est même possible de se balader dans un serveur Imap sans client mail (imaps://login@server/).

Ulhume, le 22 septembre, 2007 - 14:51

Yep, c'est vrai que cela marche pas mal. Pour ceux qui ne connaissent pas, l'idée (si je me souviens bien) est d'envoyer un script via ssh sur le serveur qui prends en charge une sorte de protocole FTP.

Dab, le 17 août, 2008 - 16:20

Deux petites astuces à 2 cents que je viens de découvrir ...
Dans le paragraphe "Ne pas utiliser le port par défaut" tu modifie le port à travers le fichier /etc/ssh/ssh_config, une seconde méthode est d'ajouter un fichier ~/.ssh/config qui fera la même chose mais qui restera spécifique à l'utilisateur.

Par exemple:
host server_backup
hostname serv1.toto.fr
port 12345
user backup
identityfile /backup/.ssh/id_rsa
compression yes
cipher blowfish
protocol 2

Ainsi un simple ssh server_backup te connecte sur la machine serv1.toto.fr sur le port 12345 en tant qu'utilisateur 'backup'.

Un autre truc sympa est d'ajouter dans le fichier authorized_keys une commande qui sera exécuter lors de la connexion au serveur.

command="the_commande" ssh-rsa AAAAB3NzaC1yc2E ....

Ulhume, le 24 août, 2008 - 09:01

Vachement intéressant tes astuces !! Dans le même esprit il y a les deux fichiers /.ssh/rc et /.ssh/environnement pour respectivement lancer des commandes et ajouter des variables d'environnement lors d'une connexion SSH

feilong, le 26 août, 2008 - 13:03

Excellent article comme souvent sur ce blog.
J'ajouterai à scp quelques petits outils sympathiques tel que tsocks (linux) ou freecap, tunnelier (windows) afin de pouvoir utiliser son proxy socks 5 avec des applications qui ne sont pas prévu pour cela à la base.
http://tsocks.sourceforge.net/
http://www.freecap.ru/eng/?p=whatis
http://www.bitvise.com/tunnelier

J'ajouterai aussi un lien vers Mysecureshell afin de transformer openssh en un serveur sécurisé "chrooté" avec plein d'option comme de gérer la bande passante.... :
http://mysecureshell.sourceforge.net/fr/index.html

Pour finir, Dropbear, un serveur ssh très léger idéal pour les petites configuration matériel (routeur sous openWRT...)
http://matt.ucc.asn.au/dropbear/dropbear.html

Ulhume, le 26 août, 2008 - 15:30

Merci pour ces plus. Je n'ai pas encore bien compris ce que faisait MSS par rapport à OpenSSH, il va falloir que j'étudie cela de plus prés à mon retour.

Dropbear est effectivement un très bon remplacement pour les petites bécanes comme le Zaurus où il avait été collé en standard sur certaines distributions.

Dab, le 26 septembre, 2008 - 17:18

Juste pour infos: Un article qui cause d'aspect non décrit dans ce bien bel article :
- Le fichier de configuration (~/.ssh/ssh_config)
- Multiplexage du canal de communication
- ControlMaster auto" vs. ssh-agent
- Accélérer (un peu) l'authentification
- Redirection de ports

http://www.hsc.fr/ressources/breves/ssh_config.html

Ulhume, le 27 septembre, 2008 - 01:38

Scrapbooké Smiling Il y a effectivement deux trois techniques qui m'intéressent, merci !

Jahman, le 11 novembre, 2008 - 15:06

Salut,

Utilisez sshfs pour monter vos dossiers distant en tant que file system local
aptitude install sshfs

sshfs user@serveur:/dossier /dossier-local

Geek87, le 10 février, 2009 - 23:24

Salut,

Excellent article comme d'habitude ! Attention par contre il manque de temps en temps des mots et il y a de rares fautes d'orthographe. A part ça j'ai aussi noté deux erreurs (enfin je crois !) :
- le port FTP (celui où il est en écoute) est 21 et pas 32 si ?
- au chapitre sur la redirection de ports distants, le port de la commande et celui de l'explication ne sont pas les mêmes.
Et pour finir une petite question : quel rôle joue le demon tcpd (appelé tcp wrapper de Wietse VENEMA dans Debian) par rapport au demon xinetd ?

Bonne soirée.

Ulhume, le 11 février, 2009 - 01:44

De rares fautes ? Tu es bien chrétien Smiling Rien qu'en essayer LanguageTool dessus (le correcteur grammatical d'OpenOffice) j'ai du en repêcher un 10aines...

Sinon, pour les fautes techniques, c'est corrigé, merci Smiling

Pour TCPD c'est une bête complètement différente de xinetd. xinetd ne fait que jouer le rôle de relais/lanceur de service. Il n'y a pas comme avec TCPD de notion d'ACL, sous-réseaux, etc. D'une certaine manière j'imagine que xinetd est un sous-ensemble de tcpd.

Geek87, le 11 février, 2009 - 12:29

Oui c'est vrai que j'ai croisé quelques fautes ! Mais l'essentiel c'est que le contenu technique soit juste non ? Wink
Je croyais également que tcpd pouvait remplir le rôle de xinetd en plus de pas mal d'autres fonctionnalités. Mais j'ai lu dans le man de tcpd qu'il pouvait être lancé par inetd. Je ne vois pas l'intérêt si tcpd implémente aussi les fonctionalités d'inetd... Je vais creuser du côté du Wikipédia anglophone car le notre n'est pas très bavard à ce sujet.
A+

Geek87, le 11 février, 2009 - 14:32

Ce qui ressort de mes recherches sur Internet c'est que xinetd remplace approximativement le couple inetd + tcpd. Sur la page d'accueil du site de xinetd il est noté que celui-ci a un support natif des ACL et qu'il peut aussi être compiler avec le support de libwrap (la librairie de tcpd) pour supporter les fichiers de configuration de tcpd (/etc/hosts.allow et /etc/hosts.deny) et que c'est plus efficace que d'utiliser ce dernier. Par contre dans la FAQ du site c'est noté que xinetd ne remplace pas totalement tcpd. Que penser ?! Il est aussi dit que tcpd ne peut gérer qu'une seule connection à la fois alors que xinetd possède une gestion plus avancée des connections.


Pour résumer, utilisez xinetd en remplacement de inetd et tcpd !

Ulhume, le 11 février, 2009 - 14:34

Ben là j'aurais appris quelque chose, donc si je résume et que seul le côté "frontal TCP" m'intéresse, j'aurais plutôt tendance à prendre inetd tout court qui doit logiquement être plus léger.

Geek87, le 11 février, 2009 - 15:11

Pas si sûr ! xinetd a été conçu également pour améliorer la sécurité de inetd. Il y a plusieurs remplaçants de inetd qui existent mais je m'y perds un peu car sur Ubuntu j'ai déjà inetutils-inetd et openbsd-inetd et je ne sais pas quelle est la différence entre les deux : je croyais qu'on appelait inetd le démon issu d'OpenBSD.
Après sincèrement je ne m'embêterais pas à installer inetd (ou autre) pour OpenSSH car il n'occupe que 1 Mo de mémoire chez moi et qu'il n'a pas utilisé de temps CPU depuis que j'ai allumé mon ordinateur ce matin (je ne me suis bien sûr pas servi de SSH !).

Geek87, le 11 février, 2009 - 14:38

Je viens de relire nos commentaires précédents : on avait en fait tout faux !
Il y a aussi des problèmes d'affichage au niveau des paragraphes sur les redirections de ports et proxy SOCKS : une grande partie de ces paragraphes s'affiche dans un cadre noir.
Bonne continuation !

Ulhume, le 11 février, 2009 - 15:28

Je viens de relire nos commentaires précédents : on avait en fait tout faux !
De l'avantage de discuter Smiling
Il y a aussi des problèmes d'affichage au niveau des paragraphes sur les redirections de ports et proxy SOCKS : une grande partie de ces paragraphes s'affiche dans un cadre noir.
réglé, merci Smiling

Zanko, le 15 février, 2009 - 03:48

Excellent article. Si on y ajoute les commentaires, il contient tout ce dont j'ai besoin de me rappeler sur ssh !
Au passage, je conseille à ceux qui voudraient se protéger contre les attaques ssh de type "brute force" d'utiliser fail2ban, qui surveille les logs et bloque les ips ou prend d'autre mesures après plusieurs connexions ratées (pas seulement pour ssh). Même si la meilleure protection reste un bon mot de passe, ou mieux, utiliser une clé.

Guizmo.7, le 5 janvier, 2010 - 09:29

Complètement d'accord. C'est maintenant indispensable pour un serveur ouvert à tout internet !
Je voudrais juste mettre en lumière DenyHosts qui fait à peu près pareil mais qui se limite au SSH (je crois que fail2ban fait plus) mais qui est très simple à configurer.
http://stats.denyhosts.net/stats.html

youssef, le 6 novembre, 2009 - 21:11

salut,
je suis entrain de realiser un projet de site web(en php) sous linux(Mandriva): le probleme que j'ai, c'est comment je peux faire un script tel que qu'on je l'execute il me lance une nouvelle utilisateur(que j'ai deja saisie dans les arguments du script) sans de me demander le mot de passe(sachant que la nouvelle utilisateur possede d'un mot de passe), donc est ce que c'est possible d'ajouter le mot de passe dans le script????et comment?y'a t'il d'autres solutin?.

et Merci

Ulhume, le 22 décembre, 2009 - 08:43

Désolé mais je n'ai pas compris la question...

Eleyone, le 7 décembre, 2009 - 15:35

Bonjour,

Excuser le déterrement de sujet, mais un question m'interpèle... Lors d'une authentification par certificat est-il envisageable d'utilisé un certificat au format PKCS12 (.p12 ou .pem) propre a un utilisateur, ou encore un certificat contenu sur clef cryptographique (comme celle délivré par la chambre du commerce... ) ? Car si j'ai bien compris, lors d'une authentification par clefs, on spécifie dans la config du client un couple de fichier clefs public/privée en dur et dans ce cas la le client renvoie directement la clef. mais si je ne veut pas spécifié de clef en dur ? comment faire ?

Cordialement.

Ulhume, le 22 décembre, 2009 - 08:43

Pas la peine de s'excuser, ce site est fait pour déterrer. En revanche, aucune idée quant à ta question, désolé.

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage


Commentaires récents
Porte secrète