Vollständige Version anzeigen : "unsichtbare" Dateien
DerSchorsch
15.07.02, 11:40
Hallo!
Ich habe gerade ein kleines Problem meinerseits feststellen müssen.
Um mein php Forum (wbb) um eine Funktionalität zu erweitern, habe ich eine Attachment Erweiterung eingebaut.
Diese legt selbstständig Verzeichnisse an, um Dateien abzulegen.
Im Verzeichnis etc../forum/attachments/00000000005 befinden sich definitiv Bilddateien, dich ich weder mit webftp noch einem anderen ftp Client sehen bzw. löschen/verändern kann. Die einzige Möglichkeit besteht zur Zeit darin, ein php Skript zu verwenden, um die Dateien zumindest zu sehen.
Da das Attachment Skript ggfs weitere Verzeichnisse anlegen wird, entstehen so eine Anzahl von Verzeichnissen, zu denen ich keinen Zugriff über ftp Clients habe.
Falls ich in die Verlegenheit kommen muß, Dateien aus diesen Verzeichnissen zu löschen, müßte ich dazu ein php Skript benutzen, oder weiß vielleicht jemand eine andere Möglichkeit?
Die Rechte der Verzeichnisse sind korrekt (777).
Nur der Benutzer ist teilweise etwas seltsam:
Alle Verzeichnisse "gehören" mir, web98, logischerweise, bis einschliesslich des attachments Verzeichnisses. Die darüber befindlichen Verzeichnisse (zb 00000000005) gehören einem Benutzer namens "wwwrun"....
mfg
Der Schorsch
probier mal diesen ssl ftp-zugang aus... der zeigt auch versteckte dateine an im gegensatz zu confixx...
Mailchecker (http://www.mailchecker.de)
gruß Olli
DerSchorsch
15.07.02, 13:26
Original geschrieben von ScrewedX
probier mal diesen ssl ftp-zugang aus... der zeigt auch versteckte dateine an im gegensatz zu confixx...
Mailchecker (http://www.mailchecker.de)
gruß Olli
Danke für den Tipp, ich habe es versucht, leider zeigt der mailchecker die Dateien aber auch nicht an...
Das Problem hierbei ist, das PHP unter der User-ID des Webservers ausgeführt wird, In diesem fall "wwwrun".
D.h., alle Dateien und Verzeichnisse die ein PHP-Script anlegt gehören wwwrun.
Ein Beispiel:
Das Verzeichnis web***/html gehört Dir.
Hier legt ein Script eine Datei html/test an. Diese kannst Du, obwohl sie nicht Dir gehört, löschen, da Du in diesem Verzeichnis schreibrechte hast.
Legt das Script aber erst ein Verzeichnis an und darin eine Datei (html/neuesDir/Datei) gehört das Verzeichnis "neuesDir" auch wwwrun. Die Datei kannst Du nicht löschen, da Du keine schreibrechte im Verzeichnis "neuesDir" hast. Du könntest "neuesDir" löschen, da Du im Verzeichnis "html" schreibrechte hast, wenn denn "neuesDir" leer wäre. :(
Wenn Du die Bilddateien per ftp nicht sehen kannst, dann legt das Board sie wohl mit den Rechten 0600 an, also nur schreib-/lesbar für wwwrun.
Du kannst Sie dann auch nur per PHP-Script löschen. Nur ein PHP-Script hat die nötigen Rechte.
Folgendes habe ich eben zum rekursiven löschen gefunden:
function deltree($dir, $root = 1) {
if ($root and ! preg_match('=/$=', $dir)) $dir .= '/';
$handle = @opendir($dir);
while ($file = @readdir ($handle)) {
if ($file == '.' or $file == '..') continue;
elseif(is_dir($dir . $file)) {
deltree($dir . $file . '/', 0);
@rmdir($dir . $file);
}
else @unlink($dir . $file);
}
@closedir($handle);
if ($root) return @rmdir($dir) ? true : false;
}
Aufruf z.B. mit
if (deltree('/pfad/zu/verzeichnis/')) echo "erfolgreich gelöscht";
else echo "Fehler";
DerSchorsch
15.07.02, 19:10
Ah! Jetzt wird mir einiges klarer!
Schonmal vielen Dank für die Infos, das hat geholfen!
Ich werde mich jetzt, wo ich das Problem erkenne, mal auf die Suche nach einigen Skripts machen. Ich möchte ja nicht ALLE Attachments löschen, sondern gezielt einige (sonst bringen mich die User um ;) )...
Falls ich was interessantes finde, poste ich es hier rein, für alle, die es interessiert bzw. das gleiche Problem haben...
Update:
*heul*
Alle bisher gefundenen php Skripte, die Dateiarbeit ermöglichten, scheiterten.
Ich werde mal versuchen, ein eigenes Skript zu schreiben....
Das einzige, was ich bisher gefunden habe, war folgendes, um den Inhalt des Verzeichnisses aufzulisten, ohne ihn zu verändern.
<html>
<head>
<meta name="owner/author" content="Nick Boldt, nick@divbyzero.com, Copyright 2001" />
<meta name="disclaimer" content="Freeware, but please source my name when you grep my code, or else email me if you use something here. Thanks!" />
<meta name="desc" content="Read any directory and list contents as is (no parsing)" />
<meta name="run-disabled" content="true" />
<title>readDir.php</title>
</head>
<body>
<font face=verdana size=2>
<?php if (!$s) { echo "Error: Must specify a directory to view as readDir.php?s=somedir"; exit; } else { ?>
This script is disabled for security reasons.<br><br>
<? }
if (!$ext) { $ext=".jpg"; }
$pics = Array();
$i=0;
// uncomment the following lines to make script executable
/*
$handle=opendir($s);
while (($file = readdir($handle))!==false && $i<19) {
if (eregi($ext,$file)) {
$pics[$i] = "$file".""; $i++;
}
}
closedir($handle);
foreach ($pics as $k => $v) {
echo "<a href=\"$s/$v\">$v</a><br>\n";
}
*/
?>
Hallo Zusammen,
zur Zeit habe ich ein Ähnliches Problem ... mir Legt das Script auch verzeichnisse an.
Frage: In welcher Form muss ich den Codeschnipsel ändern dass ich auch einen kompletten Verzeichnisbaum löschen kann ?
Bis jetzt löscht er mir immer nur das aktuelle Verz.
Gruß
Holger Lietz
Das ganze ist sogar noch interessanter.. :)
Ich habs mal ausprobiert.
<?php
mkdir("test", 0777);
mkdir("test/test", 0777);
touch("test/file");
touch("test/test/file");
?>
Hier sollte ein Script mal absichtlich auch Unterverzeichnisse anlegen. Das ging nicht.
Warning: SAFE MODE Restriction in effect. The script whose uid is 1387 is not allowed to access test owned by uid 30
Ein Script kann (in diesem Beispiel) nur "test/test" anlegen, wenn das Script selbst wwwrun gehört.
Das trifft bei einem Board zu, das mit einem setup-Script installiert wird und dabei die "eigenen" Dateien kopiert/entpackt.
Ich habe das obige Script mal mit einem anderen Script kopiert, sodaß es wwwrun gehört.
<?php
copy("mkdir.php", "mkdir2.php");
?>
Jetzt legt das Script auch "test/test" usw an.
Aber um dies wieder löschen zu können, muß das Script zum "rekursiven löschen" ebenfalls wwwun gehören, also
<?php
copy("del.php", "del2.php");
?>
Jetzt kann del2.php mit dem Inhalt
<?php
function deltree($dir, $root = 1) {
if ($root and ! preg_match('=/$=', $dir)) $dir .= '/';
$handle = @opendir($dir);
while ($file = @readdir ($handle)) {
if ($file == '.' or $file == '..') continue;
elseif(is_dir($dir . $file)) {
deltree($dir . $file . '/', 0);
@rmdir($dir . $file);
}
else @unlink($dir . $file);
}
@closedir($handle);
if ($root) return @rmdir($dir) ? true : false;
}
if (deltree('test')) echo "erfolgreich gelöscht";
else echo "Fehler";
?>
auch alle Unterverzeichnisse löschen.
Hi,
schonmal Danke für die Info.
Scheinbar stehe ich auf dem Schlauch, oder meine minimales PHP Wissen kommt jetzt durch.
if (deltree('test')) echo "erfolgreich gelöscht";
Muss ich hier das Test noch durch den Verzeichnis Namen ersetzen ?
Oder löscht er alles incl. des Verz. in dem die Datei aufgerufen wird incl. Unterverz. ? (Das wäre perfekt)
cu Holger
Da muß das zu löschende Verzeichnis rein.
if (deltree('/home/www/webxxx/html/DasDirSollWech')) echo "erfolgreich gelöscht";
Der Pfad geht natürlich auch relativ.
Wenn Du eine Fehlermeldung bekommst, dann poste die mal.
Hi,
jepp das war es wohl.
Nun ist das Verz. wech ... freu
Danke !
cu Holger
DerSchorsch
18.07.02, 01:12
@Vejoun:
Vielen Dank für die Info!
Ich werds bald testen.
Wahrscheinlich muß ich dann auf die attachments verzichten, das ist mir zu viel Aufwand ...:) :(
Ich werd mal schauen, wie die "anderen" Portale und Foren das regeln. Im Zweifelsfall haben die alle root Rechte auf Ihren Webservern :D
cu
russelbangs
06.08.02, 20:40
Okay...ich muss zugeben, dass ich in PHP kein Virtuose bin ;-)Wahrscheinlich bin ich deshalb auch auf empirischem Weg zu einer bedeutend einfacheren Lösung gekommen:
Situation: Ich habe im Verzeichnis "/qwerty/dirty/" versteckte Dateien, die nicht mir, sondern "wwwrun" gehoeren. Diese Dateien habe ich mit Bitbeamer (http://www.bitbeamer.com/de/) gesehen.
1. Ich will, dass alle Dateien in diesem Verzeichnis mir gehören (schließlich zahle ich ja immer brav für meinen Webspace ;-))
a) Ich lege in CONFIXX einen FTP-User für den Ordner "qwerty" an
b) Ich lösche ihn gleich wieder
c) Nach einigen Minuten gehören wieder alle Dateien und Verzeichnisse mir
2. Ich lösche den ganzen Mist mit Bitbeamer (http://www.bitbeamer.com/de/) oder einem anderen FTP-Client.
Geniale Lösung, wäre nie darauf gekommen so etwas zu probieren. :)
Obwohl ich das eher als Bug im Confixx sehen würde. Warum sollte Confixx die Dateieigentümer ändern? Das könnte einiges in der Konfiguration versauen...
Ich habs bei mir gerade ausprobiert, allerding um bei deinem Beispiel zu bleiben, einen ftp-user auf "/dirty", da hat es nicht funktioniert. :rolleyes:
russelbangs
06.08.02, 21:51
Bug oder nicht? - Das ist hier die Frage...:confused:
Wichtig zu erwähnen, dass das Ändern der Rechte schon mal 10 Minuten in Anspruch nimmt.
Wenn ich einen FTP-User anlege, dann gehört das zugeordnete Verzeichnis ja schließlich auch nicht mir(web000), sondern dem neu angelegten User, welcher in Confixx dann "web000f1" genannt wird.
Lädt dieser Typ jetzt aber seine gesamte Pornosammlung auf meinen Webspace, finde ich das natürlich nicht so lustig und will den ganzen Mist wieder loswerden (nachdem ich alles fachmännisch gesichtet habe:D). Nun hat aber "web000" nicht das Recht, die Dateien von "web000f1" zu löschen -> die Rechte müssen wieder geändert werden. Wenn Confixx dies macht, ist das also kein Bug :p
Wenn Vejoun jetzt noch einmal die Güte hätte, auf die Rechte zu schauen(die oben genannten 10 Minuten sind um), wird er feststellen, dass der zuvor beschriebene Weg funktioniert.
Ich hatte die Güte ;)
War wohl schon etwas spät.. Hast recht, mit den Rechten. Ich nehm alles zurück.
Ich kanns leider nicht bestätigen, da ich anscheinend zwar FTP-User anlegen kann, mich aber mit den Daten nicht einloggen kann. Irgendwas will nicht. Trotz angelegter FTP-Nutzer ändern sich nicht die Rechte am Verzeichnis. Scheint ein technisches Problem mit meinem Space zu sein.
LosWebOs hat mir auch den SSH-ZUgriff "geklaut". (Ja, bezahlt ist.. :rolleyes: )
DerSchorsch
31.08.02, 19:22
Hallo,
nachdem ich zugegebenermaßen verdammt viel zu tun hatte, habe ich mich jetzt endlich wieder um das Dateienproblem kümmern können.
Ich habe es mal mit der Variante von russelbangs probiert, und es hat funktioniert!
Die Rechte der Unterverzeichnisse sind wieder alle an mich gegangen!
Vielen Dank an Euch beide für Eure Hilfe!
>>> Der Schorsch
vBulletin v4.1.11, Copyright ©2000-2012, Jelsoft Enterprises Ltd.