[Apache/Debian stable] umask van apache / php

Pagina: 1
Acties:

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Ik wil de umask van apache (of beter gezegd php) op 0002 hebben op een development server, zodat users die dezelfde group hebben alles kunnen met de bestanden die door php weggeschreven zijn (denk aan file uploads en smarty compile-directories, enz). Dit zijn normaal gesproken samba users, maar kunnen ook gewoon shell users zijn.

Dit krijg ik niet voor elkaar. De enige oplossing die ik op internet heb gevonden is in de /etc/apache2/envvars de umask aan te roepen, maar dat wordt niet meegenomen. Het heeft waarschijnlijk iets te maken met forken / child processes van apache die de umask niet meenemen, maar ik kan nergens iets vinden dat het in de apache configuratie zelf aangepast zou kunnen worden. De /etc/apache2/envvars wordt wel aangeroepen.

Mijn testcase (group naam heb ik even veranderd)

code:
1
2
3
4
5
022
total 8
drwxr-xr-x 2 www-data group 4096 2009-02-20 13:03 .
drwxrwxrwx 4 group group 4096 2009-02-20 13:03 ..
-rw-r--r-- 1 www-data group 0 2009-02-20 13:03 test
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
echo '<pre>';

printf("%03o\n", umask());
shell_exec('rm -r ./test');
mkdir('./test');
touch('./test/test');
echo shell_exec('ls -la test');

echo '</pre>';

highlight_file(__FILE__);
?>


/etc/apache2/envvars:
umask 0002

Ik heb ook andere notaties voor umask geprobeerd, maar dat maakt niks uit, aangezien de umask voor dat het opstartproces wel goed geset lijkt te worden, getuige:

dev1:/etc/apache2# apache2ctl restart
0002
dev1:/etc/apache2# cat envvars
umask 0002
umask
dev1:/etc/apache2# 


Iemand een idee? Of is het gewoon niet mogelijk?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 13:44

Kees

Serveradmin / BOFH / DoC
Wat als je apache stopt en start in plaats van een restart? Mischien pakt hij die env variable alleen op die manier goed mee.

En wat gebeurd er als je umask 002 gebruikt ipv 0002?

[ Voor 18% gewijzigd door Kees op 20-02-2009 13:15 ]

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Kees:
Wat als je apache stopt en start in plaats van een restart? Mischien pakt hij die env variable alleen op die manier goed mee.
Hm, ik dacht dat apachectl precies dat deed, maar misschien maakt het verschil, ga ik proberen.
En wat gebeurd er als je umask 002 gebruikt ipv 0002?
Maakt niet uit, ook de u=rwx, etc notatie werkt niet. Je ziet ook aan de uitvoer van de apachectl aanroep dat hij het wel goed set op dat moment.
drm:
dev1:/etc/apache2# apache2ctl restart
0002
dev1:/etc/apache2# cat envvars
umask 0002
umask
dev1:/etc/apache2# 

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Hiervoor heb je een combinatie van de umask en de setgid bit nodig. Je maakt de apache user owner van de directory waarin geschreven moet kunnen worden. De group van die directory moet de groep zijn waarvan je wilt dat leden schrijfpermissies hebben. Tot slot moeten zowel apache als de groep schrijfrechten krijgen op de directory en moet de setgid bit worden ingesteld.

Om een lang verhaal kort te maken:
chown -v apache:users melp
chmod -v 2775 melp

Als er in die directory nu een subdirectory wordt aangemaakt, heeft de groep 'users' automatisch ook schrijfrechten. Let er wel op dat je in je PHP scripts ook even umask(0007) of umask(0002) aanroept.

[edit]
Omgekeerd kun je ook alle users lid maken van de groep 'apache'.

