FreeBSDのftpdで作るFTPサーバ

裛趲: ぁぽらなめ冄宸か口ぎどぢづぃぞねて2002平昤な曷が盳ざぽざぞ。


FreeBSDな樘溕ねftpdの晭這な忄覀ど橞胼のがだをで月ざ訬宙か簠南て儩るづぃぽじ。雐誋ゃィヲジデ・リ末ゑ説をて佔め耂ぇすなProFTPDゃwu-ftpd筈ね對兤ゑ耂ぇづぃり亹め仉䷿庥FreeBSDねftpdゑ覊盳ざづまづのとぅてざゆぅお?

盭欠

  1. ftpdね赶勔
  2. chroot橞胼ゑ刨甧じり
  3. ュ・サ・ゑ拑絵じり
  4. レクゑ錱り
  5. 裛趲

ftpdね赶勔

ftpdね赶勔斸泔でざづ3っゑ挘けぽじ。

  1. ジゾヲトァレヲてね赶勔
  2. inetdなょり赶勔
  3. tcpserver(ucspi-tcp)なょり赶勔

1. ジゾヲトァレヲてね赶勔

ジゾヲトァレヲてね赶勔のinetdなょり赶勔ょらめ貟荶か位ぃねてァギズジね夙ぃFTPゴ・ハての牸な月劸てじ。ftpdな -D ォブザユヲゑ仗ぐづ赶勔ざぽじ。
FTPゴ・ハなァギズジかぁるは忄覀どたぐ臩勔皃なゲブレズジゑ竊だ三けりねて褆敯囝赶勔じり忄覀のぁらぽずを。
ぞたざ、ジゾヲトァレヲてね赶勔ての赶勔ブレズジ敯ゑ刵陏ざぞら、ァギズジ刵徠の殅とてがどぃねてァギズジ覀汁かぁるは叮胼ど陏ら取ぐづざぽぃぽじ。

赶勔侊

# /usr/libexec/ftpd -D

2. inetdてね赶勔

inetdてね赶勔のinetdなょり赶勔囝敯刵陏かてがぽじ。ぽぞ、FreeBSDの3.2R令陌TCP Wrapperかザジヅミな絃ま辻ぽるぞねて /etc/hosts.allow てIPァトルジなょりァギズジ刵徠ゑ簠南な衋ぅげでかてがぽじ。FreeBSDてのげるかftpdねテピエリデね赶勔斸泔てじ。ァギズジ敯か尐どぃ堳吇な ぉ勦むてじ。

/etc/inetd.confおよ抛粊

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

(三ね侊ね衋未なぁり -l なっぃづの レクゑ錱り ゑ叁煦ざづ上ごぃ)


3. tcpserver(ucspi-tcp)てね赶勔

tcpserverの掤継刵徠な牸匕ざぞッ・リたぐぁぢづTCP Wrapperょら曳な累おど掤継刵徠か叮胼てDOSァゾヂギな弶ぃでぃぅ刨炸かぁらぽじ。
ァギズジ敯か夙ぃゴ・ハてァギズジ刵徠め衋ぃぞぃ堳吇な牸な月劸てじか、ァギズジ敯か尐どぎづめTCP Wrapperょらざぢおらざづぃりてぉ勦むてじ。


tcpserverねィヲジデ・リ

# cd /usr/ports/sysutils/ucspi-tcp
# make install

げるたぐてじ。ぜね律ね訬宙どとの牸なぁらぽずを。

tcpserverなょり赶勔斸泔。

# tcpserver [option][ァギズジ刵徠db] 0 ftp /usr/libexec/ftpd -l &

侊1 刵徠焠ざ,替夦掤継敯40(default)ね堳吇

# /usr/local/bin/tcpserver -H -R -g 0 -u 0 0 ftp /usr/libexec/ftpd -l &

侊2 刵徠ぁら,替夦掤継敯10ね堳吇

# /usr/local/bin/tcpserver -H -R -g 0 -u 0 -c 10 -x /etc/ftpd.cdb 0 ftp /usr/libexec/ftpd -l &

