praktikant2010
Goto Top

Ordnerberechtigungen auslesen mit PHP übers Netzwerk

Hallo liebes Forum

Ich bin Praktikant bei einer Softwarefirma, wo ich die Aufgabe bekommen hab die Ordnerberechtigungen auszulesen.
Ich hab es mit einigen Programmen versucht die ich im Internet gefunden hab, aber diese waren nicht das richtige, oder Sie waren kostenpflichtig.

Nun soll ich das Problem mit PHP lösen.
Zum arbeiten wurde mir ein virtueller Windows 2008 Server und ein virtueller PC mit Windows 7 bereitgestellt.
Zur Ansicht und Testzwecken benutze ich Xampp.

Mich mit dem Server zu verbinden hab ich hin bekommen, und im Internet steht, dass ich mit >>fileperms<< die Berechtgungen auslesen kann.
Nun habe ich dieses versucht, aber er gibt mit ein Fehler in Zeile 6 aus.
das Ergebnis bei einem Fehler ist "False" oder "0".
Trotz Fehlermeldung gibt er mir die "0" in der nächsten zeile aus.

Hier mal mein bisheriger Quellcode:

<?php

$loc=new COM("WbemScripting.SWbemLocator");
$wmi=$loc->ConnectServer("w2k8r2-64-fs1","root/cimv2","Anmeldenamen","Passwort");

$rechte = fileperms("../schnelltest.*");
echo sprintf("%o",$rechte);

?>

Hier die Fehlermeldung:

Warning: fileperms() [function.fileperms]: stat failed for ../schnelltest.* in C:\Xampp\xampp\htdocs\test.php on line 6


Ich habe auch was von QML erfahren, dass ich mich daran halten soll, welches aber wohl eingeschränkt sei (einige Befehle funktionieren da nicht).
Da ich von QML zum ersten mal gehört hab, hab ich davon echt keine Ahnung.

Ich hoffe ihr könnt mir weiter helfen

Vielen Dank schonmal im Vorraus
Euer Praktikant2010

Content-Key: 153684

Url: https://administrator.de/contentid/153684

Printed on: April 24, 2024 at 14:04 o'clock

Member: laster
laster Oct 25, 2010 at 07:50:54 (UTC)
Goto Top
Hallo Praktikant,

keine Ahnung wie das unter PHP geht.
Du kannst aber schon mal auf CMD-Ebene testen, ob Du die Infos bekommst (Berechtigung...). Dazu kannst Du das Programm RMTSHARE.EXE verwenden.
vG
LS
Member: laster
laster Oct 25, 2010 at 07:52:23 (UTC)
Goto Top
Sorry,

RMTSHARE.EXE liefert Rechte auf Freigabeebene, Du suchts auf NTFS-Ebene - also vergiss meinen Beitrag.
vG
LS
Member: Orlean
Orlean Oct 25, 2010 at 09:11:12 (UTC)
Goto Top
Hallo Praktikant2010,

Codetags sind was tolles:


<?php

 $loc=new COM("WbemScripting.SWbemLocator");        
 $wmi=$loc->ConnectServer("w2k8r2-64-fs1","root/cimv2","Anmeldenamen","Passwort");  
 
 $rechte = fileperms("../schnelltest.*");  
 echo sprintf("%o",$rechte);  

?>


Hab zwar nicht wirklich Ahnung von PHP ;), aber wenn ich deinen Quellcode richtig verstehe, versuchst du die Dateirechte aller Dateien die mit schnelltest. beginnen in eine Variable zu schreiben? [schnelltest.*]

Wenn ich das fileperms - Manual richtig interpretiere, funktioniert fileperms nur mit einer Datei, jedoch nicht mit Wildcards. Hast du dahingehend schon mal probiert eine Datei direkt zu prüfen?

Mal davon abgesehen, das du mit fileperms nur Dateirechte erhältst, jedoch keine Ordnerrechte.

Edit:
<code type=php">
$rechte = fileperms("../schnelltest.*");


Eventuell hier auch mal versuchen einen festen Pfad zu verwenden, ich bin mir nicht sicher, ob es in Verbindung mit NTFS, eine solche Pfadangabe korrekt ist.

Edit2:
Ich bin mir gerade nicht sicher, wie genau der Zugriff auf den Server stattfindet per ConnectServer, damit fileperms funktioniert muss die entsprechende Datei über das Dateisystem des Servers zur Verfügung stehen, es darf sich hierbei nicht um einen Remotezugriff handeln, siehe verlinktes fileperms Manual.

Gruß Orlean
Member: Praktikant2010
Praktikant2010 Oct 25, 2010 at 10:49:53 (UTC)
Goto Top
danke für die schnellen Antworten
habe noch weiter im Internet nachgeguckt und bin nun auf diesen Lösungsansatz gestoßen

<?php

$loc=new COM("WbemScripting.SWbemLocator");
$wmi=$loc->ConnectServer("W2K8R2-64-FS1","root/cimv2","Anmeldenamen","Passwort");

$OSs = $wmi->ExecQuery("SELECT * FROM win32_LogicalFileSecuritySetting WHERE ComputerName 'w2k8r2-64-fs1' AND Path 'C:\\schnelltest'");


foreach ($OSs as $mp)
{
//echo " win32_LogicalFileSecuritySetting for file C:\schnelltest";
echo " Controlflags: " . $mp->controlFlags . "<br>";
echo " Description: " . $mp->Description . "<br>";
echo " Ownerpermissions: " . $mp->Ownerpermissions . "<br>";
echo " Path: " . $mp->Path . "<br>";
echo " SettingID: " . $mp-> SettingID . "<br>";
}

?>

Der Quelltext ist von einem VBScript abgekupfert und umgebastelt zu php, nur besteht nun das Problem, dass er nicht in die foreach-Schleife rein gehen will (getestet mit nem echo vor und in der Schleife)
Soweit ich nun weiss besteht das Problem darin, dass er nicht mit dem Format der ACL Tabelle klar kommt.
Wenn ich $OSs angezeigt haben will kommt folgende Meldung.

Fehlermeldung:
Catchable fatal error: Object of class variant could not be converted to string in C:\Xampp\xampp\htdocs\test.php on line 9

Ich würde mich sehr freuen, wenn mir da einer weiterhelfen kann
Praktikant2010