ftpd 守护程序

用途

为因特网 FTP 协议提供服务器功能。

语法

注: ftpd 守护程序通常由 inetd 守护程序启动。 也可使用 SRC 命令从命令行控制。

/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: 行用于登录前后的多行消息。

/etc/ftpaccess.ctl 中所有行的语法形式:
keyword: value, value, ...
您可以为每个关键字指定一个或多个值。 可以让多行中包含同一关键字。 /etc/ftpaccess.ctl 文件中的每一行最多包含 1024 个字符,超过的将被忽略。
allow: deny: 行的语法是:
allow: host, host, ...
deny: host, host, ...
如果指定了 allow: 行,那么仅允许所有 allow: 行中都列示的主机访问 ftp。 其他的主机将拒绝访问 ftp。 如果没有 allow: 行,那么除 deny: 行中指定的主机外,所有主机都将能够访问 ftp。 主机可以通过主机名或者 IP 地址来指定。
readonly: , writeonly: 和 readwrite: 行的语法为:
readonly: dirname, dirname, ...
writeonly: dirname, dirname, ...
readwrite: dirname, dirname, ...
readonly: 行列示了只读目录, writeonly: 行列示了只写目录。 仅允许写入的目录中拒绝读访问,只读目录中拒绝写访问。 除非指定了 readwrite: 行,否则所有其他目录都被授予访问权。 如果指定了 readwrite: 行,那么只有在 readwrite: 行和/或 readonly: 行中列示的目录可以进行读访问,同样,只有在 readwrite: 行和/或 writeonly: 行中列示的目录可以进行写访问。 同时,这些行的值可以是“ALL” 或者“NONE”。
useronly:puseronly:grouponly:pgrouponly: 行的语法为:
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: 行定义受密码保护的匿名用户。
注: 对于 puseronly:pgrouponly: 用户,必须创建密码并禁用登录。
herald: motd: 行的语法如下所示:
herald: path
motd: on|off
path 是其中包含多行 herald 的文件的完整路径名,多行 herald 将在登录之前显示。 当 motd: 行具有值“on”时,那么 $HOME/motd 文件中包含将在登录之后显示的多行消息。 如果用户是一个已定义的匿名用户,那么 /etc/motd 文件中包含将在登录之后显示的多行消息。 (请注意,/etc/motd 是匿名用户用于执行 chroot 的根目录)。 motd: 行的缺省值为 off。

如果标准操作系统认证方法是当前认证方法:

ftpd 守护程序可以为客户机进程传输文件之前,它必须认证客户机进程。 ftpd 守护程序根据如下规则认证客户机进程:
  • 用户必须在密码数据库 /etc/security/passwd中具有密码。 (如果用户密码非空,客户机进程必须提供此密钥。)
  • 用户名不得出现在 /etc/ftpusers 文件中。
  • 用户的 login shell 必须出现在 /etc/security/login.cfg 文件的 shell 属性中。
  • 如果用户名为 anonymousftp/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 所有。 用户必须将可通过匿名帐户访问的文件放入此目录中。
注: shell 脚本 /usr/samples/tcpip/anon.ftp 使用上述规则为您设置匿名 FTP 帐户。
当处理 /etc/ftpaccess.ctl 中定义的匿名 FTP 用户时,服务器在用户帐户的主目录下执行 chroot 命令。 为获得更好的安全性,当构造用户子树时请执行以下规则:
用户 ~
使主目录由 root 用户和方式 r-xr-xr-x (555) 拥有。
~user/bin
创建 root 用户的目录,并对其他人不可写。 ls 程序必须在此目录中以支持列表命令。 此程序必须采用 111 方式。
~user/etc
创建 root 用户的目录,并对其他人不可写。
~user/pub
以 777 方式创建此目录,并被用户所有。 然后,用户必须将可通过 anonymous 帐户访问的文件放置在此目录中。
注: shell 脚本 /usr/samples/tcpip/anon.users.ftp 使用上述规则为您设置匿名 FTP 帐户。

服务器必须以 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的命令:
umask
更改 umask( SITE UMASK 002 )。
IDLE
设置闲置时间( SITE IDLE 60 )。
chmod
更改文件的方式( SITE CHMOD 755 文件名)。
help
给出帮助信息( SITE HELP )。
大小 返回当前文件的大小。
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 命令对进其行操作:

描述
startsrc 启动子系统、子系统组或子服务器。
stopsrc 停止子系统、子系统组或子服务器。
lssrc 获取子系统、子系统组或者子服务器的状态。

标志

描述
-C 允许用户指定必须在网络缓冲区高速缓存 (NBC) 中高速缓存使用 send_file 命令发送的传出文件。 只有在指定了 -q 标志的情况下才能使用此标志。 仅当文件在无保护的情况下以二进制方式发送时此标志才适用。
-c 阻止逆向查询主机名。
-d
将有关 ftpd 守护程序操作的调试信息发送到 syslogd 守护程序。 如果指定 -d 标志,那么必须编辑 /etc/syslog.conf 文件并添加以下条目:
daemon.debug FileName
注: 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_RenameFS_RmdirFILE_Unlink 事件开启审计日志记录(如果对 root 用户启用了这些事件)。
-k 在数据传输套接字上,设置在 sys/socket.h 文件中定义的 SO_KEEPALIVE 选项,以启用在事件 TCP/IP 暂挂中的数据传输到超时。 空闲时间间隔时间基于系统范围的值。tcp_keepidletcp_keepintvlno 命令的选项。 如果没有此标志,ftpd 数据传输将不会超时。
-l syslogd 守护程序发送有关 ftpd 守护程序操作的日志记录信息。 如果指定 -l 标志,必须编辑 /etc/syslog.conf 文件并增加如下条目:
daemon.info FileName

如果不编辑 /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.cfgusw 节中,通过修改 auth_type 属性值来将要使用 PAM 进行认证的系统范围配置设置为作为 root 用户的 PAM_AUTH。

启用 PAM 时使用的认证机制取决于 /etc/pam.conf ftp 服务的配置。 ftpd 守护程序需要 /etc/pam.conf 条目用于 authaccoun session 模块类型。 以下列示了 /etc/pam.conf 中对 ftp 服务的建议的配置:
#
# 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

示例

注: 可以使用 SMIT 或编辑 /etc/inetd.conf 文件来指定 ftpd 守护程序的参数。
  1. 启动 ftpd 守护程序,请输入:
    startsrc -t ftp
    startsrc 命令带 -t 标志启动 ftpd 子服务器。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。
  2. 要停止 ftpd 守护程序,一般输入:
    stopsrc -t ftp
    stopsrc 命令带 -t 标志停止 ftpd 子服务器。 stopsrc 命令允许启动所有暂挂的连接,并完成所有现有连接,但是将阻止启动新的连接。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。
  3. 要强制停止 ftpd 守护程序和所有 ftpd 连接,请输入以下命令:
    stopsrc -f -t ftp
    -t-f 标志的 stopsrc 命令会强制 ftpd 子服务器停止。 它立刻终止所有暂挂的连接和现有连接。
  4. 要显示关于 ftpd 守护程序的简短状态报告,请输入:
    lssrc -t ftp
    带有 -t 标志的 lssrc 命令将返回守护程序的名称、进程标识和状态(活动或者不活动)。 您必须使用 -t 标志来指定子服务器。 否则,命令不会正确执行。

文件

描述
/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 的配置参数。