Casus
Voor een web applicatie die ik onlangs gemaakt heb ben ik een installatie script aan het schrijven. Het is de bedoeling dat dit script een aantal settings op de server controleert (PHP versie, DB Versie, geinstalleerde appache modules etc.) Een van de onderdelen van het script is het checken van de juiste rechten van een aantal mappen, met behulp van de sql module binnen PHP.
Let even niet op het slechte gebruik van user input
Probleem
Het probleem is dat het met bovenstaand script niet lukt om de mappen die nog rechten nodig hebben te setten. Dit is echter vreemd, want het resultaat van de functie
Zoals in het eerste code blok te zien is heb ik getracht om wat debug informatie te verkrijgen. Het resultaat van dit code blok is
Dit klopt gezien de rechten op deze twee directory's
Het script heeft dus geen rechten om binnen de map upload rechten uit te kunnen delen. Echter als het script uitgevoerd zou worden zouden de rechten van de eerste map op 777 ingesteld moeten worden waardoor de binnen liggende map ook van rechten voorzien zou kunnen worden.
Ik heb het commando ook direct in ftp (FlashFXP) gebrobeerd
Het commando is dus correct!
Omgeving
OS: Debian Sarge
PHP Versie: 4.3.10-18
MySQL Versie: 4.1.11-Debian_4sarge7-log
Safe mode: off
Register globals: off
Magic quotes: on
FTP support enabled: yes
Mod_rewrite enabled: yes
Ondernomen acties
Voor een web applicatie die ik onlangs gemaakt heb ben ik een installatie script aan het schrijven. Het is de bedoeling dat dit script een aantal settings op de server controleert (PHP versie, DB Versie, geinstalleerde appache modules etc.) Een van de onderdelen van het script is het checken van de juiste rechten van een aantal mappen, met behulp van de sql module binnen PHP.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // check file permissions $dir = array("html","upload","upload/Downloads","upload/File","upload/Image","upload/Photobook"); $mode = "0777"; $base = "/public_html/private/ZDE/C2G/project_source/"; if($ftp = ftp_connect($_POST["ftp_server_adres"],$_POST["ftp_server_port"])) { if(ftp_login($ftp, $_POST["ftp_username"], $_POST["ftp_password"])) { for($nr=0; $nr < count($dir); $nr++) { if(!is_writable($dir[$nr])) { echo "ftp_site(".$ftp.", 'CHMOD ".$mode." ".$base.$dir[$nr]."'); returned "; echo (ftp_site($ftp, sprintf('CHMOD %o %s', $mode, $base.$dir[$nr])) == true) ? 'true' : 'false'; echo "<br />"; } } } ftp_close($ftp); } |
Let even niet op het slechte gebruik van user input
Probleem
Het probleem is dat het met bovenstaand script niet lukt om de mappen die nog rechten nodig hebben te setten. Dit is echter vreemd, want het resultaat van de functie
PHP:
is true (wat aangeeft dat het commando succesvol is uitgevoerd).1
| ftp_site($ftp, sprintf('CHMOD %o %s', $mode, $base.$dir[$nr])) |
Zoals in het eerste code blok te zien is heb ik getracht om wat debug informatie te verkrijgen. Het resultaat van dit code blok is
code:
1
2
3
4
5
| ftp_site(Resource id #9, 'CHMOD 0777 /public_html/private/ZDE/C2G/project_source/upload'); returned true ftp_site(Resource id #9, 'CHMOD 0777 /public_html/private/ZDE/C2G/project_source/upload/Image'); returned Warning: ftp_site(): /public_html/private/ZDE/C2G/project_source/upload/Image: Permission denied in /home/wouter/public_html/private/ZDE/C2G/project_source/install.php on line 246 false [etc...] |
Dit klopt gezien de rechten op deze twee directory's
code:
1
2
| dr----x--t 7 wouter wouter 4096 2006-09-22 10:58 upload drwxr--r-- 7 wouter wouter 4096 2006-09-22 10:58 upload/Image |
Het script heeft dus geen rechten om binnen de map upload rechten uit te kunnen delen. Echter als het script uitgevoerd zou worden zouden de rechten van de eerste map op 777 ingesteld moeten worden waardoor de binnen liggende map ook van rechten voorzien zou kunnen worden.
Ik heb het commando ook direct in ftp (FlashFXP) gebrobeerd
code:
1
2
| [19:16:32] [R] site CHMOD 0777 /public_html/private/ZDE/C2G/project_source/upload [19:16:32] [R] 200 SITE CHMOD command successful |
Het commando is dus correct!
Omgeving
OS: Debian Sarge
PHP Versie: 4.3.10-18
MySQL Versie: 4.1.11-Debian_4sarge7-log
Safe mode: off
Register globals: off
Magic quotes: on
FTP support enabled: yes
Mod_rewrite enabled: yes
Ondernomen acties
- PHP FTP manual doorgenomen
- Diverse Google Zoek Acties
- W3C pagina gelezen
- andere servers geprobeerd (Fedora & Debian)
- logs op de server nagelopen
code:1 2 3
Nov 21 19:32:46 homer proftpd[3158]: xxxxx.xs4all.nl (xxxxx.xs4all.nl[192.168.1.3]) - FTP session opened. Nov 21 19:32:46 homer proftpd[3158]: xxxxx.xs4all.nl (xxxxx.xs4all.nl[192.168.1.3]) - mod_delay/0.4: delaying for 17 usecs Nov 21 19:32:46 homer proftpd[3158]: xxxxx.xs4all.nl (xxxxx.xs4all.nl[192.168.1.3]) - FTP session closed.

[ Dislect ]