Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais - ça oblige à préciser `PermitUserEnvironment yes` dans /etc/ssh/sshd_config - ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme - mettre zsh par défaut pour tous les users (qui ont un shell), un peu extrémiste… (mais je suis quasi le seul à me connecter à ces machines) - créer un user avec zsh et les bons droits sudo puis passer par lui pour ensuite changer de user (un peu pénible)
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
Et avec command="zsh" au début de la déclaration de la clé dans authorized_keys ?
https://www.ssh.com/ssh/authorized_keys/openssh
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais
- ça oblige à préciser `PermitUserEnvironment yes` dans /etc/ssh/sshd_config
- ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu extrémiste… (mais je suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui pour ensuite changer de user (un peu pénible)
Julien
Le 25/03/21 à 14:05, Julien Escario julien.escario@altinea.fr a écrit :
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
Et avec command="zsh" au début de la déclaration de la clé dans authorized_keys ?
Ça fonctionne pour du login mais pas pour
ssh user@host 'une commande'
Le 25/03/2021 à 16:03, Daniel Caillibaud a écrit :
Le 25/03/21 à 14:05, Julien Escario julien.escario@altinea.fr a écrit :
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
Et avec command="zsh" au début de la déclaration de la clé dans authorized_keys ?
Ça fonctionne pour du login mais pas pour
ssh user@host 'une commande'
Je ne suis bien sûr d'avoir compris alors : quand tu fais ça, à aucun moment tu n'invoques de shell (ni bash, ni aucun autre).
Ce qui ne veut pas dire que ton shebang ne le fait pas pour toi ceci dit mais c'est une autre histoire.
Julien
Le 25/03/21 à 16:13, Julien Escario julien.escario@altinea.fr a écrit :
ssh user@host 'une commande'
Je ne suis bien sûr d'avoir compris alors : quand tu fais ça, à aucun moment tu n'invoques de shell (ni bash, ni aucun autre).
Dans ce cas sshd invoque le shell du user pour lancer la commande (le shell indiqué dans /etc/passwd)
Bonjour,
Imposer ZSH à tout le monde je ne vois pas le souci je le fais je ne vois pas le problème :D
Le souci du shell c'est qu'il faut bien en mettre un dans /etc/passwd et qu'il doit être valide.
Tu peux toujours faire une commande en plus avant ta clef ssh, ça devrait pouvoir le faire.
Sinon dans ton bashrc ou zshrc tu fais tes choix. Je fais cela pour savoir si oui ou non je lance un tmux par défaut quand j'arrive sur certains serveurs.
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais
- ça oblige à préciser `PermitUserEnvironment yes` dans /etc/ssh/sshd_config
- ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu extrémiste… (mais je suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui pour ensuite changer de user (un peu pénible)
Le 25/03/21 à 14:39, Wallace wallace@morkitu.org a écrit :
Bonjour,
Imposer ZSH à tout le monde je ne vois pas le souci je le fais je ne vois pas le problème :D
;-)
Le souci du shell c'est qu'il faut bien en mettre un dans /etc/passwd et qu'il doit être valide.
Tu peux toujours faire une commande en plus avant ta clef ssh, ça devrait pouvoir le faire.
J'ai bien tenté un
command="/path/to/login.sh" …
avec dans login.sh
#!/bin/sh if [ -t 1 ]; then # login shell exec /bin/zsh else # command shell exec /bin/sh fi
mais revient au même que command="/bin/zsh" => ça marche pour du login shell mais pas pour des commandes passées via ssh.
Sinon dans ton bashrc ou zshrc tu fais tes choix. Je fais cela pour savoir si oui ou non je lance un tmux par défaut quand j'arrive sur certains serveurs.
C'est un peu ça que je voulais faire, mais dans le ~/.bashrc (ou le ~/.profile) je vois pas comment détecter quelle clé ssh vient de se connecter, sauf à passer le PermitUserEnvironment à yes et faire ce que j'indiquais dans le post initial.
Mais en en discutant, je viens de me rappeler un truc, et Euréka, ça fonctionne avec
#!/bin/sh if [ -t 1 ]; then exec /bin/zsh else $SSH_ORIGINAL_COMMAND fi
:-)
On Thu, 25 Mar 2021 at 13:39, Daniel Caillibaud ml@lairdutemps.org wrote:
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu
extrémiste… (mais je suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui pour
ensuite changer de user (un peu pénible)
À une époque où je gérais un parc hétéroclite, le seul shell dispo partout était /bin/csh puis il y avait le script de démarrage qui lançait bash suivant où il était. pour supprimer le csh, il suffisait de faire un exec bash pour ne pas avoir de processus inutile.
Concernant la demande initiale, PermitUserEnvironment pourrait être un problème de sécurité. Si vous êtes en environnement statique pourquoi ne pas se baser sur l'adresse source ? Ou créer un script/fonction bash pour switcher rapidement ?
Aussi ce n'est pas parce que son shell est bash que l'on ne peut pas lancer de shell zsh ...
Pierre.
Bonjour,
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais
- ça oblige à préciser `PermitUserEnvironment yes` dans /etc/ssh/sshd_config
- ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu extrémiste… (mais je suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui pour ensuite changer de user (un peu pénible)
Le cas d'un changement de shell selon qu'on se trouve sur la station de travail ou le laptop (donc deux clefs différentes) paraît anecdotique, je suspecte donc un compte générique (s'il est nominatif c'est de l'usurpation d'identité) utilisé à plusieurs, et ces plusieurs ne partagent pas la même religion en matière d'environnement de ligne de commande.
C'est mal.
Chacun son compte, chacun son chemin Chacun son shell, chacun son destin
Bien cordialement,
Le 25/03/21 à 14:57, Maxime DERCHE maxime@mouet-mouet.net a écrit :
Le cas d'un changement de shell selon qu'on se trouve sur la station de travail ou le laptop (donc deux clefs différentes) paraît anecdotique, je suspecte donc un compte générique (s'il est nominatif c'est de l'usurpation d'identité) utilisé à plusieurs, et ces plusieurs ne partagent pas la même religion en matière d'environnement de ligne de commande.
C'est mal.
Il s'agit de comptes lié à des applications, foo pour l'appli foo, je vois pas en quoi ce serait mal d'être plusieurs à s'y connecter.
Chacun son compte, chacun son chemin Chacun son shell, chacun son destin
Et en matière de règles chacun sa religion ;-)
Le jeu. 25 mars 2021 à 16:05, Daniel Caillibaud ml@lairdutemps.org a écrit :
Il s'agit de comptes lié à des applications, foo pour l'appli foo, je vois pas en quoi ce serait mal d'être plusieurs à s'y connecter.
Et en matière de règles chacun sa religion ;-)
Sur un paquet de chose c'est vrai. Sur ca je suis moins d'accord.
Si tu t'assoie sur les pratiques Micro$oft, PCI/DSS, les reco de l'ANSSI (et probablement toutes les autres agences équivalentes à l'international), ISO 27001, etc... oui
Sinon la bonne pratique est de pouvoir suivre qui fait quoi dans un système informatique en général.
Si tu te fais pwn ton SI avec le compte "foo" : - Est-ce que c'est une personne en interne qui a mis le bazar ? (volontairement ou pas) - Est-ce que c'est une attaque externe via une faille dans l'application foo ?
My 20 cents
Le Thu, Mar 25, 2021 at 09:13:38PM +0100, Nathan delhaye a écrit:
- Est-ce que c'est une personne en interne qui a mis le bazar ?
(volontairement ou pas)
Heu, tu peux identifier qui s'est connecté à partir de la clef. Alors évidemment, il faut avoir un système de gestion, mais ssh te permet d'identifier quelle clef s'est connectée aux comptes dans les logs:
Mar 25 23:21:56 XXX sshd[26191]: Accepted publickey for YYY from 172.16.0.1 port 47604 ssh2: RSA SHA256:Fnud6TMJ+akrd0mbl60hrTMK2QupJTg2MYBzAwskO8M
$ ssh-keygen -l -E sha256 -f .ssh/authorized_keys 4096 SHA256:Fnud6TMJ+akrd0mbl60hrTMK2QupJTg2MYBzAwskO8M arnaud@truc (RSA)
Donc même avec un compte partagé, si les clefs ssh ne sont /pas/ partagées, tu peux retrouver son propriétaire (et encore plus facilement si les clefs sont gérées de façon automatisées, et encore mieux, supprimées si elles ne sont pas censées exister).
Attention, hein: je suis d'accord, chacun son compte, et ensuite les groupes / acl / sudo / etc, c'est mieux. Mais on peut quand même retrouver qui s'est connecté (enfin, quelle clef).
Arnaud.
Le 25/03/21 à 21:13, Nathan delhaye contact@nathan-delhaye.fr a écrit :
Si tu t'assoie sur les pratiques Micro$oft, PCI/DSS, les reco de l'ANSSI (et probablement toutes les autres agences équivalentes à l'international), ISO 27001, etc... oui
Sinon la bonne pratique est de pouvoir suivre qui fait quoi dans un système informatique en général.
Je suis bien d'accord, mais là il s'agit de comptes d'applis, ceux qui peuvent y accéder sont bien identifiés et traçables.
J'avoue ne pas comprendre l'intérêt d'obliger admin42 à se connecter à son compte admin42 pour faire ensuite du `sudo -u foo -i` et se retrouver sur le compte foo plutôt que de l'autoriser à se connecter directement sur le compte foo.
Ok, on doit sûrement pouvoir interdire le sudo -i pour obliger ensuite à ce que toutes les commandes passent par sudo et soient loggées. Ici c'est moi qui ait décidé de mettre là le curseur flicage/simplicité, et je l'assume très bien ;-)
(On parle d'une asso où le nb d'admins avec clés ssh se comptent sur les doigts d'une main, et ceux qui ont une clé pour se connecter à foo peuvent aussi passer root, voire mettre le host en rescue et y accéder)
Si tu te fais pwn ton SI avec le compte "foo" :
- Est-ce que c'est une personne en interne qui a mis le bazar ?
(volontairement ou pas)
- Est-ce que c'est une attaque externe via une faille dans l'application
foo ?
Y'a les logs déportés pour ça, facile de voir s'il y a eu un accès ssh à foo ou pas, quelles étaient les requêtes http qui ont précédé, etc.
Le 25/03/2021 à 16:02, Daniel Caillibaud a écrit :
Le 25/03/21 à 14:57, Maxime DERCHE maxime@mouet-mouet.net a écrit :
Le cas d'un changement de shell selon qu'on se trouve sur la station de travail ou le laptop (donc deux clefs différentes) paraît anecdotique, je suspecte donc un compte générique (s'il est nominatif c'est de l'usurpation d'identité) utilisé à plusieurs, et ces plusieurs ne partagent pas la même religion en matière d'environnement de ligne de commande.
C'est mal.
Il s'agit de comptes lié à des applications, foo pour l'appli foo, je vois pas en quoi ce serait mal d'être plusieurs à s'y connecter.
Laisse donc l'appli foo tourner en tant que user et groupe foo, et crée des comptes nominatifs qui appartiennent au groupe foo.
Mets les clefs SSH des gens dans l'annuaire LDAP, afin d'éviter d'avoir à gérer des déploiements d'accès à chaque mouvement dans l'équipe ou à chaque compromission d'accès.
Chacun son compte, chacun son chemin Chacun son shell, chacun son destin
Et en matière de règles chacun sa religion ;-)
Ben non, les bonnes pratiques de gestion d'un système d'information forment un tout cohérent qu'il est difficile d'aller contester par l'argument "je connais mon appli et je sais faire". Si des normes comme ISO27001 ou COBIT ou autre existent c'est parce qu'il est en réalité très compliqué de gérer correctement un système d'information, donc des gens s'organisent en groupes de travail internationaux pour imaginer des outils de gestion qu'on espère fiables et utiles. Ignorer ce travail c'est se penser meilleur que les normes : l'arrogance précède la chute.
(Je ne dis pas qu'ISO27001 c'est l'Alpha et l'Oméga de la gestion d'un SI. Mais on oublie moins de trucs quand on a une checklist éprouvée.)
Bien cordialement,
Le 26/03/21 à 09:46, Maxime DERCHE maxime@mouet-mouet.net a écrit :
Laisse donc l'appli foo tourner en tant que user et groupe foo, et crée des comptes nominatifs qui appartiennent au groupe foo.
Mets les clefs SSH des gens dans l'annuaire LDAP, afin d'éviter d'avoir à gérer des déploiements d'accès à chaque mouvement dans l'équipe ou à chaque compromission d'accès.
On joue pas dans la même cour…
Je bosse pour une asso, j'ai pas de ldap (la base des users c'est le /etc/passwd de chaque VM, ceux qui peuvent se connecter sont dans les ${userHome}/.ssh/authorized_keys, pas de password nulle part, la source de l'info est le host.yaml de mon ansible, pour répercuter d'éventuelles modifs partout).
Les admins ayant des clés ssh c'est - moi - qq adminsys pompiers, d'astreinte à tour de rôle, qui peuvent se connecter si je suis pas dispo
Et parfois y'a le dev de l'appli foo qui a une clé pour se connecter à son appli (c'est rare, en général s'il doit y accéder c'est du sftp sans shell).
Donc pas près d'être ISO27001, ou ISOxxx, ou que sais-je, et ça tombe bien personne ne me l'a demandé ;-)
Ignorer ce travail c'est se penser meilleur que les normes : l'arrogance précède la chute.
Je suis évidemment moins malin et moins bon en sécurité que ceux qui ont pondus ces normes, je pense simplement qu'elles ne sont pas les plus pertinentes dans mon contexte.
Et je ne pense pas que ce soit par arrogance, simplement du pragmatisme.
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé ssh utilisée ? (le shell pour exécuter une commande passée à ssh restant celui défini pour le user)
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais
- ça oblige à préciser `PermitUserEnvironment yes` dans /etc/ssh/sshd_config
- ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu extrémiste… (mais je suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui pour ensuite changer de user (un peu pénible)
C'est quoi ton besoin initial ?
Cdlt,
Le 25/03/21 à 16:33, Jean-Yves LENHOF jean-yves@lenhof.eu.org a écrit :
C'est quoi ton besoin initial ?
- avoir zsh quand je me connecte sur ce user - laisser le shell du user pour les commandes passées par ssh (même s'il y a peu de risques il peut y avoir des scripts externes qui lancent des commandes prévues pour ce shell, je préfère ne pas y toucher) - laisser le shell du user pour les autres personnes qui se connecteraient en ssh à ce user
Le user unix correspond à une appli, pour des tâches de maintenance ou de recueil d'infos, accéder aux logs applicatifs, ce genre de choses…
C'est réglé avec, dans le ~/.ssh/authorized_keys du command="/path/to/login.sh" ssh-rsa …ma clé… et dans /path/to/login.sh
#!/bin/sh if [ -t 1 ]; then exec /bin/zsh else $SSH_ORIGINAL_COMMAND fi
Pourquoi tu te fais pas un script côté client qui envoie automatiquement la commande zsh lorsque tu fais ton ssh ? Ou en suivant
Plutôt que de vouloir faire ça côté serveur et risquer d'impacter tout le monde ?
Arano
Le jeu. 25 mars 2021 à 16:37, Jean-Yves LENHOF jean-yves@lenhof.eu.org a écrit :
Le 25/03/2021 à 13:38, Daniel Caillibaud a écrit :
Bonjour,
Y a-t'il un moyen propre d'avoir un login shell qui dépendent de la clé
ssh utilisée ?
(le shell pour exécuter une commande passée à ssh restant celui défini
pour le user)
En lisant le man sshd je découvre environment="NAME=value"
qui permet par exemple de mettre dans ~/.ssh/authorized_keys environment="WANTED_SHELL=zsh" ssh-rsa … et dans ~/.profile [ "$WANTED_SHELL" == "zsh" ] && /usr/bin/zsh mais
- ça oblige à préciser `PermitUserEnvironment yes` dans
/etc/ssh/sshd_config
- ça charge bash (si c'était le shell du user) + zsh
Si y'a une solution ça m'intéresse ;-)
Sinon c'est pas très grave, y'a d'autres solutions comme
- mettre zsh par défaut pour tous les users (qui ont un shell), un peu
extrémiste… (mais je
suis quasi le seul à me connecter à ces machines)
- créer un user avec zsh et les bons droits sudo puis passer par lui
pour ensuite changer de
user (un peu pénible)
C'est quoi ton besoin initial ?
Cdlt,
Liste de diffusion du FRsAG http://www.frsag.org/
Le 25/03/21 à 19:31, SERRUT Arnaud qqqrno@gmail.com a écrit :
Pourquoi tu te fais pas un script côté client qui envoie automatiquement la commande zsh lorsque tu fais ton ssh ?
Effectivement, c'était une solution.
Plutôt que de vouloir faire ça côté serveur et risquer d'impacter tout le monde ?
Ben là j'ai trouvé une solution pour le faire coté serveur et n'impacter que moi.
Le 26/03/2021 à 09:44, Daniel Caillibaud a écrit : …
Ben là j'ai trouvé une solution …
<dredi>
Je crois bien avoir repéré une design pattern :
1 - Daniel nous soumet un problème super pointu auquel il est le seul à avoir pensé. 2 - On y réfléchi et on propose des solutions (aucune ne convient). 3 - Daniel ramasse les copies et nous donne la correction.
Qu'est ce qu'il est fort Daniel !
:-)
</dredi>
Le 26/03/21 à 10:10, Laurent Barme 2551@barme.fr a écrit :
1 - Daniel nous soumet un problème super pointu auquel il est le seul à avoir pensé. 2 - On y réfléchi et on propose des solutions (aucune ne convient). 3 - Daniel ramasse les copies et nous donne la correction.
C'est justement d'en discuter ici qui m'a permis de trouver une réponse à la question initiale, (que je ne pensais pas spécialement pointue) en réfléchissant autour des solutions proposées.
Et ce n'est pas une correction, preuve en est la discussion elle-même, montrant que le pb pouvait être dans le design des accès.
Dans mon cas je continue à penser que c'est le plus pratique pour nous, mais remettre en question ses choix confort vs sécurité est toujours utile, merci à ceux qui ont donné leur avis.
Désolé si la question initiale était sans intérêt…
Qu'est ce qu'il est fort Daniel !
J'avais plutôt l'impression que la discussion mettait en évidence de l'amateurisme sur la gestion des accès, mais je te laisse juge, j'ai passé l'âge de ce genre de concours ;-)