Description: Ubuntu 16.10
Release: 16.10
Codename: yakkety
Je me suis penché plus en détail sur le problème. Je me suis donc investi sur systemd.
La problématique du fonctionnement du service sous Ubuntu vient de systemd et du script installé.
En effet il faut éditer /etc/systemd/system/neo4j.service et modifier :
...
[Service]
Type=forking
User=neo4j
ExecStart=/usr/bin/neo4j start
ExecStop=/usr/bin/neo4j stop
ExecReload=/usr/bin/neo4j restart
RemainAfterExit=no
Restart=on-failure
PIDFile=/var/run/neo4j/neo4j.pid
LimitNOFILE=60000
TimeoutSec=600
...
[Service]
Type=forking
User=neo4j
Ajout
RuntimeDirectory=neo4j
RuntimeDirectoryMode=770
ExecStart=/usr/bin/neo4j start
ExecStop=/usr/bin/neo4j stop
ExecReload=/usr/bin/neo4j restart
RemainAfterExit=no
Restart=on-failure
PIDFile=/var/run/neo4j/neo4j.pid
LimitNOFILE=60000
TimeoutSec=600
...
En effet c'est systemd qui s'exécute avec l'utilisateur neo4j.
Systemd a modifié le processus init et stocke le répertoire /var/run (qui est maintenant un alias vers /run) dans un système de fichiers temporaire tmpfs.
user@hostname:~$ mount
...
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=808128k,mode=755)
...
Ce système de fichiers se recréé à chaque démarrage du système.
Il perd alors toutes ses autorisations, et les autorisations par défaut sont celles de root.
Lorsque l'on lance le service neo4j.service avec systemctl celui-ci s'exécute avec les permissions de l'utilisateur neo4j.
La directive RuntimeDirectory=neo4j créé le répertoire neo4j dans /run avec comme utilisateur le nom de User= et le groupe le nom de Group= s'il est précisé.
Et la directive RuntimeDirectoryMode=770 attribue au répertoire /run/neo4j les droits de lecture/écriture/exécution pour l'utilisateur et pour le groupe du répertoire.