[ Résolu ] Sftp sur /var/www/site1 - /var/www/site2

Bonjour à tous,

je dois monter un serveur web, debian 8, apache, mysql, ssh, php-fpm …

je voudrais utiliser sftp à la manière de gandi.

C’est à dire, créer un chroot par user. Chaque utilisateur irait dans le dossier comprenant son site.
Et ne pourrait pas remonter dans l’arborescence. ( chroot donc )

user1 ne pourrait aller, modifier, transférer que dans /var/www/site1
user2 … /var/www/site2

et bien sûr les permissions, propriétaire du contenu de site1 resterait www-data:www-data, en 755.

POur sftp, j’ai trouvé un début de réponse pour les droits : https://support.rackspace.com/how-to/how-to-add-linux-user-with-document-root-permissions/

Pour info, je sais faire ce “chroot” avec vsftp. Mais la sécurité de sftp m’interesse plus.

Guillaume
Bonne journée

Juste une petite remarque, le contenu des sites appartenant à www-data:www-data en 0755, les utilisateurs peuvent toujours accéder en écriture à leur site ?
Parce que, moi, je ferai le contraire, je laisserai l’utilisateur propriétaire des données de son site, mais je ferai en sorte que le serveur web ait accès aux données.

les utilisateurs peuvent toujours accéder en écriture à leur site ?
==> Tu veux dire quoi ? :slight_smile: je ne comprends pas.

Vous en pensez quoi de ça ?
http://formation-debian.via.ecp.fr/ftp.html#idp1457264

Salut @gillaume1.

Ce n’est vraiment pas compliqué, en soit.

  • Tu créés d’abord un groupe qui te servira pour ssh, tel que, par exemple ‘sshdomains’.
  • Tu créés ton user1 de manière à ce qu’il n’ait pas de droits particuliers, un home (tel que /home/user1) sans le créer; et tu l’ajoutes aux groupes ‘sshdomains’ et ‘www-data’.
adduser --no-create-home --shell /bin/false "${user}"
usermod -a -G "${group_web}" "${user}"
usermod -a -G "${ssh_group}" "${user}";
  • Tu modifies à minima ton fichier de config du server ssh, de tel manière :
    AllowGroups sshdomains 
    Match group sshdomains
            ForceCommand internal-sftp
            ChrootDirectory /home/%u
  • Tu vérifies bien les droits sur /home et sur /var/www. Ils doivent appartenir à root, chmod 0755.
  • Tu crées ton répertoire ‘/var/www/site1’ avec pour ayant droits seul root, chmod 0755, et tu fais un lien symbolique de /home/user1 vers ce répertoire
ln -sn "${dir_domain}" "/home/${user}"
  • Tu créés un premier répertoire dans ‘/var/www/site1’ nommé ‘www’ - ou autrement - qui a pour appartenance u+g ‘user1’, chmod 0705. (‘u+g’ signifie ‘user:group’ - au cas où !) - ce répertoire est nécessaire, et surtout les droits à apposer dessus, autrement ton user1 ne pourrait rien écrire dedans !

Ces étapes précédentes sont vraiment nécessaires !
Il ne faut pas te louper dessus, si c’est le cas, vérifies et ré-vérifies tes appartenances utilisateurs et les droits.


  • Optionnel : Étant donné que tu chroot autant l’utilisateur pour ssh, que web, je créé aussi quelques autres répertoires dans ‘/var/www/site1’, tels que :
    • ‘etc/’ dans lequel je copie /etc/localtime - droits appartenant à user1, chmod 0705 sur le répertoire, et 0644 sur le binaire. - gestion du temps : utile.
    • ‘usr/share’ dans lequel je copie /usr/share/zoneinfo/ - droits appartenant à root
    • ‘var/lib/php/session’, ‘var/run/fpm’ - droits appartenants à root.
      Ces trois derniers répertoires sont utiles pour php-fpm … le premier étant indispensable.

Bref, voili, voilou … c’est mon mode opératoire que tu peux certainement adapter.

Merci PengouinPdt,

ça me plaît bien ce que tu viens d’écrire.

Les étapes en option à la fin, je pige pas trop.
Je me lance !

Étrange,

je modifies sshd_config, mais je n’arrive pas à le redémarrer …

mes seuls changements dans le fichier :
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
AllowGroups sshgroup
Match group sshgroup
ForceCommand internal-sftp
ChrootDirectory /home/%u

et quand je redémarre : systemctl restart ssh.service

