[PHP] HOME-dir klopt niet met gebruiker

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Topicstarter
Ik heb iets raars ontdenkt, ondertussen heb ik wel een workaround maar toch ben ik benieuwd hoe dit mogelijk is.

Het betreft een linux server.
Apache/PHP draait onder gebruiker nobody.

Als ik op de commandline de homedir opvraag krijg ik het volgende:
code:
1
2
3
4
5
$ su - nobody
$ id
uid=99(nobody) gid=99(nobody) groups=99(nobody)
$ echo $HOME
/home/nobody


Als ik dan via een PHP pagina het volgende doe:
PHP:
1
2
3
exec('id', $out, $err);
exec('echo $HOME', $out, $err);
print_r($out);

Dan krijg ik:
code:
1
2
3
4
5
Array
(
    [0] => uid=99(nobody) gid=99(nobody) groups=99(nobody)
    [1] => /home/*rootuser*
)

Hoe is dit mogelijk? In de httpd.conf staat ook gewoon nobody.
Nergens heb ik iets kunnen vinden wat dit zou kunnen veroorzaken.
Heeft iemand een idee? :?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
Er zit een verschil tussen de manier waarop Apache van gebruiker wisselt, en de manier waarop su dat doet. Apache wordt gestart als root-user en erft dan ook allerlei environmental variables zoals de home directory van de root shell. Het afhandelen van requests doet Apache inderdaad onder een andere gebruiker (www, nobody, of een andere ongepriviligeerde gebruiker), maar daarbij wordt alleen het id van de huidige gebruiker (de zogenoemde effective user id) aangepast.

su is gemaakt om op de shell gebruikt te worden, en past daarom méér aan dan alleen de effective user id, zeker als je de optie - (of -l of -login) meegeeft waardoor de loginprocedure gesimuleerd wordt. Behalve de effective user id worden een aantal voor shells relevante variabelen aangepast (zoals dus inderdaad de HOME variabele, maar bijvoorbeeld ook de USER variabele).

Het is dus niet zo dat Apache iets raars doet; het is normaal dat de HOME variable niet zomaar veranderd, en het is ook normaal dat su afwijkend werkt. Wat is trouwens je probleem hiermee?

[ Voor 10% gewijzigd door Soultaker op 27-06-2007 17:24 ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Topicstarter
Soultaker schreef op woensdag 27 juni 2007 @ 17:22:
Er zit een verschil tussen de manier waarop Apache van gebruiker wisselt, en de manier waarop su dat doet. Apache wordt gestart als root-user en erft dan ook allerlei environmental variables zoals de home directory van de root shell. Het afhandelen van requests doet Apache inderdaad onder een andere gebruiker (www, nobody, of een andere ongepriviligeerde gebruiker), maar daarbij wordt alleen het id van de huidige gebruiker (de zogenoemde effective user id) aangepast.

su is gemaakt om op de shell gebruikt te worden, en past daarom méér aan dan alleen de effective user id, zeker als je de optie - (of -l of -login) meegeeft waardoor de loginprocedure gesimuleerd wordt. Behalve de effective user id worden een aantal voor shells relevante variabelen aangepast (zoals dus inderdaad de HOME variabele, maar bijvoorbeeld ook de USER variabele).

Het is dus niet zo dat Apache iets raars doet; het is normaal dat de HOME variable niet zomaar veranderd, en het is ook normaal dat su afwijkend werkt. Wat is trouwens je probleem hiermee?
Aha, dan is dat ook weer duidelijk.
Bedankt voor je goede uitleg.

su is trouwens met en zonder login procedure afwijkend, maar dat bedoel je waarschijnlijk ook. ;)

Mijn probleem was dat ik zelf een frontend voor subversion aan het schrijven was.
Subversion haalt informatie uit ~/.subversion/servers
Hier had het PHP script niet genoeg rechten voor omdat hij natuurlijk de omgevingsvariabelen van de root account heeft maar het userid van nobody.
Zo kijkt hij dus niet in zijn eigen homedir.

Ik heb hier nu omheen gewerkt door de $HOME dan maar zelf te zetten in de exec aanroep. Niet de meest nette manier maar zonder oorzaak wist ik verder niets te bedenken. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8