A : Varför
skulle man vilja skapa egna skript som kan arbeta tillsammsans med RaidenFTPD?
Eftersom det nyligen introducerades möjligheten att bestämma VAD
RaidenFTPD skall göra via ask://.
Man kan nu hindra användare från att logga in, hindra skapande
av kataloger/filer
eller hindra någon från att ladda upp filer.
[DEL
1 : Fråga externa program om tillstånd att göra någonting]
01. Som första
steg välj ditt favorit programmerings språk, i detta exempel
används PHP.
02. Skriv ditt eget skript/program och gör det redo
03. Öppna din servers *.ftpd fil
04. Hitta raden OnNewDir= i [FTPD] sektionen.
*. notera att det endast är följande händelser spm stödjer
ask:// är följande
- onUserLogin :
utförs före login proceduren genomförs
-
onFilePreUpload : utförs före användaren får tillåtelse
att ladda upp en fil
-
onNewDir : utförs före användaren skapar en katalog
-
onFilePreDelete : utförs precis före användaren tar bort
en fil
-
onFileDeleted: utförs efter att användaren tagit bort en
fil
* genom
att använda ask:// här ger dig möjligheten att visa ett
meddelande för användaren
-
onDelDir : utförs före användaren tar bort en katalog
-
onPreCwd : utförs före användaren byter katalog
-
onFileUploaded : utförs efter att användaren laddat upp en fil
* första
raden i filen kommer att ignoreras
-
onZipUploaded : utförs efter att en .zip fil laddats upp av användaren
* första
raden i filen kommer att ignoreras
05. i
detta exemplet har vi installerat php filerna i katalogen c:\php-bin och
skriptet heter askdir.php
06. i din *.ftpd fil hitta och ändra onNewDir=till onNewDir=ask://c:\php-bin\php.exe
askdir.php %@ %G
07. notera att vårt skript askdir.php skall finnas i katalogen c:\php-bin
08. notera också att variabeln %@ (GCID) är ny från och
med RaidenFTPD
v2.1 build 983+
09. notera att du måste använde minst RaidenFTPD v2.2 build 299+
annars kommer inte ask:// att fungera
10. notera att variabeln %@ *MÅSTE* användas för alla
ask/reply kommando
11. notera att variabeln %G ger den kompletta fysiska sökvägen,
den är inget måste, vi använder den i vårt exempel
12. när skriptet är klart *MÅSTE* du skriva en output
fil i katalogen c:\Program Files\RaidenFTPD\Output\ såhär ask-onNewDir.[GCID]
12. om GCID(%@)=a45848, händelse=onNewDir, måste outputfilen
heta c:\Program Files\RaidenFTPD\Output\ask-onNewDir.a45848
* för andra händelser kan det se ut så
här ask-onFilePreUpload.a45848 eller ask-onUserLogin.a45848 ...
13. output filen ser ut enligt följande riktlinjer
* första reden skall bara innehålla ett
tecken, antingen 0 eller 1. 0 ger ett nekande svar till kommandot, 1
betyder ett jakandee svar till kommandot.
* från andra raden till slutet av filen kan du returnera ett
meddelande till ftp användaren, kan vara flera rader
* varje rad bör inte överstiga 80 tecken
* du måste använda "\n" som ny rad tecken, använd
inte "\r" eller "\n\r"
* ett exempel på ett lyckat svar kan du se i "sample/ok.txt"
i exempelpaketet som du kan ladda ner lite längre ner på sidan
* ett exempel på ett misslyckat svar kan du se i "sample/fail.txt"
i samma paket
14.
servern kommer inte att rensa upp i output katalogen, det måste du
göra själv
för
att ladda ner fler exempel på ask/reply, klicka här
[DEL
2 : Externa program kan säga åt serven att utföra fler
kommandon]
01. följ
reglerna enligt del 1
02. i output filen som du skapade i del 1 är första raden ett
jakande eller nekande svar på kommandot, från andra raden kan
du hänvisa till andra kommandon...
för
att utföra ett kommando med den inloggade användarens rättigheter
skriver du in följande rad (inte på första raden)
#command<ny
rad>
till
exempel:
#site
undupe filename-a<ny
rad>
notera
att <ny rad> är tecknet \n, det syns inte i en vanlig text
editor.
notera:
inga fler händelser kommer att triggas om du sänder några
kommando på detta sätt, till exempel om du skickar #CWD
/xxx kommer inte onPreCWD händelse att triggas.
om
du vill utföra ett kommando med root rättigheter använder
du följande format
#sudo
kommando
till
exempel:
#sudo
site give john 1000
notera
att du inte kan använda sudo för att ändra en användares
nivå
That's
ALL
|