Consigner un utilisateur dans un dossier particulier

Bonjour à tous,
Je dois donner un accès à un développeur à un répertoire web pour qu’il puisse y faire… ce qu’il a à y faire :wink:
Comment puis-je le consigner/emprisonner/jailer dans ce répertoire avec l’impossibilité de remonter l’arborescence ou d’exécuter une quelconque commande.
J’ai googlé ma recherche mais il semble que je n’utilise pas les bons termes car je ne trouve rien de concluant.
Si quelqu’un avait une idée ?
Merci.

C’est quoi un répertoire web?
En quoi les droits linux de base ne seraient pas suffisants?

Un répertoire web c’est un sous-répertoire de /var/www.
Les droits empêcheront de remonter mais pas d’exécuter des commandes.

Le plus simple est d’utiliser le SFTP du serveur open SSH.
Tu créés un utilisateur toto sans shell avec le dossier web en question comme HOME et tu le bloques dans son dossier et en sftp uniquement avec un truc du style dans sshd_config :

Match user toto
        PasswordAuthentication yes
        ChrootDirectory %h
        ForceCommand internal-sftp

Attention aux droits et propriétaire/groupe sur les fichiers.

Merci bruno1.
J’essaye ça de suite.

Bon bah c’est pas une grande réussite.
Je dois m’y prendre de travers…
J’ai créé mon utilisateur nenex
J’ai créé le fichier

/home/nenex/authorized_keys

et j’y ai glissé ma clé (elle fonctionne en root)
J’ai ajouté à mon fichier /etc/ssh/sshd_config :

Match user nenex
        PasswordAuthentication no (car clé ssh uniquement)
        ChrootDirectory %h (donc /home/nenex/)
        ForceCommand internal-sftp

Mais mon client filezilla me dit « Echec de l’authentification » :frowning:
Qu’est ce que je rate ?

je crois que filezilla utilise la cle publique de ssh au format putty.

regarde de ce coté

Commence déjà par mettre cela en place avec authentification par mot de passe.
Tu verras en suite pour l’authentification par clés.

Pense à bien régler ton client FTP pour faire du SFTP sur le port 22.

Ensuite les clés publiques se copient dans $HOME/.ssh/authorized_keys sur le serveur.
On peut aussi le faire avec la commande ssh-copy-id

Attention il faudra prendre soin de vérifier aussi les permissions pour le fichier en question, de souvenir un 750 suffira si le strict mode est activé dans la conf de sshd.

Sympa à vous 2 de m’aider.
Je ne suis vraiment pas à l’aise avec les concept de droits sous linux…

# tail -f /var/log/auth.log
sshd[32532]: Accepted password for nenex from x.x.x.x port 52028 ssh2
sshd[32532]: pam_unix(sshd:session): session opened for user nenex by (uid=0)
systemd-logind[344]: New session 3535 of user nenex.
systemd: pam_unix(systemd-user:session): session opened for user nenex by (uid=0)
sshd[32549]: fatal: bad ownership or modes for chroot directory "/home/nenex"
sshd[32532]: pam_unix(sshd:session): session closed for user nenex
systemd-logind[344]: Session 3535 logged out. Waiting for processes to exit.
systemd-logind[344]: Removed session 3535.

J’ai donc bien (au moins) une erreur :

sshd[32549]: fatal: bad ownership or modes for chroot directory "/home/nenex"

Et c’est dommage car j’avais l’impression d’avoir fait le job comme y fallait :

root@serv-dolibarr:/home/nenex# ls
total 28K
4,0K drwxr-xr-x 4 nenex nenex 4,0K avril 23 06:59 .
4,0K drwxr-xr-x 4 root    root    4,0K avril 22 13:43 ..
4,0K -rw-r--r-- 1 nenex nenex  220 avril 22 13:43 .bash_logout
4,0K -rw-r--r-- 1 nenex nenex 3,5K avril 22 13:43 .bashrc
4,0K drwx------ 3 nenex nenex 4,0K avril 23 06:59 .gnupg
4,0K -rw-r--r-- 1 nenex nenex  807 avril 22 13:43 .profile
4,0K drwx------ 2 nenex nenex 4,0K avril 23 06:54 .ssh

root@serv-dolibarr:/home/nenex/.ssh# ls
total 12K
4,0K drwx------ 2 nenex nenex 4,0K avril 23 06:54 .
4,0K drwxr-xr-x 4 nenex nenex 4,0K avril 23 06:59 ..
4,0K -rw------- 1 nenex nenex  389 avril 22 13:45 authorized_keys

Au temps pour moi, j’ai oublié de précisé que le dossier spécifié dans la directive :
ChrootDirectory %h
doit appartenir à root.
Mes notes pour ce type d’accès : https://bp-systems.ovh/post/Configuration-du-serveur-SSH-/-SFTP

Super Bruno, c’était ça.
Mais comment faire dans ce cas car les dossiers dans /var/www n’appartiennent pas à root mais à www-data ?

Comme je le disais il faut effectivement bien faire attention aux droits d’accès.
Dans la configuration que j’ai proposée en lien, le problème ne se pose pas car il y a un utilisateur différent pour chaque site web (PHP-FPM avec des pools).
Si tu utilises le module PHP d’Apache et que les fichiers doivent être accessibles en lecture et écriture à www-data, il faut adapter un peu.
Toutes les commandes sont a faire en root.

On crée un dossier site1 appartenant à root :

mkdir /var/www/site1

On créé l’utilisateur webmaster1 pour faire du SFTP dont le groupe principal est www-data :

useradd -g www-data -s /usr/sbin/nologin -d /var/www/site1

On créé un sous dossier pour le site web :

mkdir /var/www/site1/www

On rend webmaster1 propriétaire de se dossier :

chown webmaster1:www-data /var/www/site1/www

On ajuste la configuration dans sshd_config pour avoir le bon masque :

Match user webmaster1
        PasswordAuthentication yes
        ChrootDirectory %h
        ForceCommand internal-sftp -u 0002

⇒ les fichiers(dossiers) créés en SFTP auront pour droits webmaster1:www-data rw(x)rw(x)r_(x)

C’est pas forcément ce qu’il y a de plus sécurisé mais cela devrait fonctionner.