Mentre si configura un server Gnu/linux ci si potrebbe imbattere al 50% di possibilità in un problema molto comune, ossia l’impossibilità di superare i permessi restrittivi che ci consentono di elencare le home directory, le cartelle htdocs degli altri utenti sul server.
Qui posterò come raggirare facilment eil problema:
per prima cosa dobbiamo determinare la cartella nella quale ci troviamo, eseguendo questo script:
<?php
die(getcwd());
?>
che dovrebbe restituirci una cartella del tipo /home/www/nostrosito.com e successivamente poi tentiamo di renumerare gli altri siti o utenti nella cartella /home/www/.
Per fare cio, lanciamo ora questo secondo script;
<?php
if ($handle = opendir(‘/home/www/’)) {
while (false !== ($file = readdir($handle))) {
if ($file != “.” && $file != “..”) {
echo “$file\n”;
}
}
closedir($handle);
}
?>
Da qui ora dovremmo trovarci dinanzi al fatidico errore: Warning: opendir(/home/www/) [function.opendir]: failed to open dir: Permission denied in /home/www/nostrosito.com/test.php on line 5
La soluzione è semplice, dobbiamo sfruttare la /tmp ed i file di sessione, elencando gli stessi nella /tmp e prendendo per ognuno l’uid dell’owner con la funzione PHP fileowner.
Dopo aver trovato l’uid dell’owner, procuriamoci con posix_getpwuid le altre informazioni che ci servono, come gid, home path etc.
<?php
$files = glob( “/tmp/sess_*” );
$users = array();
foreach( $files as $file ){
$owner = fileowner($file);
$user = posix_getpwuid($owner);
if( !in_array( $user, $users ) ){
$users[] = $user;
}
foreach( $users as $user ){
$info = str_replace( ‘ ‘, ‘ ‘, print_r($user,true) );
echo nl2br($info);
}
?>
Generando dunque una lista tipo la seguente:
Array
(
[name] => pierino.it
[passwd] => *
[uid] => 52417
[gid] => 52417
[gecos] => pierino.it@pierino.it
[dir] => /home/www/pierino.it
[shell] => /bin/true
)
Array
(
[name] => foobar.com
[passwd] => *
[uid] => 61240
[gid] => 61240
[gecos] => foobar.com@foobar.com
[dir] => /home/www/foobar.com
[shell] => /bin/true
Spero di esservi stato d'aiuto