ftpd 守护程序
用途
为因特网 FTP 协议提供服务器功能。
语法
/usr/sbin/ftpd [ -d ] [ -D DataConnTimeOut ] [-e][ -f ] [ -ff ] [ -k ] [ -l ] [ -U ] [ -t TimeOut ] [ -T MaxTimeOut ] [ -s ] [ -u OctalVal ] [-q [-C]] [-c] [-H]
描述
/usr/sbin/ftpd 守护程序是 DARPA 因特网 文件传输协议 (FTP) 服务器进程。 ftpd 守护程序使用传输控制协议 (TCP) 在 /etc/服务 文件中使用 ftp 命令服务规范指定的端口进行侦听。
可以使用系统管理界面工具 (SMIT) 或系统资源控制器 (SRC) 对 ftpd 守护程序进行更改。 通过编辑 /etc/inetd.conf 或/etc/services 文件。 Typingftpd建议不要在命令行上执行此操作。 ftpd 守护程序如果在 /etc/inetd.conf 文件中未注释,缺省情况下它将启动。
inetd 守护程序从 /etc/inetd.conf 文件和 /etc/services 文件中获取它的信息。
如果更改了 "/etc/inetd.conf或/"等等/"服务"文件,请运行 "刷新"-s inetd"或 "杀死"" -1"" InetdPID命令,将配置文件的更改通知 "inetd守护进程。
ftpd 守护程序根据 csh 命令的约定扩展文件名。 此命令可以使用如下的元字符串:*(星号), ? (问号), [ ](左右方括号), { } (左右花括号) 以及 ~ (代字号)。
ftpaccess.ctl 文件
搜索 /etc/ftpaccess.ctl 文件,寻找以 allow:、deny:、readonly:、writeonly:、readwrite:、useronly:、grouponly:、herald: 和/或 motd: 开始的行。 其余行被忽略。 如果文件不存在,那么所有主机均允许 ftp 访问。 allow: 和 deny: 行用于限制对主机的访问。 readonly:、writeonly: 和 readwrite: 行用于限制 ftp 的读(获取)写(存放)。 useronly: 和 grouponly: 行用于定义匿名用户。 herald: 和 motd: 行用于登录前后的多行消息。
keyword: value, value, ...您可以为每个关键字指定一个或多个值。 可以让多行中包含同一关键字。 /etc/ftpaccess.ctl 文件中的每一行最多包含 1024 个字符,超过的将被忽略。allow: host, host, ...
deny: host, host, ...如果指定了 allow: 行,那么仅允许所有 allow: 行中都列示的主机访问 ftp。 其他的主机将拒绝访问 ftp。 如果没有 allow: 行,那么除 deny: 行中指定的主机外,所有主机都将能够访问 ftp。 主机可以通过主机名或者 IP 地址来指定。readonly: dirname, dirname, ...
writeonly: dirname, dirname, ...
readwrite: dirname, dirname, ...readonly: 行列示了只读目录, writeonly: 行列示了只写目录。 仅允许写入的目录中拒绝读访问,只读目录中拒绝写访问。 除非指定了 readwrite: 行,否则所有其他目录都被授予访问权。 如果指定了 readwrite: 行,那么只有在 readwrite: 行和/或 readonly: 行中列示的目录可以进行读访问,同样,只有在 readwrite: 行和/或 writeonly: 行中列示的目录可以进行写访问。 同时,这些行的值可以是“ALL” 或者“NONE”。useronly: username, username, ...
puseronly: username, username, ...
grouponly: groupname, groupname, ...
pgrouponly: groupname, groupname, ...用户名在 /etc/passwd 中,组名在 /etc/group 中。 useronly: 和 puseronly: 行定义匿名用户。 grouponly: 和 pgrouponly: 行定义一组匿名用户。 这些匿名用户类似于该 ftp 活动中的匿名用户,他们被限制在自己的主目录下。 The useronly: 和 grouponly: 行定义类似于匿名用户的匿名用户,因为他们不受密码保护。 puseronly: 和 pgrouponly: 行定义受密码保护的匿名用户。herald: path
motd: on|offpath 是其中包含多行 herald 的文件的完整路径名,多行 herald 将在登录之前显示。 当 motd: 行具有值“on”时,那么 $HOME/motd 文件中包含将在登录之后显示的多行消息。 如果用户是一个已定义的匿名用户,那么 /etc/motd 文件中包含将在登录之后显示的多行消息。 (请注意,/etc/motd 是匿名用户用于执行 chroot 的根目录)。 motd: 行的缺省值为 off。如果标准操作系统认证方法是当前认证方法:
- 用户必须在密码数据库 /etc/security/passwd中具有密码。 (如果用户密码非空,客户机进程必须提供此密钥。)
- 用户名不得出现在 /etc/ftpusers 文件中。
- 用户的 login shell 必须出现在 /etc/security/login.cfg 文件的 shell 属性中。
- 如果用户名为
anonymous、ftp或 /etc/ftpaccess.ctl 文件中定义的匿名用户,那么匿名 FTP 帐户必须在密码文件中进行定义。 在这种情况下,客户机进程可以使用任何密码登陆。 一般约定,密码为客户机主机的名称。 ftpd 守护程序采用了特殊的办法来限制客户机进程对匿名帐号的访问。
如果 Kerberos 5 是当前认证方法:
ftpd 守护程序允许在以下条件均满足时进行访问:
- ftp 客户机的本地用户拥有当前的 DCE 凭证。
- 本地和远程系统都支持 AUTH 命令。
- 远程系统接受 DCE 凭证足以访问远程帐户。 请参阅 kvalid_user 函数以获取其他信息。
传输层安全性支持
ftpd 守护程序支持 RFC 4217 中定义的“传输层安全性”。 TLS 是一个加密协议,它在客户机和服务器之间提供了安全通信。
实施的主要目的是为了借助加密来确保控制和数据连接的安全。 客户机需要以其他方法来进行认证。 唯一受支持的方法是“标准认证”法。
收到启动 TLS 会话的请求后,ftpd 守护程序将接着读取 /etc/ftpd.cnf 文件,并装入将以下用于设置 TLS 会话的配置参数:
| 项 | 描述 |
|---|---|
| CRL_PATH | CRL_PATH 参数提供了证书撤销列表文件的路径,其必须是 PEM 格式。 如果已经指定,那么将根据证书撤销列表验证客户机所提供的数字证书。 如果 ftp 客户机未使用数字证书,那么连接将失败。 如果客户机提供了数字证书但证书已经撤销,那么 TLS 会话将失败。 如果未指定该参数,那么客户机将不必提供数字证书。 |
| CA_PATH | CA_PATH 参数提供了证书授权文件的路径,其必须是 PEM 格式。 如果已指定,那么将根据证书授权验证客户机证书。 如果客户机未提供数字证书,那么连接将失败。 如果客户机提供了数字证书但证书未经安全授权签名,那么 TLS 会话将失败。 如果未指定该参数,那么客户机将不必提供数字证书。 |
| CIPHER_LIST | 如果指定了 CIPHER_LIST 参数,那么将在 TLS 会话期间使用此列表。 如果未指定,那么将采用缺省的密钥列表。 |
| DEPTH | 如果已指定 CA_PATH 配置参数,那么 DEPTH 值将用于验证数字证书层次结构中 ftp 客户机所提供的证书。 如果不提供,那么将使用缺省值 9。 |
| CERTIFICATE | CERTIFICATE 参数提供了 PEM 格式的有效数字证书链文件的路径。 此文件用于 TLS 会话中。 需要指定此参数来启动 TLS 会话。 如果未指定该参数,那么 ftpd 服务器会拒绝所有 TLS 请求。 |
| CERTIFICATE_PRIVATE_KEY | CERTIFICATE_PRIVATE_KEY 参数提供了证书专用密钥的路径(PEM 格式),此密钥将在 TLS 会话期间使用。 需要指定此参数来启动 TLS 会话。 如果未指定该参数,那么 ftpd 服务器会拒绝所有 TLS 请求。 |
| DH_PARAMETERS_DIR | DH_PARAMETERS_DIR 参数提供了包含 Diffie Helman 参数(PEM 格式)的目录的路径。 该目录中可以含有多个包含 PEM 格式 Diffie Helman 参数的文件。 需要时,ftpd 守护程序将搜索相应的参数来使用。 |
要支持 TLS ,必须从 AIX® Web 下载包程序 Web 站点安装最新版本的 OpenSSL 工具。
文件传输协议子树准则
处理匿名 FTP 用户时,服务器会在 FTP 用户帐户的主目录中执行 chroot 命令。 为获得较高的安全性,请在构造 FTP 子树时执行以下规则:
| 项 | 描述 |
|---|---|
| ~ FTP | 创建 root 用户的主目录,方式为 r-xr-xr-x (555)。 |
| ~ ftp/bin | 创建 root 用户的目录,并且对其他人是不可写的。 ls 程序必须在此目录中以支持列表命令。 此程序必须采用 111 方式。 |
| ~ ftp/etc | 创建 root 用户的目录,并且对其他人是不可写的。 |
| ~ ftp/pub | 在 777 方式下创建此目录,并被 FTP 所有。 用户必须将可通过匿名帐户访问的文件放入此目录中。 |
- 用户 ~
- 使主目录由 root 用户和方式
r-xr-xr-x(555) 拥有。 - ~user/bin
- 创建 root 用户的目录,并对其他人不可写。 ls 程序必须在此目录中以支持列表命令。 此程序必须采用 111 方式。
- ~user/etc
- 创建 root 用户的目录,并对其他人不可写。
- ~user/pub
- 以 777 方式创建此目录,并被用户所有。 然后,用户必须将可通过
anonymous帐户访问的文件放置在此目录中。
服务器必须以 root 用户运行,来创建有特权端口号的套接字。 服务器维护一个登录用户的有效的用户标识当在套接字上绑定地址时回复给 root 用户。
支持的文件传输协议请求
ftpd 守护程序目前支持以下 FTP 请求:
| 项 | 描述 |
|---|---|
| ABOR | 终止前一次命令。 |
| 记帐 | 指定帐户(被忽略)。 |
| ADAT | 指定认证 / 安全数据。 |
| ALLO | 分配存储器(空)。 |
| APPE | 添加到文件。 |
| AUTH | 指定认证 / 安全机制。 |
| CCC | 指定清除命令通道。 |
| CDUP | 转到当前工作目录的父目录。 |
| cwd | 更改工作目录。 |
| DELE | 删除文件。 |
| ENC | 指定私有保护命令。 |
| help | 给出帮助信息。 |
| 项 | 描述 |
|---|---|
| list | 在目录中给出列表文件(此 FTP 请求和 ls -lA 命令是同样的)。 |
| MKD | 创建目录。 |
| MDTM | 显示文件最后的修改时间。 |
| 中等收入 | 指定完整性保护命令。 |
| 方式 | 指定数据传输方式。 |
| NLST | 给出目录下文件的名称列表(此 FTP 请求和 ls 命令是同样的)。 |
| 空操作 | 什么也不做。 |
| PASS | 指定密码。 |
| PASV | 为服务器间的传输做准备。 |
| PBSZ | 指定保护缓冲区的大小。 |
| port | 指定数据连接端口。 |
| PROT | 指定数据通道保护级别。 |
| PWD | 显示当前工作目录。 |
| QUIT | 终止会话。 |
| RETR | 检索文件。 |
| RMD | 除去目录。 |
| RNFR | 指定重命名源文件名。 |
| RNTO | 指定重命名目标文件名。 |
| 站点 | SITE 请求支持以下特定于非标准或 UNIX的命令:
|
| 大小 | 返回当前文件的大小。 |
| STAT | 返回服务器的状态。 |
| STOR | 存储文件。 |
| STOU | 使用唯一的文件名存储文件。 |
| STRU | 指定作为文件结构传输的数据结构。 |
| SYST | 显示服务器系统的操作系统类型。 |
| TYPE | 用 Type 参数指定数据传输类型。 |
| USER | 指定用户名。 |
| XCUP | 更改当前工作目录的父目录(通常不使用)。 |
| XCWD | 更改当前目录(通常不使用)。 |
| XMKD | 创建目录(通常不使用)。 |
| XPWD | 打印当前工作目录(通常不使用)。 |
| XRMD | 除去目录(通常不使用)。 |
其余在因特网 RFC 959 中定义的 FTP 请求被识别,但是不执行。 MDTM 和 SIZE 请求在 RFC 959 中没有指定,但它们已经被列入下次的 FTP RFC 更新计划。
如果在数据传输过程中收到 STAT 请求而且前面有 Telnet IP 信号和 SYNCH 信号,那么返回传输状态。
必须通过使用系统管理界面工具 (SMIT) 或者通过更改 /etc/inetd.conf 文件来控制 ftpd 守护程序。 Typingftpd建议不要在命令行上执行此操作。
使用系统资源控制器来操控 ftpd 守护程序
ftpd 守护程序是 inetd 守护程序的子服务器。 ftpd 守护程序是 tcpip SRC 子系统组的成员。 缺省情况下在 /etc/inetd.conf 文件中启用该守护程序,并可用下列的 SRC 命令对进其行操作:
标志
| 项 | 描述 |
|---|---|
| -C | 允许用户指定必须在网络缓冲区高速缓存 (NBC) 中高速缓存使用 send_file 命令发送的传出文件。 只有在指定了 -q 标志的情况下才能使用此标志。 仅当文件在无保护的情况下以二进制方式发送时此标志才适用。 |
| -c | 阻止逆向查询主机名。 |
| -d | 将有关 ftpd 守护程序操作的调试信息发送到 syslogd 守护程序。 如果指定 -d 标志,那么必须编辑 /etc/syslog.conf 文件并添加以下条目:
注: syslogd 守护程序的debug级别包括info级别消息。
如果不编辑 /etc/syslog.conf 文件,那么没有消息产生。 更改/etc/syslog.conf文件后,运行refresh -s syslogd命令或kill -1 SyslogdPID命令通知syslogd守护进程其配置文件的更改。 有关调试级别的更多信息,请参阅 /etc/syslog.conf 文件。 |
| -D DataConnTimeOut | 指定 ftpd 守护程序保持数据连接的最大秒数。 缺省值为 300 秒;如果值为 0,那么表示无限期等待。 DataConnTimeOut 参数值的范围可以是从 0 到 MAXINT。 |
| -e | 仅使支持 TLS 的客户机能够与服务器建立连接。 |
| -f | 当客户机请求服务器连接回特定端口时,禁用特权端口的检查。 在缺省情况下,ftpd 不允许客户机请求连接到特权端口,这是出于安全方面的考虑。 |
| -ff | 当客户机请求服务器连接回特定客户机端口时,禁用特权端口和匹配用于控制连接的那个的 IP 地址的检查。 使用此标志后,客户机可以请求服务器向备用的主机或者接口发送数据。 在缺省情况下,ftpd 出于安全考虑,不允许此操作。 |
| -h | 对 FILE_Rename、FS_Rmdir 和 FILE_Unlink 事件开启审计日志记录(如果对 root 用户启用了这些事件)。 |
| -k | 在数据传输套接字上,设置在 sys/socket.h 文件中定义的 SO_KEEPALIVE 选项,以启用在事件 TCP/IP 暂挂中的数据传输到超时。 空闲时间间隔时间基于系统范围的值。tcp_keepidle和tcp_keepintvlno 命令的选项。 如果没有此标志,ftpd 数据传输将不会超时。 |
| -l | 向 syslogd 守护程序发送有关 ftpd 守护程序操作的日志记录信息。 如果指定 -l 标志,必须编辑 /etc/syslog.conf
文件并增加如下条目:如果不编辑 /etc/syslog.conf 文件,那么没有消息产生。 更改/etc/syslog.conf文件后,运行refresh -s syslogd命令或kill -1 SyslogdPID命令通知syslogd守护进程其配置文件的更改。 有关调试级别的更多信息,请参阅 /etc/syslog.conf 文件。 |
| -q | 允许用户指定必须使用 send_file 子例程在网络上发送文件。 仅当文件在无保护的情况下以二进制方式发送时此标志才适用。 |
| -t TimeOut | 经过指定的秒数后退出不活动的客户机会话,秒数通过 TimeOut 变量来指定。 缺省值为 15 分钟(900 秒)。 超时同时应用于数据连接和控制连接。 |
| -T MaxTimeOut | 经过指定的最大秒数后退出不活动的客户机会话,最大秒数通过 MaxTimeOut 变量来指定。 缺省值为 2 小时(7200 秒)。 |
| -s | 打开套接字级别的调试。 |
| -u OctalVal | 设置 ftpd 守护程序的 umask。 OctalVal 变量必须指定为八进制的值,用来定义 umask。 缺省 umask 是八进制值 027,这将导致文件许可权为 rw-r---。 |
| -U | 在传输中保持文件未锁定。 如果此标志通过 /usr/sbin/ftpd 来指定,那么文件在传输过程中仍可打开。 |
安全性
ftpd 守护程序是服务名称为 ftp 的支持 PAM 的应用程序。 在 /etc/security/login.cfg 的 usw 节中,通过修改 auth_type 属性值来将要使用 PAM 进行认证的系统范围配置设置为作为 root 用户的 PAM_AUTH。
#
# AIX ftp configuration
#
ftp auth required /usr/lib/security/pam_aix
ftp account required /usr/lib/security/pam_aix
ftp session required /usr/lib/security/pam_aix示例
- 启动 ftpd 守护程序,请输入:
startsrc 命令带 -t 标志启动 ftpd 子服务器。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。startsrc -t ftp - 要停止 ftpd 守护程序,一般输入:
stopsrc 命令带 -t 标志停止 ftpd 子服务器。 stopsrc 命令允许启动所有暂挂的连接,并完成所有现有连接,但是将阻止启动新的连接。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。stopsrc -t ftp - 要强制停止 ftpd 守护程序和所有 ftpd 连接,请输入以下命令:
带 -t 和 -f 标志的 stopsrc 命令会强制 ftpd 子服务器停止。 它立刻终止所有暂挂的连接和现有连接。stopsrc -f -t ftp - 要显示关于
ftpd 守护程序的简短状态报告,请输入:
带有 -t 标志的 lssrc 命令将返回守护程序的名称、进程标识和状态(活动或者不活动)。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。lssrc -t ftp
文件
| 项 | 描述 |
|---|---|
| /etc/locks/ftpd | 包含内部锁和进程标识存储器。 |
| /etc/group | 包含组的密码。 |
| /etc/passwd | 包含用户的密码。 |
| /etc/security/login.cfg | 包含登录和用户认证的配置信息。 |
| /etc/security/passwd | 包含加密密码。 |
| /etc/syslog.conf | 包含 syslogd 守护程序的配置信息。 |
| /usr/samples/tcpip/anon.ftp | 包含示例 shell 脚本,通过它可以设置匿名 FTP 帐户。 该文件也包含其使用指导。 |
| /etc/ftpd.cnf | 包含支持 TLS 的配置参数。 |