j’ai ceci :
déc. 21 14:20:02 xxxxx.ovh.net systemd[1]: ssh.service start request repeated too quickly, refusing to start.
déc. 21 14:20:02 xxxxx.ovh.net systemd[1]: Failed to start OpenBSD Secure Shell server.
déc. 21 14:20:02 xxxxx.ovh.net systemd[1]: Unit ssh.service entered failed state.

je comprends pas … :frowning:

Souci …
Je n’arrive pas à rentrer dans le dossier …

Dec 21 14:46:38 vps355678 sshd[28794]: fatal: safely_chroot: stat("/home/guillaume"): No such file or directory
Dec 21 14:46:38 vps355678 sshd[28789]: pam_unix(sshd:session): session closed for user guillaume
Dec 21 14:46:38 vps355678 systemd: pam_unix(systemd-user:session): session closed for user guillaume

pourtant :
ls -l /home ==> lrwxrwxrwx 1 root root 6 déc. 21 14:39 guillaume -> site2

en ayant fait : ln -sn /var/www/site2 /home/guillaume

PengouinPdt,
j’ai hésité pour cette ligne :
“Tu créés un premier répertoire dans ‘/var/www/site1’ nommé ‘www’ - ou autrement - qui a pour appartenance u+g ‘user1’, chmod 0705. (‘u+g’ signifie ‘user:group’ - au cas où !)”

j’ai fait ceci :
drwx—r-x 2 guillaume guillaume 4096 déc. 21 14:44 www
Bon ? :slight_smile:

cette ligne ne doit pas être commentée et vos utilisateurs DOIVENT faire partie de ce groupe; de plus le répertoire chroot de sftp DOIT apertenir à root.

Pour mieux comprendre la démarche logique de sftp:

https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server

http://www.ced-info.com/administration-reseaux/installer-facilement-un-serveur-sftp

https://debian-facile.org/doc:reseau:ssh:tp-sftp-via-openssh-server

https://memo-linux.com/mettre-en-place-un-serveur-sftp-sous-debian-8/

et bien d’autres encore…

NB: vous pouvez choisir n’importe quel répertoire pour chrooter vos utilisateurs,par exemple le répertoire /var/www mais attention à mettre les bons droits,vous pouvez chrooter tous vos utilisateurs dans le même répertoire chroot et dans le chroot créer des sous répertoires pour chaque utilisateurs avec les droits qui vont bien pour que chacun des utilisateurs soit le seul à pouvoir accéder dans son répertoire avec les droits en lecture/écriture.

edit: ne vous rajoutez pas vous même dans le groupe autorisé au sftp sinon vous seriez vous même chrooté lors d’une connexion ssh;ce qui serait très .

Ahhh, oui ! :stuck_out_tongue:

Oui, très bien.

D’accord,

Donc, il faut que je trouve où ça coince …
C’est pas gagné, là, présentement …

‘guillaume’ est bien un utilisateur ssh autre que ton user courant ?

oui.
Guillaume est le seul utilisateur ssh ( après root )

moi je ferais la chose suivante:

#mkdir /var/www && mkdir /var/www/user1 && mkdir /var/www/user2

#chown user1:user1 /var/www/user1

#chown user2:user2 /var/www/user2

#chmod 700   /var/www/user1  --->ces droits pour que seul user1 puisse lire et écrire dans son répertoire user1

#chmod 700   /var/www/user2  --->ces droits pour que seul user2 puisse lire et écrire dans son répertoire user2

Ensuite aller dans le fichier /etc/ssh/sshd_config et indiquer que le chroot de sftp est le répertoire /var/www en mettant la ligne:

ChrootDirectory /var/www

et relancer le service ssh:

#/etc/init.d/ssh restart

Ca devrait fonctionner pour ce que vous voulez faire et si j’ai bien compris votre demande.

j’essaierai cette solution, pourquoi pas.

Mais je comprends pas pourquoi la ligne
Match Groups sshgroup

me fait planter ssh. …

Je viens de la commenter, et même root ne se connecte plus ! !

Mais tu mets quoi comme “home” pour user1, et user2 dans ton exemple ? :slight_smile:

il faut que le groupe sshgroup existe que les utilisateurs user1 et user2 en fassent partie. Et bien sûr il faut créer lesdits utilisateurs.

bien sûr.

le groupe sshgroup existe, et le user “guillaume” existe et est dans ce groupe.

justement non;vous ne devez pas appartenir à ce groupe, ce sont les utilisateurs user1 et user2 qui doivent être dedans

je n’appartiens pas ce groupe.
Je suis connecté en root sur le vps.

guillaume est user1, dans mon cas.