ftpd.8
上传用户:lukesailor
上传日期:2007-01-04
资源大小:27k
文件大小:16k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. .TH ftpd 8 "28 Sep 1995" "Troll Tech AS" " -*- nroff -*-
  2. ."
  3. ." Written by Arnt Gulbrandsen <agulbra@troll.no> and copyright 1995-1999
  4. ." Troll Tech AS, Waldemar Thranes gate 98B, N-0175 Oslo, Norway, fax +47
  5. ." 22806380.
  6. ."
  7. ." Use, modification and distribution is allowed without limitation,
  8. ." warranty, or liability of any kind.
  9. ."
  10. ." $Id: ftpd.8,v 1.18 1999/01/02 07:32:15 agulbra Exp $
  11. ."
  12. .SH NAME
  13. ftpd - simple File Transfer Protocol server
  14. .SH SYNOPSIS
  15. .B ftpd [-c clients] [-d [-d]] [-f facility] [-m maxload] [-s] [-p first:last] [-u uid]
  16. .SH DESCRIPTION
  17. .B Ftpd
  18. is a small, simple server for the old and hairy File Transfer
  19. Protocol, designed to use less resources than older servers, be
  20. smaller, and to never execute any external program.
  21. .PP
  22. It supports only the most-used features and commands of FTP, and
  23. leaves out everything which is deprecated, meaningless, or correlates
  24. with trouble.
  25. .SH OPTIONS
  26. .TP
  27. .B -c clients
  28. Allow a maximum of 
  29. .I clients
  30. to be connected.
  31. .I clients
  32. must be at least 1, and if you combine it with
  33. .B -p
  34. it will be forced down to half the number of ports specified by
  35. .B -p.
  36. If more than
  37. .I clients
  38. are connected, new clients are rejected at once, even clients wishing
  39. to upload, or to log in as normal users.  Therefore, it is advisable
  40. to use
  41. .B -m
  42. as primary overload protection.  The default is infinity.
  43. .TP
  44. .B -d
  45. turns on debug logging.  You can also turn this on by sending SIGUSR1
  46. to the ftpd while it's running.  Every command is logged at the
  47. LOG_DEBUG level, except that the argument to PASS is changed to
  48. "<password>".  If you repeat
  49. .B -d 
  50. (or SIGUSR1), responses too are logged.  SIGUSR2 negates
  51. .BR "" SIGUSR1/ -d .
  52. .TP
  53. .B -f facility
  54. makes ftpd use
  55. .I facility
  56. for all
  57. .BR syslog (3)
  58. messages.
  59. .I facility
  60. defaults to local2.  The facility names are normally listed in
  61. .IR /usr/include/syslog.h " or " /usr/include/sys/syslog.h .
  62. Note that if
  63. .B -f
  64. is not the first option on the command line, a couple of messages may
  65. be logged to local2 before the
  66. .B -f
  67. option is parsed.
  68. .TP
  69. .B -m load
  70. Do not allow anonymous users to download files if the load is above
  71. .I load
  72. when the user connects.  Uploads and file listings are still allowed,
  73. as are downloads by real users.  The user is not told about this until
  74. he/she tries to download a file.
  75. .TP
  76. .B -p first:last
  77. Use only ports in the range
  78. .IR first
  79. to
  80. .I last
  81. inclusive for passive-mode downloads.  This means that clients will
  82. not try to open connections to TCP ports outside the range
  83. .IR first - last ,
  84. which makes troll-ftpd more compatible with packet filters.  Note that
  85. the maximum number of clients (specified with
  86. .BR -c )
  87. is forced down to
  88. .IR "" ( last +1- first )/2
  89. if it is greater, as the default is.  (The syntax for the port range
  90. is, conveniently, the same as that of
  91. .BR ipfwadm (8)).
  92. .TP
  93. .B -s
  94. Don't allow anonymous users to retrieve files owned by "ftp"
  95. (generally, files uploaded by other anonymous users).
  96. .TP
  97. .B -u uid
  98. Do not allow uids below
  99. .I uid
  100. to log in (typically, low-numbered
  101. .IR uid s
  102. are used for administrative accounts).
  103. .B "-u 100"
  104. is sufficient to deny access to all administrative accounts on many
  105. linux boxes, where 99 is the last administrative account.  Anonymous
  106. FTP is allowed even if the uid of the ftp user is smaller than
  107. .IR uid .
  108. .B "-u 1"
  109. denies access only to root accounts.  The default is to allow FTP
  110. access to all accounts.
  111. .SH AUTHENTICATION
  112. Some of the complexities of older servers are left out.
  113. .PP
  114. Normal users are authenticated using USER, PASS and
  115. .I /etc/shells
  116. only.  In particular,
  117. .I /etc/ftpusers
  118. is
  119. .I not
  120. consulted, since I think the name is misleading.
  121. .PP
  122. Anonymous users are authenticated in any of three ways:
  123. .PP
  124. 1. The user logs in as "ftp" or "anonymous" and there is an
  125. account called "ftp" with an existing home directory.  This server
  126. does not ask anonymous users for an email address or other password.
  127. .PP
  128. 2. The user connects to an IP address which resolves to the name of a
  129. directory in
  130. .I /var/adm/ftp
  131. (or a symlink in that directory to a real directory), and there is an
  132. account called "ftp" (which does not need to have a valid home
  133. directory).  See
  134. .B Virtual Servers
  135. below.
  136. .PP
  137. 3. The user performs a CWD, PASV or PORT command without being
  138. authenticated by either of the previous methods, and there is an
  139. account called "ftp" with an existing home directory.  This allows
  140. anonymous users to log in automatically, by simply changing directory,
  141. up- or downloading a file.
  142. .PP
  143. .B Ftpd
  144. does a 
  145. .BR chroot (2)
  146. to the relevant base directory when an anonymous user logs in.
  147. .PP
  148. Note that
  149. .B ftpd
  150. allows remote users to log in as root if the password is known and -u
  151. not used.
  152. .SH "UNUSUAL FEATURES"
  153. The internal
  154. .B ls
  155. (see below) uses two files,
  156. .I /var/adm/ftp/users
  157. and
  158. .IR /var/adm/ftp/groups ,
  159. to look up file owner and group names quickly.  These files are
  160. written by
  161. .B mkusers
  162. which is hopefully run nightly by
  163. .BR cron (8).
  164. .PP
  165. .B Ftpd
  166. never switches uid and euid, it uses
  167. .BR setfsuid (2)
  168. instead.  The main reason is that uid switching has been exploited in
  169. several breakins, but the sheer ugliness of uid switching counts too.
  170. .B Ftpd
  171. only calls
  172. .BR setfsuid (2)
  173. once, at login.
  174. .PP
  175. As noted above, this
  176. .B ftpd
  177. omits several features that are required by the RFC or might be
  178. considered useful at first.  Here is a list of the most important
  179. omissions.
  180. .PP
  181. ASCII mode transfer is omitted, because it's useful so seldom and
  182. trips careless users so often.  If the client tries to download
  183. a file in ASCII mode,
  184. .B ftpd
  185. prints a warning at the start of the download.
  186. .PP
  187. STRU and MODE are not supported.  If a client tries to set a structure
  188. other than file (the default) or a MODE other than ASCII, L8 or I
  189. .B ftpd
  190. refuses to play.
  191. .PP
  192. On-the-fly tar is not supported, for several reasons.  I feel that
  193. users who want to get many files should use a special FTP client such
  194. as "mirror," which also supports incremental fetch. I don't want to
  195. either add several hundred lines of code to create tar files or
  196. execute an external tar.  Finally, on-the-fly tar distorts log files.
  197. .PP
  198. On-the-fly compression is left out too.  Most files on an FTP site are
  199. compressed already, and if a file isn't, there presumably is a reason
  200. why.  (As for decompression: Don't FTP users waste bandwidth enough
  201. without help from on-the-fly decompression?)
  202. .SH "ANONYMOUS FTP"
  203. This server leaves out some of the commands and features that have
  204. been used to subvert anonymous FTP servers in the past, but still you
  205. have to be a little bit careful in order to support anonymous FTP
  206. without risk to the rest of your files.
  207. .PP
  208. Make 
  209. .I ~ftp
  210. and all files and directories below this directory owned by some user
  211. other than "ftp," and only the
  212. .I .../incoming
  213. directory/directories writable by "ftp."  It is probably best if all
  214. directories are writable only by a special group such as "ftpadmin"
  215. and "ftp" is not a member of this group.
  216. .PP
  217. If you do not trust the local users, put
  218. .I ~ftp
  219. on a separate partition, so local users can't hard-link unapproved
  220. files into the anonymous FTP area.
  221. .PP
  222. Use of the
  223. .B -s
  224. option is strongly suggested.  (Simply add "-s" to the end of the
  225. .B ftpd
  226. line in 
  227. .I /etc/inetd.conf
  228. to enable it.)
  229. .PP
  230. Most other FTP servers require that a number of files such as 
  231. .I ~ftp/bin/ls
  232. exist.  This server does not require that any files or directories
  233. within
  234. .I ~/ftp
  235. whatsoever exist, and I recommend that all such unnecessary files are
  236. removed (for no real reason).
  237. .PP
  238. It may be worth considering to run the anonymous FTP service as a
  239. virtual server, to get automatic logins and to firewall off the FTP
  240. address/port to which real users can log in.
  241. .SH "MAGIC FILES"
  242. The files
  243. .I <ftproot>/.banner
  244. and
  245. .I .message
  246. are magical.
  247. .P
  248. If there is a file called
  249. .I .banner
  250. in the root directory of the anonymous FTP area, or in the root
  251. directory of a virtual host, and it is shorter than 1024 bytes, it is
  252. printed upon login.  (If the client does not log in explicitly, and an
  253. implicit login is triggered by a CWD or CDUP command, the banner is
  254. not printed.  This is regrettable but hard to avoid.)
  255. .P
  256. If there is a file called
  257. .I .message
  258. in any directory and it is shorter than 1024 bytes, that file is
  259. printed whenever a user enters that directory using CWD or CDUP.
  260. .SH "VIRTUAL SERVERS"
  261. You can run several different anonymous FTP servers on one host, by
  262. giving the host several IP addresses with different DNS names.
  263. .PP
  264. Here are the steps needed to create an extra server using an IP alias
  265. on linux 2.0.35, called "ftp.example.com" on address 10.11.12.13.  on
  266. the IP alias eth0:1 (the first IP alias of eth0).
  267. .PP
  268. 1. Create an "ftp" account if you do not have one.  It it best if
  269. the account does not have a valid home directory and shell. I prefer
  270. to make
  271. .I /dev/null
  272. the ftp account's home directory and shell.
  273. .B Ftpd
  274. uses this account to set the anonymous users' uid.
  275. .PP
  276. 2. Create a directory as described in
  277. .B Anonymous FTP
  278. and make a symlink called
  279. .I /var/adm/ftp/ftp.example.com
  280. which points to this directory.
  281. .PP
  282. 3. Make sure your kernel has support for IP aliases.
  283. .PP
  284. 4. Make sure that the following commands are run at boot:
  285. .PP
  286. .in +2
  287. /sbin/ifconfig eth0:1 10.11.12.13
  288. .br
  289. /sbin/route add 10.11.12.13 dev eth0:1
  290. .PP
  291. 5. Do the DNS setup.  Add a PTR record to the 10.in-addr.arpa zone
  292. which points to
  293. .I ftp.example.com.
  294. (this must point to the same name as the symlink in step 2, but with a
  295. trailing dot) and an A record for ftp to the example.com zone file
  296. which points to 10.11.12.13.  I prefer to add a line to the host's own
  297. .I /etc/hosts
  298. file, too:
  299. .PP
  300. .ti +2
  301. 10.11.12.13 ftp.example.com
  302. .PP
  303. Then reload the zone files.  Note that it is
  304. .I not
  305. enough to use CNAME records, you must use A and PTR records as in this
  306. example, otherwise
  307. .B ftpd
  308. cannot differentiate between the different virtual servers.
  309. .PP
  310. That should be all.  If you have problems, here are some things to
  311. try.
  312. .PP
  313. First, symlink
  314. .I /var/adm/ftp/localhost
  315. to some directory and say "ftp localhost".  If that doesn't log you
  316. in, the problem is with
  317. .B ftpd.
  318. .PP
  319. If not, "ping -v 10.11.12.13" and/or "ping -v ftp.example.com" from the
  320. same host.  If this does not work, the problem is with the IP alias.
  321. .PP
  322. Next, try "ping -v 10.11.12.13" from a host on the local ethernet, and
  323. afterwards "/sbin/arp -a".  If 10.11.12.13 is listed among the ARP
  324. entries with the correct hardware address, the problem is probably
  325. with the IP alias.  If 1.2.3.4 is listed, but has hardware address
  326. 0:0:0:0:0:0, then proxy-ARP isn't working.
  327. .PP
  328. If none of that helps, I'm stumped.  Good luck.
  329. .SH FILES
  330. .I /etc/passwd
  331. is used via libc, to get the uid and home directory of normal users,
  332. the uid and home directory of "ftp" for normal anonymous ftp, and
  333. just the uid of "ftp" for virtual ftp hosts.
  334. .PP
  335. .I /etc/shadow
  336. is used like
  337. .I /etc/passwd
  338. if shadow support is enabled.
  339. .PP
  340. .I /etc/group
  341. is used via libc, to get the group membership of normal users.
  342. .PP
  343. .I /proc/net/tcp
  344. is used to count existing FTP connections, if the
  345. .B -c
  346. or
  347. .B -p
  348. options are used
  349. .PP
  350. .I /var/adm/ftp/users
  351. and
  352. .I /var/adm/ftp/groups
  353. are used to list the names of users and groups by the LIST command,
  354. and are updated by
  355. .BR mkusers (8).
  356. "ls -l" will tell you that these file are enormous, but actually
  357. they are mostly unallocated space.  Use "ls -s" to find the true
  358. size of the files (in kbytes).
  359. .PP
  360. .I /var/adm/ftp/[hostname]
  361. is the base directory for the [hostname] virtual ftp server, or a
  362. symbolic link to its base directory.
  363. .B Ftpd
  364. does a
  365. .BR chroot (2)
  366. into this directory when a user logs in to [hostname], thus symlinks
  367. outside this directory will not work.
  368. .PP
  369. .I ~ftp
  370. is the base directory for "normal" anonymous FTP.
  371. .B Ftpd
  372. does a
  373. .BR chroot (2)
  374. into this directory when an anonymous user logs in, thus symlinks
  375. outside this directory will not work.
  376. .SH LS
  377. The behaviour of LIST and NLST is a tricky issue.  Few servers send
  378. RFC-compliant responses to LIST, and some clients depend on
  379. non-compliant responses.
  380. .PP
  381. This server uses 
  382. .BR glob (3)
  383. to do filename globbing.
  384. .PP
  385. The response to NLST is by default similar to that of
  386. .BR ls (1),
  387. and
  388. that to LIST is by default similar to that of
  389. .B "ls -l"
  390. or
  391. .B "ls -lg"
  392. on most Unix systems, except that the "total" count is meaningless.
  393. Only regular files, directories and symlinks are shown.  Only a few of
  394. the many
  395. .B ls
  396. options are supported:
  397. .TP
  398. .B -1
  399. Undoes
  400. .BR -l " and " -C .
  401. .TP
  402. .B -a
  403. lists even files/directories whose names begin with ".".
  404. .TP
  405. .B -C
  406. lists files in as many colums as will fit on the screen.  Undoes
  407. .BR -1 " and " -l .
  408. .TP
  409. .B -d
  410. lists argument directories' names rather their contents.
  411. .TP
  412. .B -F
  413. appends '*' to executable regular files, '@' to symlinks and '/' to
  414. directories.
  415. .TP
  416. .B -l
  417. shows various details about the file, including file group.  See
  418. .BR ls (1)
  419. for details.  Undoes
  420. .BR -1 " and " -C .
  421. .TP
  422. .B -r
  423. reverses the sorting order (modifies
  424. .BR -S " and " -t " and the default alphabetical ordering)."
  425. .TP
  426. .B -R
  427. recursively descends into subdirectories of the argument directories.
  428. .TP
  429. .B -S
  430. Sorts by file size instead of by name.  Undoes
  431. .BR -t .
  432. .TP
  433. .B -t
  434. Sorts by file modification time instead of by name.  Undoes
  435. .BR -S .
  436. .SH PROTOCOL
  437. Here are the FTP commands supported by this server.
  438. .TP
  439. .B ABOR
  440. Abort the file transfer.  Incompletely supported.
  441. .TP
  442. .B CDUP
  443. Change to the parent directory.
  444. .TP
  445. .B CWD
  446. Change directory.
  447. .TP
  448. .B DELE
  449. Delete one or more files.  This is not available to anonymous users.
  450. Only one argument is allowed, but that argument may contain wildcards.
  451. .B Ftpd
  452. returns success if at least one file is successfully deleted.
  453. .TP
  454. .B LIST
  455. Transfer a verbose file/directory listing via a data connection.
  456. .TP
  457. .B MDTM
  458. Return the modification time of the indicated file in YYYYMMDDHHMMSS
  459. format.
  460. .TP
  461. .B MODE
  462. Some values are accepted, all values are disregarded.  This server
  463. always uses 8-bit binary for transfers and ASCII for directory
  464. listings, on the theory that ASCII-mode transfers are more often
  465. mistakes than intentional.
  466. .TP
  467. .B NLST
  468. Transfer a simple file listing via a data connection.
  469. .TP
  470. .B NOOP
  471. Do nothing, but the connection timeout counter is reset.
  472. .TP
  473. .B PASS
  474. Specify password.  Ignored once the user has logged in.
  475. .TP
  476. .B PASV
  477. Specify and open data connection; client does active open.
  478. .TP
  479. .B PORT
  480. Specify and open data connection; server does active open.
  481. .TP
  482. .B PWD
  483. Print the current directory.
  484. .TP
  485. .B QUIT
  486. Close the connection.
  487. .TP
  488. .B RETR
  489. Transmit file to client.
  490. .TP
  491. .B RNFR
  492. Rename stage 1.  Set the file name to rename
  493. .TP
  494. .B RNTO
  495. Rename stage 2.  Rename f the file from
  496. .B RNFR
  497. to the argument name.
  498. .TP
  499. .B SIZE
  500. Return the size of the argument file in bytes.
  501. .TP
  502. .B SITE
  503. Only
  504. .B "SITE IDLE"
  505. is accepted.  The maximum idle period is 7200 seconds.
  506. .TP
  507. .B STOR
  508. Receive file from client.
  509. .TP
  510. .B STRU
  511. As for MODE.
  512. .TP
  513. .B TYPE
  514. As for MODE.
  515. .TP
  516. .B USER
  517. Specify user name.  Ignored once the user has logged in.
  518. .PP
  519. The rest of the commands given in the FTP RFC or added in other
  520. servers are left out in order to keep the server simple, bug-free and
  521. secure.
  522. .PP
  523. This 
  524. .B ftpd
  525. does not support the STAT command during data transfers.  ABOR
  526. requests during data transfers appear not to work.
  527. .SH BUGS
  528. ABOR doesn't work.
  529. .SH "HOME PAGE"
  530. http://www.troll.no/freebies/ftpd.html
  531. .SH "NEW VERSIONS"
  532. Send a message containing just
  533. .B subscribe
  534. in the subject or body to
  535. .B ftpd-announce-request@troll.no
  536. to be added to the announcement
  537. mailing list.
  538. .SH "AUTHOR AND LICENCE"
  539. Written by Arnt Gulbrandsen <agulbra@troll.no> and copyright 1995-1999
  540. Troll Tech AS, Waldemar Thranes gate 98B, N-0175 Oslo, Norway, fax +47
  541. 22806380.
  542. .PP
  543. Use, modification and distribution is allowed without limitation,
  544. warranty, or liability of any kind.
  545. .PP
  546. Janos Farkas, cmj@localnet.com, August Fullford and Ximenes Zalteca
  547. (and probably others that I've forgotten - write me and I'll add you)
  548. have made substantial contributions.
  549. .SH SEE ALSO
  550. .BR ftp "(1), " ncftp "(1), " mkusers "(8), " mrtginfo "(8), "
  551. .BR "RFC 959" ", " "RFC 2228" " and " "RFC 2428"