[ Voor 5% gewijzigd door Verwijderd op 21-02-2009 17:27 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Ik wil juist niet vanuit de php scripts met umask hoeven werken, want als dat geen probleem was zou ik dat sowieso al doen. En setgid / setuid is ook niet écht een goede oplossing (hoewel in de richting), omdat dat vervolgens ook effect heeft op wat ieder ander binnen die mapjes doet, en dat wil ik eigenlijk niet.

Waar het dus op neer komt is dat ik wil dat de user apache altijd wegschrijft met bepaalde permissions, maar dat dat ook het enige resultaat is.

Met een reguliere user kun je dit oplossen door in z'n .profile de umask aan te passen, zoiets moet er voor apache (of child processen) toch ook gewoon mogelijk zijn?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 27-01 19:59

deadinspace

The what goes where now?

drm schreef op vrijdag 20 februari 2009 @ 12:55:
Dit krijg ik niet voor elkaar. De enige oplossing die ik op internet heb gevonden is in de /etc/apache2/envvars de umask aan te roepen, maar dat wordt niet meegenomen.
Toch lijkt dat wel degelijk de juiste oplossing te zijn. Op een Debian 5.0 machine (verse apache install):
% cat /etc/apache2/envvars 
# envvars - default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid
% cat /var/www/test.php 
<?php system( 'umask' ); ?>
% wget -qO - http://localhost/test.php
0022
% echo umask 002 >> /etc/apache2/envvars 
% /etc/init.d/apache2 restart           
Restarting web server: apache2 ... waiting .
% wget -qO - http://localhost/test.php
0002
drm schreef op zaterdag 21 februari 2009 @ 17:11:
Hm, ik dacht dat apachectl precies dat deed, maar misschien maakt het verschil, ga ik proberen.
Nee, "apachectl restart" herstart apache niet, of althans: niet helemaal.
% ps auxf | grep apache2
root      3868  0.0  0.6  21140  6564 ?        Ss   19:58   0:00 /usr/sbin/apache2 -k start
www-data  3906  0.0  0.3  21140  3364 ?        S    20:01   0:00  \_ /usr/sbin/apache2 -k start
www-data  3907  0.0  0.3  21140  3364 ?        S    20:01   0:00  \_ /usr/sbin/apache2 -k start
www-data  3908  0.0  0.3  21140  3364 ?        S    20:01   0:00  \_ /usr/sbin/apache2 -k start
www-data  3909  0.0  0.3  21140  3364 ?        S    20:01   0:00  \_ /usr/sbin/apache2 -k start
www-data  3910  0.0  0.3  21140  3364 ?        S    20:01   0:00  \_ /usr/sbin/apache2 -k start
% apache2ctl restart
% ps auxf | grep apache2
root      3868  0.0  0.6  21140  6584 ?        Ss   19:58   0:00 /usr/sbin/apache2 -k start
www-data  3920  0.0  0.3  21140  3384 ?        S    20:03   0:00  \_ /usr/sbin/apache2 -k start
www-data  3921  0.0  0.3  21140  3384 ?        S    20:03   0:00  \_ /usr/sbin/apache2 -k start
www-data  3922  0.0  0.3  21140  3384 ?        S    20:03   0:00  \_ /usr/sbin/apache2 -k start
www-data  3923  0.0  0.3  21140  3384 ?        S    20:03   0:00  \_ /usr/sbin/apache2 -k start
www-data  3924  0.0  0.3  21140  3384 ?        S    20:03   0:00  \_ /usr/sbin/apache2 -k start

Hij sluit wel al zijn children af en start die opnieuw, nadat hij de configfile opnieuw heeft gelezen. Maar apache wordt niet helemaal afgesloten en opnieuw gestart, en dus wordt (blijkbaar) ook die nieuwe environment niet meegenomen.

Ik zou eigenlijk aan willen raden om altijd /etc/init.d/apache restart te gebruiken om dit soort problemen te voorkomen. Apachectl is maar irritant vind ik vaak :P

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Thanks, dan ga ik het nog eens proberen via /etc/init.d/apache. Ik heb nu geen toegang tot die machine, maar zal even laten weten of het gelukt is.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Topicstarter
Dat deed inderdaad "the trick" :) Dank allen!

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1