J'ai un serveur FTP qui s'authentifie via une API et qui contient des dossiers d'utilisateurs :
/home/ftpusers/files/<username>
Certains utilisateurs ont demandé un accès SFTP à la place et comme j'ai déjà mis en place des processus pour placer les fichiers dans le répertoire de l'utilisateur, je me suis dit que je pouvais simplement créer des comptes pour les utilisateurs.
useradd -g sftpgroup -d /home/ftpusers/files/username/ -s /sbin/nologin username
mkdir -p /home/ftpusers/files/username/.ssh
chown -R username:ftpgroup /home/ftpusers/files/username
chmod -R 770 /home/ftpusers/files/username
echo "ssh-rsa user key" > /home/ftpusers/files/username/.ssh/authorized_keys
chown username:sftpgroup /home/ftpusers/files/username/.ssh
chmod 700 /home/ftpusers/files/username/.ssh
chown username:sftpgroup /home/ftpusers/files/username/.ssh/authorized_keys
chmod 600 /home/ftpusers/files/username/.ssh/authorized_keys
le groupe ftpg permet à un compte système de placer des fichiers dans le dossier de l'utilisateur. le groupe sftpg permet de verrouiller cet utilisateur pour qu'il n'utilise que le SFTP :
Match Group sftpgroup
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Malheureusement, cela ne fonctionne pas. Pas d'erreur utile, juste :
Permission denied (publickey)
Cela fonctionne bien si je crée un utilisateur d'une manière plus standard dans le répertoire /home/.
Une idée de la raison ? Je sais que chroot a beaucoup de restrictions de permission. Est-ce que c'est quelque chose comme ça ?
Ajout de la sortie namei : Bien sûr :
namei -l /home/ftpusers/files/jmandel/.ssh
f: /home/ftpusers/files/jmandel/.ssh
dr-xr-xr-x root root /
drwxr-xr-x root root home
drwxrwx--- ftpuser ftpgroup ftpusers
drwxrwx--- ftpuser ftpgroup files
drwxrwx--- jmandel ftpgroup jmandel
drwx------ jmandel sftpgroup .ssh
La réponse marquée ci-dessous contient de bonnes informations dans le fil de commentaires.