Configuration SFTP et liens symboliques vers sites Web

Bonjour,
J’ai un serveur Debian 8.6 tout frais pour l’hébergement de plusieurs sites Web. Chaque site sera géré par un utilisateur différent.
Actuellement j’ai un site Web dans le dossier : /srv/http/site1/public accessible sans problème depuis l’Internet avec les droits :

chmod -R 750 /srv/http/site1
chown -R root:www-data /srv/http/site1

A présent je crée l’utilisateur toto et le groupe sftp pour l’accès SFTP :

useradd -m toto
passwd toto
addgroup sftp
gpasswd -a toto sftp

Configuration du SFTP :

nano /etc/ssh/sshd_config

Match User toto
ChrootDirectory /home/toto
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Cloisonner son espace de travail (pour bloquer l’accès aux dossiers système) avec :

chown root:root /home/toto

Redémarrage du SSH :

service ssh restart

L’utilisateur accède correctement à son home.
Maintenant j’essaye d’ajouter un lien vers le dossier /srv/http/site1 pour qu’il puisse travailler dedans… J’ai fait :

ln -s /srv/http/site1 /home/toto/

Le lien s’affiche bien en SFTP mais impossible d’y rentrer… Je suppose que je dois modifier les droits… N’étant pas sûr de moi (sur ce que j’ai fait jusqu’à présent et sur ce que je ferai), est-ce que quelqu’un pourrait m’aiguiller ???

Merci d’avance ! :slight_smile:

Je comprend vraiment pas… :rage:
même après :

chmod -R 777 /srv/http/site1
chown -R toto:toto /srv/http/site1

find /srv/http/ | xargs stat -c "%n %a %A %U %G" | column -t

/srv/http/                             750  drwxr-x---  root  www-data
/srv/http/site1                        777  drwxrwxrwx  toto  toto
/srv/http/site1/public                 777  drwxrwxrwx  toto  toto
/srv/http/site1/public/index.php       777  -rwxrwxrwx  toto  toto
/srv/http/site1/logs                   777  drwxrwxrwx  toto  toto
/srv/http/site1/logs/site1-access.log  777  -rwxrwxrwx  toto  toto
/srv/http/site1/logs/site1-error.log   777  -rwxrwxrwx  toto  toto

et

chown toto:toto /home/toto/site1
ls -l /home/toto
total 0
lrwxrwxrwx 1 toto toto 38 nov.  12 17:40 site1 -> /srv/http/site1/

ça ne marche pas.
HELP… :disappointed_relieved:

J’me pose une question…

Est-il possible de cloisonner l’utilisateur avec :
ChrootDirectory /home/toto et chown root:root /home/toto
tout en ayant la possibilité d’accéder à /srv/http/site1 via le SymLink ???

…parce que dans le cas contraire, faut que je révise ma méthode.

Est-ce qu’une personne pourrait me dire comment gérer le système multi-users ?
Merki !!!

Je vais te faire une réponse aussi détaillée que possible. Voilà ce que je fais :

La fin de mon fichier de config /etc/ssh/sshd_config:

Subsystem sftp /usr/lib/openssh/sftp-server
#Subsystem sftp internal-sftp

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no

AllowGroups sshdomains 

Match group sshdomains
	ForceCommand internal-sftp
	ChrootDirectory /home/%u

Pour le reste, tu es un peu dans l’erreur surtout sur :

Je l’ai expliqué sur mon blog, pour que cela fonctionne, c’est :

Ce qui bloque, ce sont les droits d’accès, vers le répertoire prison !
Il faut impérativement que les droits sont attribués à ‘root’, et en lecture 0755 …
Puis ensuite créer le répertoire utilisateur, et attribuer les droits à l’utilisateur en question

# avec les droits administrateurs:
chmod 0755 /chroot
chown root:root /chroot
mkdir /chroot/user_id
chmod 0705 /chroot/user_id
chown user_id:user_id /chroot/user_id

