Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile : 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. hmm

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 hmm
(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... roll , 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 smile

  • 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 smile

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

bruno a écrit :

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 smile . J'ai juste suivi un tuto qui disait que c'était mieux hmm

bruno a écrit :

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 smile

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

bruno a écrit :

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 :

  1. utiliser SCP (ou SFTP)

  2. 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

bruno a écrit :

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 wink

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 big_smile. Je ne vois pas où mon fil aurait atterri dans ce cas roll
Je ferme la parenthèse... [edit]et je te remercie d'avoir pris en compte mon objection wink [/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 smile

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 hmm).
Je m'en excuse par avance.

Sinon

bruno a écrit :

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 smile

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...

bruno a écrit :

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 ?

bruno a écrit :
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 tongue) je donne les réponses à mes propres questions cool

Plug a écrit :

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)

Plug a écrit :

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 smile

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 big_smile )
[/edit]

Dernière modification par Plug (Le 18/11/2019, à 20:02)

Hors ligne