Bonjour,
TL;DR :
Comment faire pour que PHP (user 'http') puisse accéder aux fichier contenus dans /var/services/homes
Version longue :
Mon objectif est de pouvoir utiliser mon NAS comme :
1) Server git (commandes git depuis un client)
2) Avoir un affichage web sympa de mes dépots (type github)
J'ai installé le paquet officiel Git server qui m'a installé la commande git.
Ensuite j'ai créé un user git avec l'interface d'admin (il a bien son home dans /var/services/homes/git).
J'ai modifié le /etc/passwd pour mettre /bin/sh comme shell (par défaut c'est nologin).
J'ai copié la clé ssh de mon client dans le .ssh/authorized_keys du home de git sur le NAS.
Avec tout ça j'arrive à créer des dépot directement dans le home du user git (mkdir, git init --bare, ...)
Comme ça je peux faire :
git clone git@mon-nas:mon-depot.git
Les clones, push et les pull fonctionnent bien.
Jusque là tout va bien, c'est ensuite que ça se complique.
Pour la visu web je souhaite utiliser Gitlist.
J'ai donc activé le Service Web sur le NAS, puis créé un repertoire git dans /var/services/web/ et y ai déposé puis détarré gitlist-0.5.0.tar.gz.
J'ai créé à partir de l'exemple fourni la config suivante :
[git]
client = '/usr/bin/git' ; Your git executable path
default_branch = 'master' ; Default branch when HEAD is detached
repositories[] = '/var/services/homes/git' ; Path to your repositories
; If you wish to add more repositories, just add a new line
[...]
Il y a d'autres lignes ([...]) mais elles ne sont pas significatives.
Lorsque j'essaye d'accéder à gitlist, il me dit "Please, edit the config file and provide your repositories directory".
Dans le code php, le problème vient d'un is_dir sur "/var/services/homes/git" qui ne renvoie pas 1.
Si au lieu de "/var/services/homes/git", je met un répertoire directement accessible, exemple "repos" (/var/services/web/git/repos), là ça fonctionne (mais ce n'est pas ce que je veux).
J'ai vu dans /etc/php/conf.d/user-settings.ini que "open_basedir" contenait "/var/services/homes" (et d'autres choses), donc je ne comprend pas pourquoi ça fonctionne pas.
J'ai essayé de créer des liens symboliques (/var/services/web/git/repos -> /var/services/homes/git) et ça ne fonctionne toujours pas.
EDIT:
J'ai fait un test simple, j'ai créé un fichier php faisant un
is_dir('/var/services/homes/git');
ça ne fonctionne pas (ne renvoie pas 1) et dans la log /var/log/httpd/user-error_log, j'ai la chose suivante :
[Wed Feb 18 18:08:13 2015] [error] [client 192.168.xxx.xxx] FastCGI: server "/php-fpm-handler" stderr: PHP message: PHP Warning: is_dir(): open_basedir restriction in effect. File(/var/services/homes/git) is not within the allowed path(s): (/etc.defaults:/etc:/usr/syno/synoman:/tmp:/var/services/tmp:/var/services/web:/var/services/homes) in /volume1/web/php-tests/index.php on line 6
Curieux, car le message dit que /var/services/homes/git n'est pas dans les chemins autorisés, sachant que dans la liste des chemins autorisés, il y a bien /var/services/homes (à la fin).
Quelqu'un aurait-il une explication ?
Merci d'avance,
Florian