« OpenSSH » : différence entre les versions

De Sn4kY
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 35 : Ligne 35 :
dans <code>/path/to/sshd_config</code>
dans <code>/path/to/sshd_config</code>
  AuthorizedKeysFile      /home/sftp/%u/.ssh/authorized_keys
  AuthorizedKeysFile      /home/sftp/%u/.ssh/authorized_keys
Attention, l'utilisateur "sftp-user" doit impérativement pouvoir lire le fichier authorized_keys (les droits de l'intégralité du path doivent au moins contenir <code>read</code> pour le groupe <code>sftpusers</code>, le chroot étant réalisée une fois les credentials obtenus.
Attention, l'utilisateur "sftp-user" doit impérativement pouvoir lire le fichier authorized_keys (les droits de l'intégralité du path doivent au moins contenir <code>read</code> pour le groupe <code>sftp</code>, le chroot étant réalisée une fois les credentials obtenus.


=== Ajouter du log verbeux ===
=== Ajouter du log verbeux ===
Dans la rubrique <code>Match</code>, ajouter <code> -f AUTH -l INFO</code> à la fin de la ligne <code>ForceCommand internal-sftp</code>.
Dans la rubrique <code>Match</code>, ajouter <code> -f AUTH -l INFO</code> à la fin de la ligne <code>ForceCommand internal-sftp</code>.
Cela va avoir pour effet de forcer l'user à écrire dans son /dev/log, qui n'existe pas, il faut donc créer le répertoire <code>mkdir /home/sftpusers/sftp-user/dev</code> et demander à rsyslog d'aller y écouter. Dans <code>/etc/rsyslog.d/chroot.conf</code> :  
Cela va avoir pour effet de forcer l'user à écrire dans son /dev/log, qui n'existe pas, il faut donc créer le répertoire <code>mkdir /home/sftp/sftp-user/dev</code> et demander à rsyslog d'aller y écouter. Dans <code>/etc/rsyslog.d/chroot.conf</code> :  


  $AddUnixListenSocket /home/sftpusers/sftp-user/dev/log
  $AddUnixListenSocket /home/sftp/sftp-user/dev/log


Un restart du tout et c'est OK.
Un restart du tout et c'est OK.

Dernière version du 18 mars 2026 à 15:29

SFTP

Activer un chroot SFTP avec OpenSSH

dans /path/to/sshd_config.d/sftp.conf

si ftp par user

Match user sftp-user
      ChrootDirectory /home/sftp/%u
      ForceCommand internal-sftp
      AllowTcpForwarding no
      GatewayPorts no
      X11Forwarding no

si sftp par groupe

Match group sftp
       ChrootDirectory /home/sftp/%u
       ForceCommand internal-sftp
       AllowTcpForwarding no
       GatewayPorts no
       X11Forwarding no

Mettre l'user dans le bon home directory à la connexion

mkdir /home/sftp/
mkdir -p /home/sftp/sftp-user

Si sftp par user

useradd -M -b / -s /sbin/nologin sftp-user

Si sftp par groupe

groupadd -g 3000 sftp
useradd -g sftp -M -b / -s /sbin/nologin sftp-user

L'idée est d'avoir dans /etc/passwd un utilisateur comme ceci :

sftp-user:x:500:3000::/sftp-user:/sbin/nologin

/sbin/nologin peut être remplacé par /bin/false, le shell est forcé par le ForceCommand de la sous section d'OpenSSH

Autoriser l'utilisation d'une clé RSA

dans /path/to/sshd_config

AuthorizedKeysFile      /home/sftp/%u/.ssh/authorized_keys

Attention, l'utilisateur "sftp-user" doit impérativement pouvoir lire le fichier authorized_keys (les droits de l'intégralité du path doivent au moins contenir read pour le groupe sftp, le chroot étant réalisée une fois les credentials obtenus.

Ajouter du log verbeux

Dans la rubrique Match, ajouter -f AUTH -l INFO à la fin de la ligne ForceCommand internal-sftp. Cela va avoir pour effet de forcer l'user à écrire dans son /dev/log, qui n'existe pas, il faut donc créer le répertoire mkdir /home/sftp/sftp-user/dev et demander à rsyslog d'aller y écouter. Dans /etc/rsyslog.d/chroot.conf :

$AddUnixListenSocket /home/sftp/sftp-user/dev/log

Un restart du tout et c'est OK.

Il est possible de changer le niveau de verbosité (configuré à INFO) et le syslogfacility (AUTH), mais il faudra également penser à adapter rsyslog pour traiter cette facility.

Tips

Afficher les algo acceptés par ssh sshd

ssh -Q key

Créer une clé SSH

ssh-keygen -q -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "$(whoami)@$(hostname)"
ssh-keygen -q -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "$(whoami)@$(hostname)"

Calculer un fingerprint

format sha256 encodé en base64

ssh-keygen -lf ~/.ssh/id_rsa.pub

pour l'avoir en ancien format MD5

ssh-keygen -lf ~/.ssh/id_rsa.pub -E md5