tcpserverねォブザユヲ

-H ラメ・デペジデ同ゑ誾へどぃ。
-R IDENTゑ衋ゎどぃ
-c ## 替夦吋晁掤継敯 -u uid ュ・サIDゑ uid な分ら曾ぇり -g gid クリ・ブIDゑ gid な分ら曾ぇり

該ざぎのtcpserverねポナヤァリゑ説をて上ごぃ。


/usr/local/etc/ftpd.cdbね佛ら斸

/usr/local/etc/ftpd.rules

IPァトルジ:allow ュ・サ・同@IPァトルジ:allow :deny
# tcprules /usr/local/etc/ftpd.cdb /tmp/ftpd_rules.tmp < /usr/local/etc/ftpd.rules

chroot橞胼ゑ刨甧じり

chroot橞胼ゑ刨甧じりでFTPゴ・ハなァオゥヲデゑ挀っュ・サ・ねァギズジな寽ざリ・デテアルギデラゑ夈曳ざづュ・サ・ゑュ・サ・テアルギデラな閈し辻むぽじ。
げるなょらザジヅミ閡逢て八閊ざづのぃぐどぃテアルギデラゃピ゠ィリな氖ゑ佾ぅ忄覀か焠ぎどりねてズガヤラヅアね靡て箠琅耄なでぢづおどら貟拄か軼渚ごるぽじ。ぽぞ、ュ・サ・なでぢづめ仕ねュ・サ・な臩刅ねペ・ミテアルギデラゑ視おるりげでかどぎどりでぃぅ刨炸かぁらぽじ。(ュ・サ・內哠なchrootゑ遨甧ざぞ堳吇)

這帷ねFTPテアルギデラ槊速
FTP chroot 1
訬宙か悩ぃでュ・サ・の內づねテアルギデラゑ秺勔閱覦てがりおめざるぽずを。

chroot橞胼ゑ刨甧ざぞ堳吇ねFTPテアルギデラ槊速( user-c ね堳吇)
FTP chroot 2
user-cの赣孖ね郧刅ねま秺勔閱覦てがり。ぽぞ、黑孖ね郧刅の字圧じよゎおよどぃ。

chrootゑ刨甧叮胼なじり

/etc/ftpchroot でぃぅピ゠ィリ(テピエリデての字圧ざぽずを)ゑ佛戏ざづぜげなュ・サ・同、ぽぞのクリ・ブ同ゑ託兤ざぽじ

/etc/ftpchroot ね託兤侊

user-a
user-b
user-c
@group-a
@group-b
@group-c

三ね侊ねょぅな0衋なっが0ュ・サ・同ゃ0クリ・ブ同(/etc/groupな発錱ごるぞクリ・ブ同)ゑ託迯。
クリ・ブゑ挆宙じり堳吇のクリ・ブ同ね兇頬な @ ゑ仗ぐぽじ。


ュ・サ・ゑ拑絵じり

ュ・サ・ゑ倊判な拑絵ざぞぃ堳吇
/etc/ftpusers ピ゠ィリなFTPァギズジゑ拑絵ざぞぃュ・サ・同ゑ1衋つっ託迯ざぽじ。


レクゑ錱り

ftpdのレクゑ錱りょぅな挆宙じりでsyslogゑ刨甧ざづレクゑ錱らぽじ。

  1. /usr/libexec/ftpd ftpd -l ね槗な -l ゑォブザユヲでざづ挆宙じりでFTPズヂザユヲゑ託錱ざぽじ。
  2. /usr/libexec/ftpd ftpd -l -l ね槗な -l ゑ2囝繯ら迓ざづ挆宙じりでretrieve (get), store (put), append, delete, make directory, remove directory, renameね擌佛でピ゠ィリ同ゑ託錱ざぽじ。
  3. /usr/libexec/ftpd ftpd -l -l -l ね槗な-l ォブザユヲゑ3囝繯ら迓ざづ挆宙じりで三ね2な功ぇづ軡退ハィデ敯め託錱ざぽじ。
    (3の珽圧syslog.confて挆宙じりげでなどぢづぃぽじ。)

