PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Per PHP Script neuen FTP Account einrichten (Windows)


winter
2003-10-02, 22:48:54
Nabn't, vielleicht könnt ihr mir bei meinem problem helfen. Ich möchte einen Webspacedienst auf einem Server einrichten. MySQL und verzeichnisserstellung sind kein Problem, aber der FTP macht mir zu schaffen. Ich habe keine Zeit Manuell FTP Accounts für jeden einzelnen User einzurichten, außerdem würde ich die Passwörter der Webmaster kennen, was mir und ihnen nicht gefällt. Unter Linux wäre das ganze vielleicht noch mit dem Webmin zu lösen, aber der Server läuft auf windows 2003 (Apache 2 Windows, PHP5).

Könnt ihr mir ein PHPscript nennen, welches einen FTP Account erstellen kann, wenn ja, dann noch bitte gleich den FTP-Server dazu, mit welchem es funktioniert ;)

Birdman
2003-10-03, 10:10:28
Na ja, kommt halt stark drauf an was für eine FTP-Server Software du einsetzt.
Wenn es z.B. das Microsoft Teil ist müsstest du genug Permissions haben und Systemuser anlegen zu können (Administrator?), bei anderen Produkten (z.B. Serv-U) musst du nur in ein TextFile reinschreiben und das wars. (wobei man hier sogar oftmals schon entsprechende WebAdmin Tools runterladen kann)

mf_2
2003-10-22, 21:46:16
Hallo, ich hab das gleiche Problem wie Winter. Ist es evtl. möglich, mit einem PHP-Script auf einem FileZilla 0.8.7 FTP-Accounts zu erstellen?

Matthias2x
2003-10-25, 10:31:04
Ich setze bei mir zeitweise den BulletProof FTP-Server (http://www.bpftpserver.com/) ein. Der legt die Userdaten in einer user.ini ab. Das Datenformat sieht etwa so aus:

[newuser]
Login=newuser
Pass=test
Home-Ip=-= All IP Homes =-
RelativePath=1
TimeOut=600
MaxConPerIp=1
MaxUsers=0
RatioMethod=0
RatioUp=1
RatioDown=1
RatioCredit=0
MaxSpeedRcv=512
MaxSpeedSnd=512
QuotaCurrent=0
QuotaMax=0
Dir0=c:\apache\htdocs\newuser\
Attr0=R----L--
Stat_Login=0
Stat_LastLogin=25.10.2003
Stat_LastIP=Unknown
Stat_KBUp=0
Stat_KBDown=0
Stat_FilesUp=0
Stat_FilesDown=0
Stat_FailedUp=0
Stat_FailedDown=0

also ich denke das ist, zumindest für dieses Programm , problemlos per PHP möglich neue User mit Default-Settings anzulegen. So ein Script zu schreiben und zu testen dauert vielleicht 1-2 Stunden.

mf_2
2003-10-26, 00:25:00
Ist der BulletProof-Server kostenlos, oder ist es Shareware?

mf_2
2003-10-26, 00:31:38
Habe bei FileZilla eine xml-datei gefunden, die genau das enthält, was die bulletproof user.ini auch enthält.

@Matthias2x: Danke,dein Tipp mit der uer.ini hat mich auf die richtige Fähre gebracht :)

mf_2
2003-10-26, 21:05:04
War wohl gestern schon etwas müde, wollte schreiben:

Danke, dein Tipp mit der user.ini hat mich auf die richtige Fährte gebracht.

mf_2
2003-10-26, 22:36:18
Hallo,

Also ich hab ein Problem:


Ich will mit fwrite() Inhalt in eine Datei schreiben.

Aber: Ich kann die Daten nicht einfach ans Dateiende hängen, es muss in der xml-Datei VOR ein tag "</users>". das ist fast am ende der datei,aber eben nur fast.Es kommt auch nur einmal in der xml-Datei vor. Gibt es eine Möglichkeit, den Cursor in der Datei genau vor dieses Tag zu setzen?

Matthias2x
2003-10-26, 23:31:34
schick mal die Datenstruktur des XML-Files und vorallem den Teil des PHP-Codes mit dem du den Inhalt schreibst

