由 jeffwu 在 10-06-2002 10:32 发表:
[原创]ProFTPD 1.2.0 安装指南(中文版)
注:
英文原文为 ProFTPD 1.2.6 源代码根目录下的 INSTALL 文件,
中文翻译原文在 http://jeffwu.51.net/proftpd/INSTALL 。
请各位兄弟们多多指教,共同进步!
ProFTPD 1.2.0 安装指南(中文版)
==============================
吴伟
1<jeffwu> [email protected] 2002.10.5
2
3
4
5\----
6
7介绍
8
9\----
10
11
12
13ProFTPD 被设计成了能在目标系统上,通过一个单一的名为'configure'的shell脚本来完
14
15成编译的配置任务.该脚本文件位于源代码树的顶层.这个由GNU autoconf 工具创建的脚本
16
17文件将会分析你的系统,创建一个'config.h'文件,使你可以清楚的编译ProFTPD。某些系
18
19统可能需要指定某些选项给'configure'或手工修改由'configure'产生的config.h文件
20
21和Makefile文件
22
23
24
25ProFTPD被设计得十分灵活,导致的编译时和运行时的额外的配置复杂性也就是必要的了。
26
27你可以基于命令行提供参数给'configure'脚本来设置编译时的选项,从而实现定制安装。
28
29特别的,可选的编译进 ProFTPD 的软件模块也可以现在这种方式。
30
31
32
33除了'configure'脚本的这些设置外,'include/options.h'文件中还包括了许多的可以很
34
35容易调整的编译时选项,可以影响ProFTPD的操作。这些选项不会被'configure'脚本所修改
36
37。每一个选项都在其自身的头文件中做了说明。这些选项几乎不需要修改,而且大部分在运行时
38
39能被proftpd.conf配置文件中的配置指令所覆盖。
40
41
42
43注意:一个RPM规格的示例文件已经包括在 contrib/dist/rpm/ 目录里了.
44
45
46
47包维护者注意:
48
49请不要去掉 ELF .comment 和 .note 部分.
50
51
52
53如果你在一个有点不太常见的(新的或旧的)系统平台上安装ProFTPD,请考虑可以记录下你
54
55的经验和大家分享。
56
57
58
59\--------
60
61系统需求
62
63\--------
64
65o ANSI/ISO C89/C90 C语言编译器, 例如:GNU gcc
66
67o GNU make, 大部分系统应该都有
68
69o ANSI C and POSIX run-time libraries
70
71o BSD sockets API
72
73o 磁盘空间: 约2.5 MB 用于解包, 6-8 MB 用于编译, 约2 MB 用于安装
74
75
76
77\--------
78
79安装指南
80
81\--------
82
83
84
850\. 计划你的安装。
86
87请在开始以前读完整个安装的所有步骤。
88
89有许多的编译定制项是你可能希望使用到的,尤其是关于用户认证的。请参考完整阅读完
90
91README.modules 文件和其他的 README.* 文件和 contrib/README.* 文件。
92
93
94
95注意,以下的模块是缺省包含了的,是不需要再明确添加了的: mod_auth, mod_core,
96
97mod_log, mod_ls, mod_site, mod_unixpw and mod_xfer.还有,如果 PAM 被
98
99检测到已经配置了的话,mod_pam 模块将会被自动包括进来。然而,有报告说某些系统
100
101依然要求明确的添加该模块。另外请注意,contrib/mod_test 模块是仅做测试的不具
102
103有任何实际的功能,请不要试图去使用它。
104
105
106
107你需要指定你系统中的共享库的搜索路径。查询你的系统和编译器的文档。通常这个操作
108
109是使用 -R 或 -rpath 选项的。在 AIX 系统上,需要特别小心的设置这个路径,请参
110
111考README.AIX。
112
113
114
115提示: 如果你的配置命令行变得长或复杂了,你可以试着把它变成为一个 sh 脚本文件,
116
117比如,叫: '.configcmd'。
118
119
120
121
122
1231\. 配置软件。
124
125运行源代码目录顶层的 GNU autoconf 'configure' 脚本文件来创建 config.h 文件和
126
127所有的 Makefiles。除了配置 ProFTPD 使其能在你的系统上进行编译之外,你还可以
128
129在这一步定制一些参数或给 ProFTPD 添加可选的特性。有许多配置选项可用。如果使用
130
131默认值的话,你只须简单的运行:
132
133
134
135$ ./configure
136
137
138
139默认下,ProFTPD的文件会被作为 'root' 用户的身份来安装,用户组属性是 /etc/group
140
141中的第一个组,gid为0,通常是 'root' 或 'wheel'。如果你希望采用不同的用户及用
142
143户组身份来安装的话,请在运行 configure 脚本前设置环境变量 install_user 和
144
145install_group。使用 Bourne-ish 风格的 shell (例如:sh, ksh, bash)的话,你可
146
147以是用以下的命令来做:
148
149
150
151$ install_user=root install_group=wheel ./configure
152
153
154
155类似的,像典型的 GNU autoconf 脚本一样,可以用这种方法设置编译系统的其他的属
156
157性,比如,设置编译器:
158
159
160
161$ CC=gcc CFLAGS='-O -g' ./configure
162
163
164
165其他的选项作为命令行参数传递给 configure 脚本。
166
167通过执行 './configure --help' 可以列出所有有效的配置参数。
168
169
170
171默认下, proftpd 和 ftpshut 安装在 /usr/local/sbin/,ftpcount 和 ftpwho 安装
172
173在/usr/local/bin/,配置文件在/usr/local/etc/,man帮助页在/usr/local/man/man?/.
174
175此外,/usr/local/var/proftpd/ 被用来存放运行时的 scoreboard 文件。参考
176
177'./configure --help' 输出中的 "Directory and file names" 一节中的参数来改变这
178
179些默认设置。 比如:把所有目录放置在 /usr/ 下而不是 /usr/local/ 下时,你可以
180
181使用以下命令:
182
183
184
185$ ./configure --prefix=/usr
186
187
188
189或者, 把配置文件放在 /etc/ 下,而把运行时的状态文件放在 /var/proftpd/下,你
190
191可以使用以下命令:
192
193
194
195$ ./configure --sysconfdir=/etc --localstatedir=/var
196
197
198
199可选的ProFTPD模块可以通过使用'--with-modules=LIST'参数包含进来,其中的'LIST'
200
201是一个由冒号隔开的列表。这只适用于那些 contrib/ 目录下的可选模块( modules/
202
203目录下的核心模块不是被强制包含了就是被默认包含了)。例如,如果你希望包括readme
204
205和LDAP两个模块的话,你可以使用命令:
206
207
208
209$ ./configure --with-modules=mod_readme:mod_ldap
210
211
212
213如果你希望使用系统的 shadow 密码文件来进行用户认证的话,你在某些系统上就需要
214
215添加上 '--enable-autoshadow' 或 '--enable-shadow'了。使用 autoshadow 的话就
216
217使 proftpd 既能使用 shadow 密码文件也能使用传统的密码文件。
218
219
220
221如果你希望使用 SQL 来进行用户认证的话,你必须指定 mod_sql 和一种 后台 SQL 模
222
223块(SQL backend module), mod_sql_mysql 或 mod_sql_postgres 。此外,后台 SQL
224
225模块(SQL backend module)必须紧跟在模块列表的后面给出,比如:
226
227'--with-modules=mod_sql:mod_sql_postgres'. 否则,编译完后,SQL认证功能是不
228
229能起作用。
230
231
232
233确信在你重新执行 configure 配置脚本前,首先执行了 'make distclean' 命令。
234
235
236
237
238
2392\. 核实正确的配置操作。
240
241观察 configure 脚本的输出。在 configure 脚本运行完后,你可以检查 config.h 文件,
242
243确信 configure 脚本没有对你的系统做任何错误的假设。
244
245
246
247
248
2493\. 编译这个软件。
250
251在源代码的顶层目录运行 'make'。在某些系统(比如:BSDI),你可能需要使用 GNU make
252
253(也经常称作 'gmake' 或 'gnumake')来代替系统缺省的 make。观察编译过程的输出,
254
255确认没有错误产生。在某些系统(特别是AIX 和 IRIX)你可能看到一些编译或连接警告。这
256
257些一般都可以不理睬。
258
259
260
261
262
2634\. 测试软件。
264
265从 ProFTPD 1.2.0 起,没有自动的回归(regression)测试了。
266
267然而,鼓励去执行你自己的 ad-hoc,手工测试。
268
269
270
271注意,你能够直接在命令行启动proftd,不过,记住,只有作为 root 运行时才能正确
272
273获得所有的功能特性。虽然如此,很多操作能够在没有 root 权限的情况下实现。通过
274
275使用命令行参数 '-c' 可以指定其他的配置文件。在配置文件中,可以改变默认的TCP
276
277端口 ftp (21) 和 ftp-data (20) 为其他的值,也可以指定一个其他的 passwd文件。
278
279既然作为守护进程不能更改它的uid,你也同样必须指定用户名和组名来匹配来启动守
280
281护进程。
282
283
284
285为了示范这些过程,一组配置文件示例给出在了 sample-configurations 目录下。
286
287
288
289% sh sample-configurations/PFTEST.install
290
291Sample test files successfully installed in /tmp/PFTEST.
292
293% ./proftpd -n -d 5 -c /tmp/PFTEST/PFTEST.conf
294
295
296
297然后,打开另一个窗口,连接到非特权端口。PFTEST.conf 使用了 2021 端口,而
298
299PFTEST.passwd 定义了一个用户名和密码都为 "proftpd" 的用户。使用传统的 Unix
300
301ftp 客户端软件连接的话,应该会得到以下的状态:
302
303
304
305% ftp -n -d
306
307ftp> open <hostname> 2021
308
309ftp> user proftpd
310
311\---> USER proftpd
312
313331 Password required for proftpd.
314
315Password: [proftpd]
316
317\---> PASS proftpd
318
319230 User proftpd logged in.
320
321ftp>
322
323
324
325提供的 PFTEST.passwd 文件是传统 Unix 格式的。你所使用的系统可能采用了不同的
326
327文件格式,这样你就需要自己创建了。此外,如果 PFTEST.install 脚本失败的话,你
328
329就不得不使用另外一种方式在 PFTEST.conf 文件中加入你的用户和用户组了。
330
331
332
333如果你遇到了任何问题,请先确定你阅读了下面的"疑难解答"和"帮助"部分。
334
335
336
337
338
3395\. 打包软件。
340
341从 ProFTPD 1.2.0 起, 除了 contrib/dist/rpm/ 目录下的RPM规格包含外不再提供其
342
343他的打包程序了。
344
345
346
347
348
3496\. 安装软件。
350
351注意:这一步已经以下的几步可能需要拥有 root 权限。
352
353在源代码树的顶层运行 'make install' 命令来进行安装,除非是已经创建了某系统下
354
355的特定的安装包(比如:RPM)。这一步将会安装ProFTPD的执行文件、man帮助页和拷贝至
356
357'sample-configurations/basic.conf'的基本配置文件。这个基本配置文件在系统中
358
359的路径默认是'/usr/local/etc/proftpd.conf',不过,也可在第一步中改成别的。
360
361
362
363如果已经创建了软件安装包,请依照安装包系统合适的过程来安装ProFTPD的包。
364
365
366
367
368
3697\. 修改 proftpd 的配置文件。
370
371如果在 proftpd.conf 中指定的用户和用户组在你的系统中不存在时,proftpd将不能
372
373运行。请根据需要编辑和修改 proftpd.conf。大多数系统用 "nobody" 组来代替
374
375"nogroup" 组。根据你运行 proftpd 的方式,要么采用超级服务器的方式( inetd 或
376
377xinetd ),要么作为一个独立服务器(standalone daemon)来运行,编辑 proftpd.conf
378
379文件,改变 ServerType 指令来匹配你的选择,不是 "ServerType inetd" 就是
380
381"ServerType standalone"。第四步 'make install' 时安装的 "basic.conf" 配置
382
383文件中默认是设置成 "standalone" 的。
384
385
386
387
388
3898\. 修改超级服务器 inetd 的配置文件。
390
391编辑 /etc/inetd.conf 文件,之后发送 -HUP 信号给 inetd 进程,使其重新读取更新
392
393的配置文件。某些系统利用其他的机制去告诉 inetd 去重新读取它的配置文件,比如:
394
395AIX采用 'refresh -s inetd'。查看你的系统文档来找到合适的命令。
396
397
398
399如果 proftpd 从 inetd运行,在 /etc/inetd.conf 中查找像下面内容的行:
400
401
402
403ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
404
405
406
407然后将其替换成:
408
409
410
411ftp stream tcp nowait root /usr/local/sbin/proftpd proftpd
412
413
414
415或者,如果你系统中安装了 tcp wrappers ,修改成的行的内容可能会像下面这样:
416
417
418
419ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/proftpd
420
421
422
423如果 proftpd 是运行在 standalone 模式,你需要注释掉 /etc/inetd.conf 中任何与
424
425ftp 相关的行,方法是在每一行的最开头插入一个 '#'。然后发送消息来使 inetd 进程
426
427重新读取 /etc/inetd.conf。
428
429
430
431如果你的系统使用 xinetd 来代替 inetd的话,要么编辑 /etc/xinetd.conf 文件,
432
433要么在 /etc/xinetd.d/ 目录中增加一个名为 proftpd 文件,内容类似如下:
434
435
436
437service ftp
438
439{
440
441flags = REUSE
442
443socket_type = stream
444
445instances = 50
446
447wait = no
448
449user = root
450
451server = /usr/sbin/proftpd
452
453bind = <the-ip-you-wish-to-bind-to>
454
455log_on_success = HOST PID
456
457log_on_failure = HOST RECORD
458
459}
460
461
462
463更多的信息可以在 FAQ、用户手册以及你系统中的 xinetd 文档中找到。
464
465
466
467
468
4699\. 修改系统启动脚本。
470
471如果作为 standalone 模式来运行的话,你可能需要编辑你系统中的启动脚本来使
472
473proftpd 在系统启动时自动运行。那些使用 SysV 类型的单个启动脚本的系统,在原
474
475代码中包括了一个 init 脚本的示例: "contrib/dist/rpm/proftpd.init.d"
476
477
478
479
480
48110\. 创建运行时状态目录。
482
483为了使 MaxClients 和 MaxClientsPerHost 指令以及 ftpwho 和 ftpcount 工具能够
484
485工作,proftpd必须要有一个目录来彼此它的记分板(scoreboard)文件。缺省使位于
486
487'/usr/local/var/proftpd/'的,不过,它可以在安装配置过程的第一步中进行修改。
488
489默认的位置还可以在运行时被 proftpd.conf 配置文件中的 "ScoreboardPath" 指令
490
491的值所覆盖。不管使用的哪个目录,它都必须在启动 proftpd 前就已经预先存在了。
492
493如果你是采用的是软件包安装方式安装的,安装脚本可能已经创建了缺省的目录了。虽
494
495然如此,如果它没有的话,你必须手工创建。这个目录没有什么特殊的权限要求,除非
496
497你希望限制 ftpwho 和 ftpcount 的运行。
498
499
500
501
502
50311\. 核实操作。
504
505一旦 proftpd 以 inetd 模式或 standalone 模式运行起来了,试着 ftp 到你的系统
506
507中以确信一切已经开始运行了。如果你遇到了问题,请查看下面的"疑难解答"和"帮助"
508
509部分。
510
511
512
513
514
51512\. 定制 proftpd 配置文件。
516
517如果你希望添加一个匿名 ftp 或另外创建一个更完善的 ftp 配置文件,请阅读更多的
518
519有关 ProFTPD 配置方面的文档:
520
521
522
523配置文件示例: sample-configurations/*.conf
524
525配置参考文档: doc/Configuration.html
526
527配置 FAQ: doc/FAQ-config.html
528
529文档: http://pdd.sourceforge.net/
530
531http://www.proftpd.org/docs/
532
533FAQ: http://pdd.sourceforge.net/faq/proftpdfaq.html
534
535
536
537注意,某些系统为匿名ftp和任何其他 chroot 目录的预备需要特定的系统特性。同样,
538
539需要清楚,对于"PersistentPasswd"、RequireValidShell"和"UseFtpUsers"这样的配
540
541置指令需要给予特别的注意。
542
543
544
545为检查新的或修改过的配置文件,可在命令行下运行'proftpd -t -c <new_conf_file>'
546
547命令。
548
549
550
551你可以在不妨碍一个正在运行的服务器的情况下,通过在另一个不同端口运行一个分离
552
553的测试服务器来测试你的配置文件中的实际功能。通过配置文件中的 "Port" 指令来指
554
555定要使用到的端口,不过,在将新配置文件应用到最终服务器时不要忘记将端口号改回
556
557来。
558
559
560
561
562
563祝您好运!
564
565
566
567
568
569
570
571\--------
572
573疑难解答
574
575\--------
576
577
578
579这个部分很不完全,请参考FAQ和其他的资源来获得更多协助。
580
581
582
583
584
585T1. 编译时的很多问题通过给出正确的选项和到编译器的搜索路径就可以很容易的解决了。
586
587然而,有些问题确实解决起来很困难。常常有问题是因为头文件或C语言的预处理宏名
588
589有冲突而产生的。少数包(packages)已经知道安装 conf.h 头文件在
590
591/usr/local/include.有时,必须要求助于查看预处理器的输出才行。尽管类似于
592
593`cc -E file.c`的命令经常可以解决,不过,还是请参考你的编译器文档,从而决定
594
595应该怎么做。
596
597
598
599一些常见的错误信息包括:
600
601
602
603o "symbol ap_signal undefined in main.o"
604
605这通常意味着 fnmatch.h 头文件被包括在了 Apache 的 ap_config.h
606
607头文件中,尽管 proftpd 并没有链接 Apache 的库。这个错误主要产生
608
609在 Solaris 8 系统上,不过,类似的问题也曾经在 Red Hat 6.0 系统
610
611中的 <hsregx.h> 头文件上被报告过。
612
613
614
615
616
617T2. 如果你遇到了运行时问题,先检查你的系统日志(syslog)中的消息。proftpd 守护进程
618
619记录了它遇到的所有错误情况,包括解析配置文件时出现的问题。认证相关的消息被系统
620
621日志工具 "auth" 或 "authpriv" (如果可用的话) 记录下来。其他所有的消息使用
622
623系统日志的守护进程工具来记录,除非使用命令行选项 "-n" 或 SyslogFacility 、
624
625SystemLog 指令来进行重定向。查看你系统中的 syslogd.conf 来了解 syslogd
626
627怎么处理这些消息。
628
629
630
631一些常见的错误信息包括:
632
633
634
635o "inet_create_connection() failed: Operation not permitted"
636
637这通常意味着proftpd不是以root用户的身份开始运行的。
638
639
640
641o "bind: unable to bind to port" or "Address already in use"
642
643这通常意味着另外一个进程已经在使用指定的ftp端口了,不是inetd、xinetd
644
645就是另外一个正在运行着的FTP服务器。
646
647
648
649o "Fatal: Socket operation on non-socket"
650
651这通常意味着在 proftpd.conf 配置文件中 ServerType 指令被配置成 inetd
652
653(超级服务器)方式而不是 standalone(独立服务器) 方式来运行。
654
655
656
657o "received: PASS (hidden)"
658
659"ProFTPD terminating (signal 11)"
660
661这通常意味着要求的 shadow passwd 文件支持没有被编译进去。试着回到编译
662
663的第一步,要么添加 '--enable-autoshadow' ,要么添加 '--enable-shadow'
664
665选项到 configure 的命令行中重新编译。
666
667
668
669o "Fatal: unknown configuration directive 'AuthPAMAuthoritative'
670
671on line NN of '/etc/proftpd.conf'."
672
673This means that either 'AuthPAMAuthoritative' was misspelld or
674
675这意味着要么 'AuthPAMAuthoritative' 拼写错了,要么 mod_pam 没有被编译
676
677到ProFTPD中去。如果是后者,你需要重新配置、编译proftpd,使用
678
679"./configure --with-modules=mod_pam ..."选项明确的添加上模块 mod_pam。
680
681
682
683如果系统不能登录而你的系统使用了PAM认证的话,你还需要配置PAM和FTP一起工作。更多的
684
685细节,请参考你系统的PAM文档。如果你选择的是软件包的安装方式的话,希望PAM的配置工作
686
687是自动完成的。在 Linux 系统,下面的命令也许会有用:
688
689
690
691% cp -p contrib/dist/rpm/ftp.pamd /etc/pam.d/ftp
692
693
694
695如果登录的FTP客户端出现了类似 "server error 500, server shut down" 的信息的
696
697话,可能意味着你的系统中有一个失效的 /etc/shutmsg 文件存在。你应该删掉它。
698
699
700
701
702
703T3. 使用 "-d N" 命令行选项来启动 proftpd 守护进程,你可以得到更多的调试信息,其中 N
704
705的范围从1 到 5,值越大,调试信息的数目也越大。如果你采用 standalone的方式运行的
706
707话,使用 "-n" 选项将会阻止守护进程脱离你的终端,使所有的调试信息直接显示在你的终
708
709端上,而不是记在系统日志中(being syslogged)。
710
711
712
713
714
715T4. 如果你遇到的问题通过错误信息还是不能很好解决的话,你可以检查一下在官方的发布站点
716
717上是不是有更新的 ProFTPD 发布,或许你的问题已经在新版本中解决了。了解什么样的问
718
719题已经在新版本中得到了解决的最快的方式是阅读每一个新发布版本中的 ChangLog 文件。
720
721
722
723
724
725T5. 如果你的系统中有系统调用跟踪工具的话,你可以使用它来诊断什么失败了。这个方法经常用
726
727来侦察(spot)文件打开错误,包括共享库(shared libraries)。
728
729
730
731一些系统调用跟踪工具:
732
733o truss (Solaris, SVR4 的派生, Unixware, AIX5L, FreeBSD)
734
735o trace (SunOS 4.x)
736
737o tusc (HP/UX 11.x: ftp://ftp.cup.hp.com/dist/networking/misc/ )
738
739trace (HP/UX 10.x: ftp://hpux.cs.utah.edu/hpux/Sysadmin/trace-1.6/ )
740
741http://hpux.cs.utah.edu/hppd/hpux/Sysadmin/trace-1.6/
742
743http://devresource.hp.com/devresour...ary.html#perfhp
744
745o syscalls, trace (AIX 4.x); sctrace (AIX: [$$$] http://www.tkg.com )
746
747o par (IRIX)
748
749o alpha-trace (Digital Unix: ftp://ftp.mrc-lmb.cam.ac.uk/pub/jkb/ )
750
751o ktrace/kdump (NetBSD, OpenBSD)
752
753o strace, ktrace/kdump, ltrace (Linux)
754
755
756
757
758
759T6. 另外一个诊断技术是监视FTP客户端和ProFTPD服务器端的FTP协议通信情况。许多FTP客户端
760
761应用程序有一个调试和跟踪的选项。尽管需要有详细的FTP协议的知识来进行分析,不过,可以
762
763可以使用 telnet 来连接并直接和 proftpd 服务器 对话。最后,FTP协议的会话情况能够使
764
765用网络监视工具来跟踪,像tcpdump、etherfind、snoop和netnoop。
766
767
768
769
770
771T7. 更进一步的调试可能需要使用调试器了,而使用调试器就可能需要使用调试选项重新编译一遍
772
773proftpd 了。请参考你的编译器和调试器的相关文档。
774
775
776
777
778
779\----
780
781帮助
782
783\----
784
785
786
787H1. 在你向邮件列表上</hsregx.h></new_conf_file></the-ip-you-wish-to-bind-to></hostname></jeffwu>