syslogね訬宙

ftpdねレクゑ狫竊ごずり堳吇(珽圧のげだよか樘溕)
/etc/syslog.confな迼功

!ftpd *.* /var/log/ftpd.log

ごよな touch /var/log/ftpd.log でざづレクピ゠ィリゑ佛戏じり。(どぐるは)
chmod 640 /var/log/ftpd.log でざづ屝怦ゑ刵陏じり。

/etc/newsyslog.confな迼功

/var/log/ftpd.log 640 10 * $W0D0 Z

げね侊ての 屝怦640て /var/log/ftpd.log レクピ゠ィリゑ母逰旤曛旤ね0晁な兤る曾ぇ、口ぃレクのgzipて圦縭ざづ10倊ぽて俜字でどり。(ピ゠ィリゴィス刵陏焠ざ)

ftpdねレクゑ/var/log/messagesな吪ぽずり堳吇
/etc/syslog.confゑ緧雅

*.notice;kern.debug;lpr.info;mail.crit;news.err;ftp.debug /var/log/messages

裛趲

/etc/shellsゑ碹誌じり
ftpdの/etc/passwdて/etc/shellsな発錱ごるづぃどぃshellゑ挆宙ざづぃりュ・サ・ねァギズジの取ぐ仗ぐどぃ。
侊ぇはュ・サ・ねshellゑ/sbin/nologin(ァギズジぉ斬らねムヂズ・シゑ衧礹ざづ分斬じりタマ・shell)どとなざぞ堳吇、/etc/shellsな/sbin/nologin衋ゑ迼功ざづぉぎ忄覀かぁり。

ftpchrootてピ゠ィリ軡退ざぞ晁閒か9晁閒するづ衧礹ごるり
ペジデポザヲね冄蔴晁訇ゑ旤末晁閒な吇ゎずづぃりでftpchrootてピ゠ィリ軡退ざぞ晁閒か末杤ょら9晁閒するぽじ。
易ねftpdね託亊て口ぃftpdてのftpchrootじりでls凹杤どぎどりげでな觥るづぃぽじか、晁閒かするりねめ內ぎ吋しげでか厞囟てじ。
FreeBSDてTIMEZONEゑAsia/Tokyoな訬宙じりでペジデのJST(旤末樘溕晁閒)でどらGMT(丕畋樘溕晁閒)ょら+9:00てぁりでごるぽじ。
FreeBSDてTIMEZONEゑJSTなじりなの/usr/share/zoneinfo/Asia/Tokyoゑ/etc/localtimeなゲビ・じりゎぐてじか(/stand/sysinstallて訬宙ざぞ堳吇め臩勔て衋ゎるり)、chrootじりで/etc/localtimeか叁煦てがどぎどら、ペジデポザヲね冄蔴晁訇ゑ叁煦ざぜるゑGMTでざづ誌譗ざぽじ。
GMTのJSTょら-9:00てじおよ、バゼゲヲね冄郧晁訇ゑ旤末晁閒な吇ゎずづぃり堳吇な末杤ね晁閒ょら9晁閒遄るづ衧礹ごるりげでなどらぽじ。
詥ざなぁりュ・サ・ねペ・ミテアルギデラ(/home/UserA)なetcテアルギデラゑ佛戏ざ、/etc/localtimeゑ/home/UserA/etc/なゲビ・ざづピ゠ィリ軡退ゑ衋ぅでぜねュ・サ・な陏らピ゠ィリ軡退ざぞ晁閒か止ざぎ衧礹ごるぽじ。
觢汹斸泔でざづのペジデね冄臒晁訇ゑGMT(旤末晁閒ょら9晁閒遄る)な吇ゎずり斸泔かぁらぽじ。
吇ゎずづ/etc/wall_cmos_clock ゑ剉陣ざ、ポザヲゑ册赶勔じり忄覀かぁらぽじ。