Mud 內的 Ftp Server

我相信很多人都用 mud 內建的 ftp server,不過因為內建的 server 其實還是有許多的問題,例如:無法使用 pasv mode,效能也不彰…之類的。不過我現在的作法並不是使用 mud 內建的 ftp server,是用 pureftpd 來作 ftp server。為什麼選用 pureftpd 呢?因為他可以不用 root 模式來跑 ftp server,且可以用自定的密碼認證模式,所以可以讓他跟 mud 連結,作到 ftp & mud 都使用同樣的密碼。接下來看看怎麼作:

  1. ftp://ftp.pureftpd.org/pub/pure-ftpd/release/ 下載最新的 pureftpd 的 source code。

  2. $ tar -xzvf pure-ftpd-xxx.tar.gz

  3. $ ./configure –with-everything –with-brokenrealpath –without-shadow
    –with–noroot –without-ascii –with-language=traditional-chinese

  4. $ make all

  5. cd src/ 把 pure-ftpd & pure-authd cp 到 ~/bin/ 下

  6. 建個 ~/bin/auth 檔內容為:其中的 5556 為在mud 內要拿來作認證的 port,你可以用 iptables 檔掉非 127.0.0.1 連線。

    #!/bin/bash
    (printf %s:%s:%s"rn" $AUTHD_ACCOUNT $AUTHD_PASSWORD $AUTHD_REMOTE_IP;sleep 0.1)|telnet localhost 5556

  7. $ ~/bin/pure-authd -s /home/wmmud/bin/ftpd.sock -r /home/wmmud/bin/auth &
    // 請把其中的目錄改成你現實的狀態,auth就是剛建的 auth 檔

  8. $ home/wmmud/bin/pure-ftpd -lextauth:/home/wmmud/bin/ftpd.sock -A
    -O CLF:/home/wmmud/bin/log -S 5560 &
    // ftpd.sock 要跟上一個同樣, 第2個 CLF:/xxx 就是你的 log
    檔想要放置的位子,5560 就是你要開放給 wizard 連接的 port

Linux 下的處理已經好了,接下來就是處理 mud 設定了:

  1. 在 config 檔新增 external_port_2 : telnet 5556 ,其中 5556 是你要讓 pure-ftpd 拿來作認證的。
  2. 改寫 /adm/obj/master.c 的 connect,讓他能接受多個 port。
    範例:http://rw.muds.net/~whatup/mud/ftp_server_master.example.c
  3. 新增 /obj/ftplogin.c
    範例:http://rw.muds.net/~whatup/mud/ftp_server_ftplogin.example.c

接下來應該就可以動了,當然你的 wizard char 要上線才能同時登入 ftp ,這樣對安全性也好多了。