mf_2
2003-10-29, 10:32:21
<FileZillaServer>
<Settings>
<Item name="Serverport" type="numeric">21</Item>
<Item name="Number of Threads" type="numeric">2</Item>
<Item name="Maximum user count" type="numeric">6</Item>
<Item name="Timeout" type="numeric">60</Item>
<Item name="No Transfer Timeout" type="numeric">60</Item>
<Item name="Allow Incoming FXP" type="numeric">0</Item>
<Item name="Allow outgoing FXP" type="numeric">0</Item>
<Item name="No Strict In FXP" type="numeric">0</Item>
<Item name="No Strict Out FXP" type="numeric">0</Item>
<Item name="Login Timeout" type="numeric">60</Item>
<Item name="Show Pass in Log" type="numeric">0</Item>
<Item name="Custom PASV Enable" type="numeric">0</Item>
<Item name="Custom PASV IP" type="string">192.168.000.004</Item>
<Item name="Custom PASV min port" type="numeric">21</Item>
<Item name="Custom PASV max port" type="numeric">22</Item>
<Item name="Initial Welcome Message" type="string">Hello,

This Server runs a copy of FileZilla Server 0.8.7!
Max. 15 users.
Timeout: 60 sec.
Have Fun!

mf_2</Item>
<Item name="Admin Password" type="string">*******</Item>
<Item name="Admin IP Bindings" type="string"></Item>
<Item name="Admin IP Addresses" type="string"></Item>
<Item name="Enable logging" type="numeric">1</Item>
<Item name="Logsize limit" type="numeric">0</Item>
<Item name="Logfile type" type="numeric">1</Item>
<Item name="Logfile delete time" type="numeric">0</Item>
<Item name="Use GSS Support" type="numeric">0</Item>
<Item name="GSS Prompt for Password" type="numeric">0</Item>
<Item name="Download Speedlimit Type" type="numeric">0</Item>
<Item name="Upload Speedlimit Type" type="numeric">0</Item>
<Item name="Download Speedlimit" type="numeric">10</Item>
<Item name="Upload Speedlimit" type="numeric">10</Item>
<Item name="Buffer Size" type="numeric">4096</Item>
<Item name="Admin port" type="numeric">25000</Item>
<SpeedLimits>
<Download/>
<Upload/>
</SpeedLimits>
</Settings>
<Groups/>
<Users>
<User Name="mf">
<Option Name="Pass">8ba46f039d275920eb891f1ff645f059</Option>
<Option Name="Group"/>
<Option Name="Resolve Shortcuts">0</Option>
<Option Name="Relative">0</Option>
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Permissions>
<Permission Dir="D:\wampp2\htdocs\mf">
<Option Name="FileRead">1</Option>
<Option Name="FileWrite">1</Option>
<Option Name="FileDelete">1</Option>
<Option Name="FileAppend">1</Option>
<Option Name="DirCreate">1</Option>
<Option Name="DirDelete">1</Option>
<Option Name="DirList">1</Option>
<Option Name="DirSubdirs">1</Option>
<Option Name="IsHome">1</Option>
<Option Name="AutoCreate">0</Option>
</Permission>
</Permissions>
<SpeedLimits DlType="0" DlLimit="10" UlType="0" UlLimit="10" ServerDlLimitBypass="0" ServerUlLimitBypass="0">
<Download/>
<Upload/>
</SpeedLimits>
</User>
<User Name="testuser">
<Option Name="Pass">d96eed18098da6ab5c15dd856998e4bd</Option>
<Option Name="Group"/>
<Option Name="Resolve Shortcuts">0</Option>
<Option Name="Relative">0</Option>
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Permissions>
<Permission Dir="D:\wampp2\htdocs\testuser">
<Option Name="FileRead">1</Option>
<Option Name="FileWrite">1</Option>
<Option Name="FileDelete">1</Option>
<Option Name="FileAppend">1</Option>
<Option Name="DirCreate">1</Option>
<Option Name="DirDelete">1</Option>
<Option Name="DirList">1</Option>
<Option Name="DirSubdirs">1</Option>
<Option Name="IsHome">1</Option>
<Option Name="AutoCreate">0</Option>
</Permission>
</Permissions>
<SpeedLimits DlType="0" DlLimit="10" UlType="0" UlLimit="10" ServerDlLimitBypass="0" ServerUlLimitBypass="0">
<Download/>
<Upload/>
</SpeedLimits>
</User>

</Users>
</FileZillaServer>


-------------------------------------------------------

So, das ist jetzt mal der XML-File mit 2 Usern ( mf, testuser ).

winter
2003-10-29, 14:42:48
So, das ist zwar jetzt etwas umständlich, sollte aber funktionieren.

