OpenSSH
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/sftpusers/%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 sftpusers, 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/sftpusers/sftp-user/dev et demander à rsyslog d'aller y écouter. Dans /etc/rsyslog.d/chroot.conf :
$AddUnixListenSocket /home/sftpusers/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