postheadericon Créer un sous-domaine avec un user spécifique

Ce billet est inspiré de ce post du forum OVH : http://forum.ovh.net/showthread.php?p=511134#post511134, merci à jicao son auteur. Il a pour but de répondre à une question récurrente parmi les utilisateurs de serveurs en release 2 OVH : comment créer un sous-domaine qui appartienne à un utilisateur spécifique (et non pas à l’utilisateur du domaine principal).

La question peut en effet se poser lorsqu’on souhaite confier la gestion d’un sous-domaine à un tiers (y compris l’accès FTP) sans pour autant lui confier le mot de passe de l’ensemble de l’hébergement du domaine en question. Ce cas de figure n’est malheureusement pas prévu dans la release OVH. En effet, la release 2 OVH (en particulier son module OVHm) permet sans problème de créer un nombre illimité de sous-domaines (sd1.domaine.com, sd2.domaine.com, etc.), mais tous appartiendront obligatoirement à l’utilisateur qui est lié à l’hébergement de domaine.com. Il faut donc se connecter avec le login et le mot de passe de l’hébergement de domaine.com pour y accéder, ce qu’on souhaite précisément éviter. Il va donc falloir ruser … et voici comment faire :

1) Créer le domaine et le sous-domaine voulus dans OVHm

Cela se fait le plus naturellement du monde, là : https://12.34.56.78:10000/?cat=ovhm (et cela se passe de commentaire)

2) Créer l’utilisateur qui sera dédié à ce sous-domaine

Il est possible de faire cela par Webmin :
Système > Utilisateurs et groupes > Créer un nouvel utilisateur
Autrement dit, là : https://12.34.56.78:10000/useradmin/edit_user.cgi

A cet endroit, il vous faudra remplir au moins les champs suivants :

  • Nom d’utilisateur : c’est arbitraire, à vous de choisir
  • Mot de passe (Mot de passe normal) : encore une fois à vous de choisir, n’oubliez pas de choisir un mot de passe fort.
  • Interpréteur de commandes : /bin/false/
Le but de mettre l’interpréteur de commandes à /bin/false/ est d’interdire à votre futur utilisateur l’accès SSH à votre serveur. C’est prudent … mais il est cependant possible que vous souhaitiez permettre à votre utilisateur de pouvoir se connecter en ligne de commande. Auquel cas il convient de mettre /bin/bash à cet endroit  mais il est alors recommandé de régler le paramètre « Groupe primaire » (un peu plus bas sur la page) à « 

3) Modification du VirtualHost dans Apache

Jusqu’ici nous avons créé un sous-domaine dans OVHm (ce qui a eu pour effet de créer un répertoire /home/domaine/sd/sousdomaine/www) et nous avons créé un utilisateur système (ce qui a eu pour effet de créer un répertoire /home/utilisateur/www/). Il va à présent falloir demander au serveur web (Apache) de ne pas aller chercher le sous-domaine dans /home/domaine/sd/sousdomaine/www/, mais bien dans /home/utilisateur/www/.

Pour ce faire, rendez vous dans le module Apache :
Webmin > Serveurs > Serveur Web Apache > Configuration globale > Édition des fichiers de configuration
Autrement dit, là https://12.34.56.78:10000/apache/allmanual_form.cgi

Trouvez à cet endroit (probablement tout en bas de la zone de texte) la partie qui ressemble à ceci :

<VirtualHost 12.34.56.78:80>
ServerAdmin webmaster@domaine.com
DocumentRoot /home/domaine/sd/sousdomaine/www
SuexecUserGroup domaine users
ServerName sous.domaine.com
CustomLog logs/sous.domaine.com-access_log combined
ScriptAlias /cgi-bin/ /home/domaine/cgi-bin/
AddHandler x-httpd-php5 .php
</VirtualHost>

Et remplacez là par ceci (en adaptant, bien sûr) :

<VirtualHost 12.34.56.78:80>
ServerAdmin webmaster@domaine.com
DocumentRoot /home/utilisateur/www
SuexecUserGroup utilisateur users
ServerName sous.domaine.com
CustomLog logs/sous.domaine.com-access_log combined
AddHandler x-httpd-php5 .php
</VirtualHost>

Attention à adapter la ligne « SuexecUserGroup » si vous avez décidé de  créer un nouveau groupe du même nom que l’utilisateur (voir le point 1 concernant l’accès SSH). Dans ce cas, cette ligne doit être du genre :

SuexecUserGroup utilisateur utilisateur

Et enfin sauvegardez.

4) Relancer le bouzin

Ne pas oublier de retourner un coup dans OVHm et de cliquer sur le fameux lien « Redemarrer tous les services (pour prendre en compte les changements) », ce qui aura pour effet de relancer Apache (et donc de prendre en compte les changements que vous avez faits).

Et si je veux une base de données pour ce sous-domaine ?