Zuerst fragst du die genaue dateiengröße mit Filesize ab. Von diesem wert ziehst du die bytes von
</Users> und </FileZillaServer> ab

Diesen Wert übergibst du als längenatribut an fread(). Damit kannst du die Datei bis zu diesem Punkt auslesen. Mit diesem Text überschreibst du jetzt per fopen() Atribut *w* die alte XML datei. Nun kannst du per Atribut *a* Die neuen Userdaten und danach

</Users>
</FileZillaServer>

anhängen

mf_2
2003-10-29, 16:01:44
thx

Matthias2x
2003-10-29, 16:16:25
hi leuts,
habe auch noch eine Lösung gebastelt:


<?php
$xml_file = 'ftp.xml'; // Name/Pfad zum XML-File für Filezilla

// XML-File öffnen und einlesen
$file = file($xml_file);

// Bisherige Einträge im XML-File sichern
while(list($key,$line) = each($file)){
$line = str_replace("\r\n","",$line);
$line = str_replace("\r","",$line);
$line = str_replace("\n","",$line);
if($line == '</Users>' || $line == '</FileZillaServer>'){
$line = false;
}
if($line){
$oldentrys .= $line."\n" ;
}
}

// Neuen User einfügen
$newentry = $oldentrys;
$newentry .= "<User Name=\"$wert_username\">\n";
$newentry .= "<Option Name=\"Pass\">$wert_passwort</Option>\n";
$newentry .= "<Option Name=\"Group\"/>\n";
$newentry .= "<Option Name=\"Resolve Shortcuts\">$wert_Resolve_Shortcuts</Option>\n";
$newentry .= "<Option Name=\"Relative\">$wert_Relative</Option>\n";
$newentry .= "<Option Name=\"Bypass server userlimit\">$wert_Bypass_server_userlimit</Option>\n";
$newentry .= "<Option Name=\"User Limit\">$wert_User_Limit</Option>\n";
$newentry .= "<Option Name=\"IP Limit\">$wert_IP_Limit</Option>\n";
$newentry .= "<Permissions>\n";
$newentry .= "<Permission Dir=\"$wert_Permission_Dir\">\n";
$newentry .= "<Option Name=\"FileRead\">$wert_FileRead</Option>\n";
$newentry .= "<Option Name=\"FileWrite\">$wert_FileWrite</Option>\n";
$newentry .= "<Option Name=\"FileDelete\">$wert_FileDelete</Option>\n";
$newentry .= "<Option Name=\"FileAppend\">$wert_FileAppend</Option>\n";
$newentry .= "<Option Name=\"DirCreate\">$wert_DirCreate</Option>\n";
$newentry .= "<Option Name=\"DirDelete\">$wert_DirDelete</Option>\n";
$newentry .= "<Option Name=\"DirList\">$wert_DirList</Option>\n";
$newentry .= "<Option Name=\"DirSubdirs\">$wert_DirSubdirs</Option>\n";
$newentry .= "<Option Name=\"IsHome\">$wert_IsHome</Option>\n";
$newentry .= "<Option Name=\"AutoCreate\">$wert_AutoCreate</Option>\n";
$newentry .= "</Permission>\n";
$newentry .= "</Permissions>\n";
$newentry .= "<SpeedLimits DlType=\"$wert_DlType\" DlLimit=\"$wert_DlLimit\" UlType=\"$wert_UlType\" UlLimit=\"$wert_UlLimit\" ServerDlLimitBypass=\"$wert_ServerDlLimitBypass\" ServerUlLimitBypass=\"$wert_ServerUlLimitBypass\">\n";
$newentry .= "<Download/>\n";
$newentry .= "<Upload/>\n";
$newentry .= "</SpeedLimits>\n";
$newentry .= "</User>\n";
$newentry .= "\n";
$newentry .= "</Users>\n";
$newentry .= "</FileZillaServer>\n";

// XML-File schreiben
$newfile = fopen($xml_file,'w');
if(fputs($newfile,$newentry)){
echo 'User erfolgreich eingetragen.';
} else {
echo 'Fehler, User konnte nicht angelegt werden!';
}
fclose($newfile);
?>


das funktioniert bei mir unter WinXP und PHP 4.2.3 bestens. allerdings mußt du halt noch eine eingabemaske dazu basteln und die Variablen welche mit "$wert_" beginnen deinen Wünschen anpassen...