#1 Le 13/11/2019, à 02:06
- Plug
[Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Bonjour,
C'est dans le titre : Peut-on créer une paire de clés pour un autre utilisateur ?
Je n'ai pas trouvé dans le manpage de ssh-keygen une option qui permettrait de choisir l'utilisateur.
Description du problème :
J'ai un serveur sur lequel j'ai créé un compte restreint pour les connexions SSH.
Le PC portable client doit pouvoir se connecter avec un script (donc par clés asymétriques, c'est mieux).
Il doit pouvoir se connecter quelque soit l'utilisateur.
Contrainte supplémentaire :
J'aurais aimé ne pas avoir à créer le compte restreint sur le PC portable
Dans l'attente de vos suggestions....
Merci
Dernière modification par Plug (Le 18/11/2019, à 20:03)
Hors ligne
#2 Le 13/11/2019, à 09:07
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Bonjour,
C'est normal ssh-keygen crée une paire de clés et ce n'est pas lié à l'utilisateur, si ce n'est que par défaut ces clés sont placées dans le dossier ~/.ssh de l'utilisateur qui a lancé la commande.
Tu peux générer les clés où tu veux avec :
ssh-keygen -f /emplacement/nom_cle
copier le contenu de la clé publique /emplacement/nom_cle.pub dans le fichier ~/.shh/authorized_keys du compte sur le serveur.
Tu peux aussi copier les clés déjà générées à un emplacement accessible en lecture à tous les utilisateurs du portable.
Ensuite les utilisateurs pourront se connecter en précisant l'emplacement de la clé privée :
ssh -i /emplacemen/nom_cle compte_restreint@serveur
#3 Le 13/11/2019, à 14:59
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Merci pour ta réponse,
Pourtant dans mon fichier j'ai :
root@debian:~# cat .ssh/authorized_keys
ssh-rsa <blabla chiffré> root@pc-linuxshop
Est-ce que tu suggères que je change root@pc-linuxshop en restricted@pc-linuxshop (à la main dans le fichier), ou mieux, que je pourrais me connecter avec le compte restricted même sans rien changer, pourvu qu'il utilise la clé privée créée avec root ?
root@pc-linuxshop:~# mv /root/.ssh/ssh_client_rsa_key /home/commun/ssh_client_rsa_key
root@pc-linuxshop:~# chmod 664 /home/commun/ssh_client_rsa_key
matthieu@pc-linuxshop:~$ ssh -i /home/commun/ssh_client_rsa_key restricted@debian
Hors ligne
#4 Le 13/11/2019, à 15:04
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Non root@pc-linuxshop n'est qu'une indication pour savoir par qui et où a été générée la clé. Tu peux le supprimer ou le remplacer par n'importe quoi cela ne changera rien.
#5 Le 14/11/2019, à 00:13
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
OK. Naïvement je croyais qu'une clé privée était... ... ... ... privée.
Bon, je passe en résolu.
[edit]
En fait non, ça ne marche pas.
Je ne sais pas si ça se fait mais j'enlève le "Résolu"
[/edit]
Dernière modification par Plug (Le 14/11/2019, à 14:48)
Hors ligne
#6 Le 14/11/2019, à 15:01
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Le serveur me demande un mot de passe. Or justement, c'est un compte qui n'a pas de mot de passe
(cf. option --disabled-password)
matthieu@pc-linuxshop:~$ ssh -i /home/commun/ssh_client_rsa_key restricted@debian
ALERT! You are entering into a secured area!
This service is restricted to authorized users only.
All activities on this system are logged.
Your IP, Login Time, Username has been noted and has been sent
to the server administrator!
Unauthorized access will be fully investigated and reported to
the appropriate law enforcement agencies.
restricted@debian's password:
Hors ligne
#7 Le 14/11/2019, à 15:19
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Est-ce que la clé publique est bien dans /home/restricted/.ssh/authorized_keys ?
Dernière modification par bruno (Le 14/11/2019, à 15:19)
#8 Le 14/11/2019, à 16:08
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Le compte restreint n'a pas de /home (cf. option --no-create-home).
Les clés publiques sont dans un autre répertoire, définit dans le fichier de config sshd
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile /root/.ssh/authorized_keys
justement pour que ssh ne cherche pas la clé dans le répertoire /home/restricted (qui n’existe pas)
hum... , un doute m'habite; c'est bien le deamon ssh qui va lire authorized_keys ?
Pas le compte avec lequel on se connecte, n'est-ce pas ?
Dernière modification par Plug (Le 14/11/2019, à 16:13)
Hors ligne
#9 Le 14/11/2019, à 20:01
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Ton doute est fondé il faut que le fichier authorized_keys soit accessible en lecture à l'utilisateur restricted. Ce qui n'est certainement pas le cas s'il est dans /root.
#10 Le 15/11/2019, à 16:09
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Bon, cette fois ça marche
J'ai créé un répertoire spécifique (c'est ballo car finalement l'option --no-create-home devient inutile)
J'ai rendu l'utilisateur restricted propriétaire du répertoire
J'ai placé authorized_keys dans ce répertoire
En détail pour ceux que ça intéresse...
root@debian:~# mkdir /public
root@debian:~# chown restricted:restricted /public
root@debian:~# mkdir /public/.ssh
root@debian:~# mv /root/.ssh/authorized_keys /public/.ssh/authorized_keys
root@debian:~# chown restricted:restricted /public/.ssh/authorized_keys
J'ai bien entendu modifié le fichier de configuration sshd en conséquence
root@debian:~# grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile /public/.ssh/authorized_keys
root@debian:~# service ssh reload
Un grand merci à bruno , que vais solliciter encore une fois d'ailleurs
Puisqu'on est dans le thème Sécurité :
l'option --no-create-home est-elle bien utile pour ce genre de comptes puisque finalement il faudra quand même lui créer un répertoire dans lequel il y aura les clés autorisées ?
Dernière modification par Plug (Le 15/11/2019, à 19:04)
Hors ligne
#11 Le 15/11/2019, à 16:42
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Je ne vois pas en quoi le fait d'avoir ou pas un dossier personnel joue sur la sécurité. Par ailleurs rien ne t'obligeait à créer un dossier spécifique appartenant à ton utilisateur restricted. Tu aurais très bien pu mettre cela dans /etc/ssh/authorized_keys par exemple, avec un fichier en lecture pour tous.
La sécurité , dans ce cas précis, dépend surtout de la manière dont ce fameux compte est restreint.
#12 Le 15/11/2019, à 19:03
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Je ne vois pas en quoi le fait d'avoir ou pas un dossier personnel joue sur la sécurité.
Moi non plus en fait . J'ai juste suivi un tuto qui disait que c'était mieux
La sécurité , dans ce cas précis, dépend surtout de la manière dont ce fameux compte est restreint.
Pour savoir de quoi on parle, voici la commande que j'ai passée :
root@debian:~# adduser --no-create-home restricted --disabled-password --shell=/bin/false
Ajout de l'utilisateur « restricted » ...
Ajout du nouveau groupe « restricted » (1002) ...
Ajout du nouvel utilisateur « restricted » (1002) avec le groupe « restricted » ...
Le répertoire personnel « /home/restricted » n'a pas été créé.
Modification des informations relatives à l'utilisateur restricted
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []: restricted ssh
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []: Limited account
Cette information est-elle correcte ? [O/n]o
root@debian:~#
De mon point de vue ça me parait plutôt bien restreint.
Mais je lirai avec attention ton avis, car tu sembles bien maitriser le sujet
Hors ligne
#13 Le 15/11/2019, à 22:34
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Ah ? Et comment l'utilisateur restricted peut-il se connecter avec : --shell=/bin/false. Si c'est le cas, logiquement une commande :
ssh retricted@serveur
devrait afficher le motd et fermer immédiatement la connexion.
J'ai l'impression que tu utilises la mauvaises méthode pour arriver à un but que l'on ignore…
#14 Le 16/11/2019, à 01:46
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
J'ai l'impression que tu utilises la mauvaises méthode pour arriver à un but que l'on ignore…
C'est fort possible, mais je ne me voyais pas demander directement sur le forum "Comment on fait pour...(tout le projet) "
Pour moi, le problème technique (celui du sujet) est réglé. Néanmoins, si ça t’intéresse, je peux continuer avec la suite de mon projet, notamment au niveau sécurité.
Dernière modification par Plug (Le 16/11/2019, à 14:21)
Hors ligne
#15 Le 16/11/2019, à 02:21
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Suite du projet...
Ma priorité (en termes de sécurité) est de m'assurer qu'aucun des utilisateurs du PC portable (même pas root) ne puisse obtenir un shell sur le serveur.
Il me semble que pour l'instant, la méthode choisie --shell=/bin/false répond à cette contrainte.
N'hésite pas à me le dire si tu penses que ce n'est pas le cas.
Je veux récupérer sur un serveur (Debian) quelques fichiers .log d'un PC nomade (Ubuntu) de manière automatique.
Le PC doit donc, à fréquence régulière, lancer un script pour transférer ces fichiers, sans action requise de la part des utilisateurs (qui savent à peine ce qu'est un terminal).
J'ai donc créé sur le portable une paire de clés SSH, pour ne pas avoir à saisir (ou à écrire en dur et en clair) un mot de passe.
J'ai également créé sur le serveur, un compte restreint à l'établissement du canal de transmission (option --shell=/bin/false). Voir cette discussion pour plus de détails.
A partir de là je vois 2 solutions :
utiliser SCP (ou SFTP)
faire en sorte que le serveur aille lui même récupérer les fichiers
(La deuxième me parait plus compliquée)
Si vous avez d'autres idées, je suis preneur bien entendu.
Quelle serait la meilleure solution, en terme de sécurité ?
Merci
Dernière modification par Plug (Le 16/11/2019, à 14:25)
Hors ligne
#16 Le 16/11/2019, à 09:44
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Modération : je fusionne les deux sujets qui traitent du même problème et déplace dans la section « Support non officiel pour les autres systèmes d'exploitation » puisqu'il s'agit de Debian et non d'Ubuntu. Les forums Debian sont entre autres ici : https://www.debian-fr.org/ Ok admettons, le portable est sous Ubuntu…
Dernière modification par bruno (Le 16/11/2019, à 14:54)
#17 Le 16/11/2019, à 11:52
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Puisqu'il s'agit de transférer de logs, idéalement il faudrait configurer rsyslog (ou systemd-journal-remote) sur le serveur et le client.
Solution 1 : une tâche cron sur le portable qui exécute un script. Ce script devra envoyer les fichiers concernés sur le serveur en SFTP.
Un peu compliqué, AMHA, car cela obliger a créer un utilisateur sans shell (mais avec un home ce sera plus simple) qui est bloqué dans son dossier personnel et restreint à faire du SFTP. Cela se règle dans le ssd_config du serveur (voir les ocs et la page de man correspondante)
Solution 2 : une tâche cron sur le serveur qui exécute un script. Ce script devra tester la connectivité avec le portable et y les fichiers concernés.
Pour moi la solution la plus simple. Le portable est accessible en SSH (openssh-server y est installé). Le script s'exécute en tant que root et se connecte au compte root du portable avec une identification par clés (la clé publique de l'utilisateur root su serveur est dans le fichier authorized_keys de l'utilisateur root du portable)
#18 Le 16/11/2019, à 14:10
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
je fusionne les deux sujets qui traitent du même problème
Je trouve que ce n'est pas le même sujet.
"Créer une clé pour un autre utilisateur" ce n'est pas "transférer des fichiers avec un compte sans shell"
Mais bon, c'est plus toi qui décide comment gérer le forum puisque je vois que tu es modérateur
C'est juste qu'un membre qui ferait une recherche sur "compte sans shell" par exemple risque de ne pas s'intéresser à un problème de clé.
En revanche, déplacer dans la rubrique "Autres systèmes", c'est plutôt curieux car il s'agit bien d'un PC Ubuntu.
Heureusement que le serveur n'est pas sous Windows . Je ne vois pas où mon fil aurait atterri dans ce cas
Je ferme la parenthèse... [edit]et je te remercie d'avoir pris en compte mon objection [/edit]
Sur le sujet lui-même :
Solution 1 : je regarde plutôt du coté de rssh rssh - restricted secure shell allowing only scp and/or sftp
Solution 2 : là je ne vois pas du tout de quoi tu parles. Comment peut-on se connecter à un PC qui est "dans la nature" ? (je rappelle que c'est un PC nomade). Si tu as une ébauche de script, voire même une simple commande qui permette de se connecter sur un PC sur le net, je suis très intéressé...
En tout cas merci encore de me suivre sur ce sujet, car visiblement tu es le seul à avoir un avis sur la question
Dernière modification par Plug (Le 16/11/2019, à 15:02)
Hors ligne
#19 Le 16/11/2019, à 14:53
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Ok, la solution 2 n'est pas applicable si le portable change régulièrement de réseau et donc d'adresse IP.
Il ne reste que la solution1 et rssh peut être une façon de faire si tu veut autoriser autre chose que SFTP (scp, rsync), sinon c'est inutile.
Personnellement voici comment je réaliserais la chose.
Sur le serveur :
* Un utilisateur sendlog avec pour shell /usr/sbin/nologin et pour home /srv/portable.
* Le dossier /srv/portable doit être la propriété de root pour la suite.
* On y créé un dossier /srv/portable/logs, proprité de sendlog destiné à recevoir les fichiers de log.
* L'utilisateur n'est autorisé qu'à faire du SFTP et uniquement cela, et ne peut sortir de son dossier personnel, via la configuration du serveur SSH (voir la doc et le man), exemple :
Match group sendlog
ChrootDirectory %h
ForceCommand internal-sftp
Sur le client :
* L'utilisateur root doit avoir un paire de clés RSA ou mieux ED25519 et sa clé publique doit être copiée sur le serveur dans /srv/portable/.ssh/authorized_keys
* Une tâche cron exécutée par root appelle à intervalles réguliers un script sendlog.sh
* Le script sendlog.sh fait ceci :
1. vérifie que le serveur est atteignable
2. envoie les fichiers voulus en SFTP dans /srv/portable/logs
-----
[HS]
Il s'agit bien du même problème depuis le départ, puisque tes manipulations du premier message résultent de ce que tu as exposé en #15. Tu aurais d'aileurs du commencer par exposer cela afin que la discussion soit claire et ne parte pas sur de fausses pistes.
[/HS]
Dernière modification par bruno (Le 16/11/2019, à 14:54)
#20 Le 16/11/2019, à 15:38
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Ta solution me plait bien. Je vais essayer de la mettre en œuvre.
Du coup mon assiduité sur le forum va s'en trouver dégradée (je vais pas faire ça en 1 journée ).
Je m'en excuse par avance.
Sinon
L'utilisateur root doit avoir une paire de clés RSA ou mieux ED25519
C'est juste par principe ou c'est vraiment mieux (je connais pas du tout ED25519) ? Parce que des gens qui savent casser une clé RSA j'en connais pas beaucoup et je pense que ceux qui savent ont autre chose à faire que de s'attaquer à mon petit serveur maison
Je te tiens au courant de mes avancées et/ou de mes blocages éventuels.
---
[HS]
non non pas de fausses pistes. Pour moi le problème initial était bien résolu dès le #10.
Après c'est vrai que j'ai voulu en rajouter et là oui j'aurais dû donner plus d'infos. Désolé
[/HS]
Hors ligne
#21 Le 16/11/2019, à 16:01
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
La préférence pour ED25519 c'est par principe. Il y a déjà eu des preuves d'attaques réussies sur des clés RSA 1024 et sans doute 2048 bits. Et ce n n'est pas forcément une question de savoir (la doc est publique) mais surtout de puissance de calcul.
RSA 2048 bits ou 4096 bits est sans aucun doute suffisamment sécurisé.
La cryptographie par courbes elliptiques (comme ED25519) est une alternative sérieuse pour le jour ou RSA sera définitivement cassé. Et cela a surtout l'avantage d'utiliser des clés de beaucoup plus petite taille (128 bits pour ED25519).
Sur mes machines j'ai systématiquement les deux (RSA 4096 bits et ED25519).
#22 Le 17/11/2019, à 14:33
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Bon, j'avance doucement mais j'ai besoin de précisions...
Sur le serveur :
* Un utilisateur sendlog avec pour shell /usr/sbin/nologin et pour home /srv/portable.
* Le dossier /srv/portable doit être la propriété de root pour la suite.
Si sendlog ne peut plus accéder à son home, comment pourra-t-il accéder à la clé publique /srv/portable/.ssh/authorized_keys lors de la connexion ?
Match group sendlog
Est-ce que cette directive ne s'applique qu'au groupe sendlog (ou seulement à SFTP) ou vient-elle également impacter mon utilisateur restricted définit précédemment (mais qui n'a pas besoin de faire du SFTP) ?
Hors ligne
#23 Le 17/11/2019, à 14:41
- bruno
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
J'ai donné un exemple, à toi de l'adapter. J'ai choisi sendlog comme nom d'utilisateur comme j'aurais pu choisir toto.
Un utilisateur sans shell peut parfaitement accéder à son home. C'est une pratique courante sous Linux.
J'ai mis Match group dans mon exemple, mais tu peux utiliser Match user. Encore une fois il faut lire la doc.
#24 Le 18/11/2019, à 02:05
- Plug
Re : [Résolu] [SSH] Créer une clé privée pour un autre utilisateur
Alors pour ceux qui suivent ce fil (et qui n'ont pas forcément envie de se taper la doc ) je donne les réponses à mes propres questions
comment pourra-t-il accéder à la clé publique /srv/portable/.ssh/authorized_keys lors de la connexion ?
Comme j'ai déjà un utilisateur restricted qui fait du SSH mais qui n'a pas de maison (home), et que la directive AuthorizedKeysFile de /etc/ssh/sshd_config est déjà définie, j'ai réglé le problème en mettant toutes mes clés publiques (y compris celle du serveur) au même endroit.
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile /etc/ssh/authorized_keys
Match group (ou Match user)
Est-ce que cette directive ne s'applique qu'au groupe sendlog (ou seulement à SFTP)
Elle s'applique à tout SSH (pas seulement à SFTP). A partir du moment où les conditions initiales sont réunies, elle substitue les valeurs globales de sshd_config par celles définies dans les lignes suivant le Match.
Donc oui, ça peut impacter un autre utilisateur, s'il appartient au même groupe par exemple (ce qui n'est pas le cas dans ma config).
J'ai donc choisi la config suivante :
# Passer UsePAM à no est impossible sinon SFTP génère un :
# "User sftp-user not allowed because account is locked"
UsePAM yes
Match group sendlog
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication no
PermitTunnel no
AllowAgentForwarding no
ForceCommand internal-sftp
et ça fonctionne bien... en local
J'attends le retour du PC nomade pour tester en remote.
[edit]
Bon, pour moi tout est OK
root@pc-linuxshop:~# sftp -i /home/commun/ssh_client_rsa_key -oPort=212223 sftp-user@109.24.25.26
ALERT! You are entering into a secured area!
This service is restricted to authorized users only.
All activities on this system are logged.
Your IP, Login Time, Username has been noted and has been sent
to the server administrator!
Unauthorized access will be fully investigated and reported to
the appropriate law enforcement agencies.
Connected to 109.24.25.26
sftp> ls
logs
sftp> bye
root@pc-linuxshop:~#
Y'a plus qu'à mettre ça dans un script bash avec un here document et c'est fini.
Je passe en résolu (pour de bon cette fois )
[/edit]
Dernière modification par Plug (Le 18/11/2019, à 20:02)
Hors ligne