Et bien ça non plus ce n’est pas prévu dans la release OVH … mais il y a également moyen de ruser, assez simplement d’ailleurs. Il suffit de vous connecter à phpMyAdmin (https://12.34.56.78/phpMyAdmin/), puis cliquer sur « Privilèges » et ensuite « Ajouter un utilisateur ».

Sur la page suivante, il vous faudra choisir un nom d’utilisateur (il ne doit pas forcément être identique à l’utilisateur système que vous avez créé au point 1) ainsi qu’un mot de passe. Dans le champ « serveur », choisissez « Local ». Il reste alors à choisir, un peu plus bas sur la page, l’option « Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base ». C’est tout : votre nouvel utilisateur (MySQL cette fois) aura les pleins pouvoirs sur cette base, mais sur cette base seulement.

Et si je veux supprimer le tout ?

Et bien il suffit défaire ce que vous avez fait, soit :

  1. Vous rendre dans OVHm et supprimer le sous-domaine
  2. Vous rendre dans « Webmin > Système > Utilisateurs et groupes » et supprimer l’utilisateur que vous avez créé
  3. (si vous avez créé une base de données) Supprimer la base de données dans phpMyAdmin ainsi que le user MySQL que vous avez créé pour cette base.

Enjoy 🙂

11 réponses à to “Créer un sous-domaine avec un user spécifique”

  • damien:

    mais a l’étape n°2 cela n’empeche pas à l’utilisateur crée de parcourir les autres dossiers sous FileZilla par exemple.
    C’est justement ce que je souhaite. un utilisateur par sous domaines et qui ne puisse pas regarder dans les autres dossiers.

  • Nico:

    Si vous avez pris soin de mettre l’interpréteur de commandes à /bin/false, votre utilisateur ne devrait pouvoir se connecter que en FTP (pas en SSH donc) et il ne devrait pas pouvoir remonter l’arborescence.

    Si vous souhaitez laisser un accès SSH à cet utilisateur (et vous aurez donc mis /bin/bash, /bin/sh ou autre comme interpréteur de commandes), il est possible qu’il puisse remonter dans l’arborescence. Cela n’a rien d’affolant en soi, c’est le comportement normal d’un système Linux et l’utilisateur en question ne pourra pas pour autant altérer le système. Il ne pourra pas non plus accéder aux données des autres utilisateurs, du moins si vous avez pris soin de créer un nouveau groupe juste pour lui. C’est ce que je voulais dire das le billet par : il est alors recommandé de régler le paramètre « Groupe primaire » (un peu plus bas sur la page) à « Nouveau groupe du même nom que l’utilisateur ».

  • Sébastien:

    Je tiens à vous remercier d’avoir écrit ce billet qui est très bien expliqué… Merci 🙂

  • rudddy:

    Pour info, votre manip n’a pas fonctionné mais j’ai encore plus simple :
    créer l’utilisateur et lui donner le même ID que celui du domaine, puis indiqué le path du sous-domaine et c’est parti (sans besoin de toucher à apache)

  • Nico:

    « votre manip n’a pas fonctionné »
    Ce tuto a été testé avec succès sur une release 2 fraîchement installée. Faute d’informations précises sur ce que vous avez essayé et les erreurs que vous avez rencontrées, je ne peux que répondre : « ben si, ça fonctionne très bien ».

    « créer l’utilisateur et lui donner le même ID que celui du domaine »
    Créer 2 utilisateurs avec le même UID vous fera peut-être arriver à vos fin … mais il n’en demeure pas moins que cela relève d’une pratique assez douteuse pouvant occasionner un certain nombre de problèmes (de logs notamment). Pour info, sur un système Linux, 1 utilisateur < => 1 UID.

  • mike:

    Bonjour,

    merci pour ce tuto.
    petite question…

    est il possible d’obliger le user à tomber ds un répertoire spécifique.

    par exemple, si il s’agit d’un sous-domaine http://ftp.xyz.com
    le but étant de créer un répertoire par client

    donc client abcd -> http://ftp.xyz.com/abcd
    et que le client abcd tombe directement ds le répertoire qui lui est destiné.
    de telle manière, je pourrai créer d’autre répertoire destiné à d’autres user.

    merci d’avance

  • Nico:

    Non, il n’est malheureusement pas possible d’arriver à vos fins, pas sur base du tuto ci-dessus en tout cas. Vous rencontreriez alors des problèmes de permissions/propriétaires qui rendraient certains scripts inexécutables par Apache et/ou la possibilités laissée aux utilisateurs d’aller se promener dans les répertoires des autres.

  • Mehdi:

    Bonjour

    existe t il un script pour créer des domaines à la volée ?

    Cdt

  • Nico:

    Il y a OVHm pour ça…

  • Mehdi:

    bonjour Nico

    c’est à dire ?

  • Nico:

    Ce billet concerne les serveurs installés en release 2 OVH. OVHm est le module Webmin développé par OVH pour gérer les hébergement sur un tel serveur. Il s’agit de l’outil de base et, comme vous ne semblez pas savoir ce dont il s’agit, il y a gros à parier que votre serveur n’est pas une release 2. Il est donc très probable que ce billet ne répondra pas à votre besoin.

Laisser un commentaire