Si vous aviez déjà créé les répertoires en question, vérifiez les droits d’accès et d’appartenances utilisateurs !

Donc, dans le cas qui semble te correspondre, tu fais plutôt cela :slight_smile:

chmod 0755 /home
chown root:root /home

mkdir /srv/http/site1
chmod 0755 /srv/http/site1
chown root:root /srv/http/site1

ln -sf /home/user1 /srv/http/site1  

mkdir /srv/http/site1/www
chmod 0705 /srv/http/site1/www
chown user1:user1 /srv/http/site1/www

Tu devras répéter les trois dernières commandes pour tout nouveau répertoire que tu créées dans le répertoire ‘site1’…

L’erreur 1 est de créer un répertoire user1 dans /home/
L’erreur 2 est de ne pas comprendre qu’il faut la prison, dans laquelle seul root peut prétende à faire quoique ce soit … Et c’est dans cette “prison”, qu’il faut créer des répertoires attribués à un user

Bref, quand tu te connecteras avec l’user1, il n’aura accès à rien d’autre que son “home” - même si celui-ci est réellement /srv/http/site1 …
Et, si cela ne fonctionne pas, vérifiez une fois, deux fois, trois fois les droits sur chacun des répertoires … qu’ils soient tels pour x, tels pour y !

Merci pour ton aide PengouinPdt

Je commence à comprendre le concept de prison… :wink: par contre…

1/ chown root:root /srv/http/site1
va empêcher www-data d’accèder aux sites web…

2/ ln -sf /home/user1 /srv/http/site1
va créer un symlink dans site1 pointant vers /home/user1 mais c’est l’inverse normalement ?

3/ dans mon cas, chaque dossier “site” contient un dossier “public” (racine du site) et un dossier “logs”. Le webmaster doit accéder à ces deux dossiers… d’où mon symlink :
ln -s /srv/http/site1 /home/toto/
Est-ce possible ?

structure :

/srv/http/site1/public/index.html
/srv/http/site1/logs/access.log
/srv/http/site1/logs/error.log

home d’un webmaster :

/home/toto/truc/machin.txt
/home/toto/site1 -> /srv/http/site1

:slight_smile:

Ajoute ton user1 au group web quelqu’il soit :wink:

Un coup de man ln te fera du bien :wink:

Ta question 3 est dépendante de ta compréhension du man ln !

En quoi ce que je t’ai écris dans mon post précédent t’empêche de le faire - au contraire, relis cela, stp :

mkdir /srv/http/site1/www
chmod 0705 /srv/http/site1/www
chown user1:user1 /srv/http/site1/www

Tu devras répéter les trois dernières commandes pour tout nouveau répertoire que tu créées dans le répertoire ‘site1’…

Dans cet exemple, le répertoire ‘www’ n’est qu’un exemple parmi tant d’autres, tu peux renommer le répertoire comme tu veux, le tout étant d’appliquer les bons droits d’appartenance et d’écriture à chaque fois !


Cette structure n’est pas bonne … Ne mélanges pas le répertoire ‘home’ avec des données autres que publication … le home, étant donné l’usage du SFTP, ne doit servir qu’aux données web. (Idem, si c’était FTP)

Choisi plutôt alors :

mkdir /srv/http/user1/site_x
chmod 0705 /srv/http/user1/site_x
chown user1:user1 /srv/http/user1/site_x

Dans chacun des ‘site_x’, tu créeras les répertoires ‘public’, et ‘logs’, etc … désirés.

Bien sûr, au niveau de ton fichier de config du server web, tu veilleras à ce que le dossier ‘root’ corresponde bien au ‘site_x’ adéquat.

Malgré mes multiples lectures et tentatives, je n’arrive toujours pas à utiliser Chroot SFTP et SymLink.

J’ai obtenu une solution très facile à mettre en place dans un autre topic avec l’utilisation de mount --bind

mkdir /home/toto/site1
mount --bind /srv/http/site1 /home/toto/site1

En tout cas, merci à toi pour ton aide ! :slight_smile: