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