系统管理指南:网络服务

第 28 章 管理 FTP 服务器(任务)

本章包括下表中说明的设置和管理 FTP 服务器的任务。

管理 FTP 服务器(任务列表)

表 28–1 任务列表:管理 FTP 服务器

任务 

说明 

参考 

配置对 FTP 服务器的访问 

使用 /etc/ftpd 目录中的 ftpaccessftpusersftphosts 文件可建立或限制对 FTP 服务器的访问。

如何设置用户登录限制

如何控制无效登录尝试的次数

如何禁止特定用户访问 FTP 服务器

如何限制对缺省 FTP 服务器的访问

如何定义 FTP 服务器类

设置 FTP 服务器登录帐户 

为实际用户、临时用户和匿名用户建立登录帐户。 

如何设置实际 FTP 用户

如何设置临时 FTP 用户

如何设置匿名 FTP 用户

如何创建 /etc/shells 文件

自定义消息文件 

编辑 /etc/ftpd/ftpaccess 文件以配置 FTP 服务器,使其将消息返回到与特定事件相关的 FTP 客户机。

如何自定义消息文件

如何创建要发送到用户的消息

如何配置 README 选项

配置对 FTP 服务器上文件的访问 

使用 /etc/ftpd/ftpaccess 文件可指定用户类,允许该类用户执行某些命令或者从 FTP 服务器下载文件以及将文件上载到该服务器。

如何为拨号网络配置 DA 搜索

控制 FTP 服务器上的上载和下载

启用有限或完整虚拟主机托管 

使用 /etc/ftpd/ftpaccess 文件可配置 FTP 服务器,使其支持同一计算机上的多个域。

如何启用有限虚拟主机托管

如何启用完整虚拟主机托管

启动 FTP 服务器 

更改服务属性以在 nowait 模式、单机模式或前台模式下启动 FTP 服务器。

如何使用 SMF 启动 FTP 服务器

如何在后台启动独立 FTP 服务器

如何在前台启动独立 FTP 服务器

关闭 FTP 服务器 

使用 /etc/ftpd/ftpaccess 文件并运行 ftpshut 可关闭 FTP 服务器。

关闭 FTP 服务器

对常见 FTP 服务器问题进行疑难解答 

选中 syslogd 并使用 greeting textlog commands 可调试 FTP 服务器上的问题。

如何在 syslogd 中检查 FTP 服务器消息

如何使用 greeting text 验证 ftpaccess

如何检查由 FTP 用户执行的命令

控制 FTP 服务器访问

可以使用 /etc/ftpd 目录中的以下配置文件控制对 FTP 服务器的访问。

Procedure如何定义 FTP 服务器类

要登录到 FTP 服务器,用户在使用 ftpaccess 文件时必须是某类的成员。要将 class 指令添加到 ftpaccess 文件中,应指定允许通过特定主机进行访问的用户的 class 名称和 typelist

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. ftpaccess 文件中为匿名用户、临时用户和实际用户添加项。


    class class typelist addrglob[addrglob...]
    class

    用于定义 FTP 用户的关键字。

    class

    class 关键字定义的名称。每次登录会与所定义类的列表进行比较。已登录的用户将视为匹配的第一个类的成员。

    typelist

    与三类用户(anonymousguestreal)匹配的、用逗号分隔的关键字列表:

    addrglob

    域名簇或数字地址簇。addrglob 也可以是包含其他地址簇、以斜杠 (`/`) 开头的文件名:address:netmaskaddress/cidr

    以下是一些地址簇示例:

    • 数字 IPv4 地址: 10.1.2.3

    • 域名簇 *.provider.com

    • 数字 IPv4 地址簇 10.1.2.*

    • 数字 IPv4 地址:网络掩码 10.1.2.0:255.255.255.0

    • 数字 IPv4 地址/CIDR 10.1.2.0/24

    • 数字 IPv6 地址: 2000::56:789:21ff:fe8f:ba98

    • 数字 IPv6 地址/CIDR:2000::56:789:21ff:fe8f:ba98/120


示例 28–1 定义 FTP 服务器类


class  local  real,guest,anonymous *.provider.com

class  remote real,guest,anonymous *

上一示例将 local 类定义为从 *.provider.com 登录的 realguestanonymous 类型的任何用户。最后一行将 remote 定义为从除 *.provider.com 之外的任何位置登录的任何用户。


Procedure如何设置用户登录限制

您可以使用 ftpaccess 文件中设置的指令限制同时登录的某类用户的数量。每个登录限制包含类名、UUCP 样式的周日期列表和超出限制时将显示的消息文件。

要设置用户登录限制,请使用以下过程中的步骤。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中:


    limit class n times [message_file]
    limit

    用于限制同时登录的关键字,即对属于某个已定义类的指定数目的用户在特定连接时段的同时登录进行限制。

    class

    class 关键字定义的名称。每次登录会与所定义类的列表进行比较。已登录的用户将视为匹配的第一个类的成员。

    n

    用户数。

    times

    可以连接相应类的周日期和时间。用 Any 表示任何日期。

    message_file

    如果用户被拒绝访问将显示的消息文件。


示例 28–2 设置用户登录限制


limit   anon     50  Wk0800-1800		/etc/ftpd/ftpmsg.deny

limit   anon    100  Any				/etc/ftpd/ftpmsg.deny

limit   guest   100  Any				/etc/ftpd/ftpmsg.deny

上面示例中的第一行显示,在每周的工作时间内,允许同时登录的 anon 类用户不能超过 50 个。第二行将工作时间之外可同时登录的 anon 用户限制为 100 个。最后一行显示,在任何时间,允许同时登录的 guest 用户不能超过 100 个。有关如何指定日期和时间参数的信息,请参见 ftpaccess(4)

该示例还说明,达到指定的登录限制时,将返回 /etc/ftpd/ftpmsg.deny 文件的内容(假设 ftpmsg.deny 存在)。有关使用 /usr/sbin/ftpcount 命令查看在特定时间登录的每类用户的数量和登录限制的信息,请参见 ftpcount(1)

除非达到了指定的限制,否则将允许用户登录到 FTP 服务器。匿名用户以用户 ftp 的身份登录。 实际用户以真实身份登录;临时用户以实际用户身份登录,但其访问权限受 chroot 环境限制。

有关使用 /usr/sbin/ftpwho 命令检查登录到 FTP 服务器的用户的身份的信息,请参见 ftpwho(1)


Procedure如何控制无效登录尝试的次数

如果因为出现问题(如需要的信息拼写错误)导致登录到 FTP 服务器失败,则通常会重复登录。在将消息记录到 syslog 文件之前,允许用户连续尝试登录特定的次数。然后,将断开用户的连接。通过执行以下过程中的步骤,可对登录尝试失败的次数设置限制。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。


    loginfails n
    
    loginfails

    用于指定在终止 FTP 连接之前,允许登录失败的次数的关键字。

    n

    登录可以失败的次数


示例 28–3 控制无效登录尝试的次数


loginfails 10

上面的示例说明,在尝试登录失败 10 次后,将会断开用户与 FTP 服务器的连接。


Procedure如何禁止特定用户访问 FTP 服务器

/etc/ftpd/ftpusers 文件列出了不允许登录到 FTP 服务器的用户名。尝试登录时,FTP 服务器将会检查 /etc/ftpd/ftpusers 文件,以确定是否拒绝该用户访问。如果在该文件中未找到该用户名,服务器将会在 /etc/ftpusers 文件中搜索。

如果 /etc/ftpusers 中存在匹配的用户名,则会写入一条 syslogd 消息,声明在过时的文件中找到匹配。该消息还建议使用 /etc/ftpd/ftpusers,而不要使用 /etc/ftpusers


注 –

此发行版不再支持 /etc/ftpusers 文件。如果安装 FTP 服务器时存在 /etc/ftpusers 文件,则会将该文件移到 /etc/ftpd/ftpusers 中。


有关其他信息,请参见 syslogd(1M)in.ftpd(1M)ftpusers(4)

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将不允许登录到 FTP 服务器的用户的项添加到 /etc/ftpd/ftpusers 文件中。


示例 28–4 如何禁止 FTP 服务器访问


root

daemon

bin

sys

adm

lp

uccp

nuucp

listen

nobody

noaccess

nobody4

上面的示例列出了 ftpusers 文件中的典型项。用户名与 /etc/passwd 中的项匹配。该列表通常包括 root 及其他管理和系统应用程序标识。

作为安全措施,根项包括在 ftpusers 文件中。缺省安全策略是禁止 root 的远程登录。对于 /etc/default/loginfile 中设置为 CONSOLE 项的缺省值,也遵守该策略。请参见 login(1)


Procedure如何限制对缺省 FTP 服务器的访问

除了上面提到的控制方法,还可以向 ftpaccess 文件中添加显式声明来限制对 FTP 服务器的访问。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。

    1. 缺省情况下,允许所有用户访问缺省(非虚拟)FTP 服务器。要拒绝特定用户(anonymous 用户之外的用户)的访问,请添加以下项:


      defaultserver deny username [username...]
      defaultserver

      用于标识拒绝或允许对其进行访问的非虚拟服务器的关键字

      username

      拥有对 defaultserver 的受限制访问权限的用户的登录名

    2. 要允许 deny 行中未列出的用户的访问,请添加以下行:


      defaultserver allow username [username...]
    3. 要阻止匿名用户的访问,请添加以下项:


      defaultserver private

示例 28–5 限制对缺省 FTP 服务器的访问


defaultserver deny *

defaultserver allow username

上面的示例说明,FTP 服务器拒绝除 anon 用户和 allow 行中列出的那些用户之外的所有用户的访问。

也可以使用 ftphosts 文件拒绝来自各种主机对特定登录帐户的访问。有关其他信息,请参见 ftphosts(4)


设置 FTP 服务器登录

要访问 FTP 服务器,必须先登录。FTP 服务器支持三种类型的用户登录帐户,它们分别是实际用户、临时用户和匿名用户。

Procedure如何设置实际 FTP 用户

要使实际用户可以访问 FTP 服务器,请按照以下说明操作:

  1. 验证用户是否具有使用用户名和口令设置的可用于建立终端会话的帐户。

    有关更多信息,请参见《系统管理指南:基本管理》中的第 4  章 “管理用户帐户和组(概述)”

  2. 确认该实际用户是否是 ftpaccess 文件中某类的成员。

    有关 ftpaccess 文件中定义的用户类的信息,请参见如何定义 FTP 服务器类

  3. 验证 /etc/shells 文件中是否列出了用户的登录 shell。

Procedure如何设置临时 FTP 用户

ftpconfig 脚本用于将所有需要的系统文件复制到起始目录中。如果临时用户和临时用户的起始目录已存在,则 ftpconfig 脚本将会使用当前的系统文件更新该区域。

有关更多信息,请参见 ftpconfig(1M)


注 –

与为匿名用户设置的用户名(anonymousftp)不同,FTP 临时用户的用户名不是固定的。可以选择将任何名称作为实际用户名。


要使临时用户可以访问 FTP 服务器,请执行以下操作:

  1. 使用 useradd 脚本创建包含登录 shell /bin/true 和起始目录 /root_dir/./home_dir 的临时用户帐户。

    有关更多信息,请参见 useradd(1M)《系统管理指南:基本管理》中的第 4  章 “管理用户帐户和组(概述)”


    注 –

    在此过程中,/home/guests/./guest1 用作名为 guest1 的用户的起始目录名称。



    # /usr/sbin/useradd -m -c "Guest FTP" -d \
    
      /home/guests/./guest1 -s /bin/true guest1
    
  2. 为临时帐户指定口令。

  3. guestuser 项添加到 ftpaccess 文件中。


    guestuser guest1

    注 –

    也可以使用 ftpaccess 文件中的 guestgroup 功能指定临时用户。ftpaccess 中的 guest-root 功能无需指定临时用户的起始目录路径中的 /./


  4. 确认该临时用户是否是 ftpaccess 文件中某个 class 的成员。有关详细信息,请参见如何定义 FTP 服务器类

  5. 使用 ftpconfig 脚本在 chroot 区域中创建需要的文件。


    /usr/sbin/ftpconfig -d /home/guests
    
  6. 确认 /bin/true 是否列在 /etc/shells 文件中。请参见如何创建 /etc/shells 文件


示例 28–6 设置临时 FTP 用户

在此示例中,将在 /home/guests 目录中设置 FTP 区域。


# /usr/sbin/ftpconfig -d /home/guests

Updating directory /home/guests

Procedure如何设置匿名 FTP 用户

ftpconfig 脚本创建 anonymous 用户帐户并使用需要的文件填充起始目录。

有关更多信息,请参见 ftpconfig(1M)

要使匿名用户可以访问 FTP 服务器,请按照以下说明操作:

  1. 使用 ftpconfig 脚本创建匿名用户帐户。


    /usr/sbin/ftpconfig anonymous-ftp-directory
    
  2. 确认是否在 ftpaccess 文件的某个 class 中指定了该匿名用户。

    有关详细信息,请参见如何定义 FTP 服务器类


示例 28–7 设置匿名 FTP 用户

在此示例中,将在 /home/ftp 目录中设置 FTP 区域。


# /usr/sbin/ftpconfig /home/ftp

Creating user ftp

Updating directory /home/ftp

Procedure如何创建 /etc/shells 文件

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建 /etc/shells 文件。

  3. 编辑 /etc/shells。添加每个 shell 的全路径,一个路径占一行。


示例 28–8 创建 /etc/shells 文件

以下是 /etc/shells 文件的一个示例,其中列出了 FTP 临时用户的 /bin/true


/sbin/sh 

/bin/csh 

/bin/jsh 

/bin/ksh 

/bin/remsh 

/bin/rksh 

/bin/rsh 

/bin/sh 

/usr/bin/csh 

/usr/bin/ksh 

/usr/bin/bash 

/usr/bin/tcsh

/usr/bin/zsh 

/bin/true

自定义消息文件

可以配置 FTP 服务器,使其将与特定事件有关的消息返回到 FTP 客户机。可以设置当用户登录到 FTP 服务器时显示欢迎消息。可以在用户更改目录时显示另外一条消息。

除了纯文本外,消息文件还可以包含一个或多个魔饼。魔饼由 %(百分号)后接单个字符构成。如果在消息文本中嵌入 cookie,则当调用该消息文件时,将会在屏幕上显示与该 cookie 关联的信息。

例如,消息文本可能包含 cookie %L


Welcome to %L! 

显示消息时,魔饼 %L 将替换为由 ftpaccess 文件中的 hostname 语句定义的服务器的名称。有关支持的消息 cookie 的完整列表,请参见 ftpaccess(4)


注 –

如果 ftpaccess 文件中未定义主机名,则将使用本地计算机的缺省主机名。


Procedure如何自定义消息文件

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 根据需要,编辑消息文件以包括魔饼。

    有关可以使用的 cookie 的列表,请参见 ftpaccess(4)


示例 28–9 自定义消息文件

以下是包括魔饼的消息文件的示例:


Welcome to %L -- local time is %T.

 

You are number %N out of a maximum of %M.

All transfers are logged.

 

If your FTP client crashes or hangs shortly after login 

please try

using a dash (-) as the first character of your password. 

This will

turn off the informational messages that may be confusing 

your FTP

client.

 

Please send any comments to %E.

Procedure如何创建要发送到用户的消息

用户登录后,屏幕上将显示与系统相关或与应用程序相关的消息。ftpaccess 文件列出了触发关联的 message 语句的事件。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中:


    message message_file [when [class ...]]
    message

    该关键字用于指定当用户登录或执行命令以更改工作目录时,将显示的消息文件。

    message_file

    要显示的消息文件的名称。

    when

    设置为 logincwd=dir 的参数。请参见以下示例。

    class

    class 规范允许仅向特定类的成员显示消息。


示例 28–10 创建要发送到用户的消息


message	/etc/ftpd/Welcome	login   anon guest

message	.message	cwd=*  

上面的示例说明,anonguest 类的用户登录时将显示 /etc/ftpd/Welcome 文件。第二行说明,将对所有用户显示当前工作目录中的 .message 文件。

对于临时用户和匿名用户,将创建相对于 chroot 目录的消息文件。


Procedure如何配置 README 选项

首次访问目录时,可能会列出 README 文件。要配置 README 选项,请将以下项添加到 ftpaccess 文件中。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。


    readme message_file [when [class...]]
    readme

    该关键字用于指定当用户登录或更改工作目录时,将检查的消息文件。如果该消息文件存在,则将通知用户,并指出文件被修改的日期。

    message_file

    要检查的消息文件的名称。

    when

    设置为 logincwd=dir 的参数。请参见以下示例。

    class

    class 规范允许仅向特定类的成员显示消息。


    注 –

    greetingbanner 关键字也可用于向用户发送消息。请参见 ftpaccess(4)



示例 28–11 配置 README 选项


readme  README*     login

readme  README*     cwd=*  

上面的示例说明,登录或更改目录时将列出与 README* 匹配的所有文件。以下是基于上面示例中使用的设置的登录示例。


% ftp earth

Connected to earth.

220 earth FTP server ready.

Name (earth:rimmer): ftp

331 Guest login ok, send your complete e-mail address as password.

Password: 

230-

230-Welcome to earth -- local time is Thu Jul 15 16:13:24 

1999.

230-

230-You are number 1 out of a maximum of 10.

230-All transfers are logged.

230-

230-If your FTP client crashes or hangs shortly after login 

please try

230-using a dash (-) as the first character of your 

password.  This will

230-turn off the informational messages that may be 

confusing your FTP

230-client.

230-

230-Please send any comments to ftpadmin@earth.

230-

230 Guest login ok, access restrictions apply.

ftp> cd pub

250-Please read the file README

250-  it was last modified on Thu Jul 15 16:12:25 1999 - 0 

days ago

250 CWD command successful.

ftp> get README /tmp/README

200 PORT command successful.

150 Opening ASCII mode data connection for README (0 

bytes).

226 ASCII Transfer complete.

ftp> quit

221 Goodbye.

 

控制对 FTP 服务器上文件的访问

本节中的 FTP 服务器访问控制是 Solaris 发行版中可用的标准文件和目录访问控制的补充。使用标准 Solaris 命令可限制能够访问、更改或上载文件的用户。请参见 chmod(1)chown(1)chgrp(1)

Procedure如何控制文件访问命令

要使用 ftpaccess 中的权限功能指定哪种类型的用户允许执行哪些命令,请执行以下操作:

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 中:


    command yes|no typelist
    
    command

    chmoddeleteoverwriterenameumask 等命令

    yes|no

    允许或禁止用户发出命令

    typelist

    用逗号分隔的任何关键字(anonymousguestreal)的列表


示例 28–12 如何控制文件访问命令

以下是对 FTP 服务器上的文件访问功能设置的权限示例。


chmod no anonymous, guest

delete    no anonymous

overwrite no anonymous

rename    no anonymous

umask     no guest, anonymous

上面的示例说明了以下内容:


控制 FTP 服务器上的上载和下载

通过对 FTP 服务器上的目录设置权限,可以控制对 FTP 服务器执行的已启动的上载和下载操作。缺省情况下,不允许匿名用户上载。启用匿名上载时请务必小心。

Procedure如何控制对 FTP 服务器执行的上载操作

ftpaccess 文件中添加指令以指定上载权限和上载失败的错误消息。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。

    要使用户可以上载文件,请添加以下项:


    upload [absolute|relative] [class=<classname>]... [-] root-dir \
    
    dirglob yes|no owner group mode [dirs|nodirs] [<d_mode>]
    
    
    
    path-filter typelist mesg allowed_charset {disallowed regexp...}
    
    upload

    该关键字应用于起始目录(chroot() 的参数)为 root-dir 的用户。可以将 root-dir 指定为“*”以便与任何起始目录匹配。

    absolute|relative

    该参数指定将 root-dir 目录路径解释为绝对路径还是相对于当前 chroot 目录的路径。

    class

    该关键字用于指定任何数量的 class=<classname> 限制。如果指定该限制,则仅在当前用户为指定的某个类的成员时,上载子句才有效。

    root-dir

    匿名用户的用户根目录和起始目录。

    dirglob

    与目录名称匹配的模式。可以在任何位置或单独使用星号来表示任何目录。

    yes|no

    允许或禁止上载到 FTP 服务器的变量。

    owner

    上载到 dirnames 中的文件的属主。

    group

    与上载到 dirnames 中的文件关联的组。

    mode

    用于对已上载的文件指定访问权限的参数。缺省模式 0440 禁止匿名帐户读取已上载的文件。

    dirs|nodirs

    该关键字允许或禁止用户在 dirnames 中列出的目录中创建子目录。

    d_mode

    确定新创建目录的权限的可选模式。

    path-filter

    控制已上载文件的名称的关键字。

    typelist

    用逗号分隔的任何关键字(anonymousguestreal)的列表。

    mesg

    regexp 条件匹配失败时将显示的消息文件。

    allowed_charset {disallowed regexp...}

    文件名称中允许或禁止使用的字母或数字。


示例 28–13 控制到 FTP 服务器的上载


upload /export/home/ftp /incoming yes ftpadm ftpadmin 0440 nodirs

path-filter anonymous /etc/ftpd/filename.msg ^[-A-Za-z0-9._]*$ ^[.-]

上面的示例说明了以下内容:

应对允许匿名上载到的目录的拥有权和权限进行严格控制。FTP 管理员应该是上载到 FTP 服务器的所有文件的属主。允许匿名用户上载文件时,需要创建 FTP 管理员。该目录应为权限设置为 3773 的用户 ftpadm 和组 ftpadm 拥有。

上载到 FTP 服务器的文件的访问模式应为 04400440 模式禁止匿名帐户读取已上载的文件。此限制可以防止服务器成为第三方文件分发的临时区域。

要使已上载的文件可以进行分发,FTP 管理员可以将这些文件移到公共目录中。


Procedure如何控制 FTP 服务器的下载

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中可阻止用户检索文件。


    noretrieve [absolute|relative] [class=classname]... [-] filename ...
    
    noretrieve

    用于拒绝检索特定文件的关键字

    absolute|relative

    该参数指定将 root-dir 目录路径解释为绝对路径还是相对于当前 chroot 目录的路径

    class

    该关键字用于指定要应用 noretrieve 限制的用户的 class=<classname>

    filename

    不允许用户检索的文件的名称


示例 28–14 控制 FTP 服务器的下载


noretrieve /etc/passwd

上面的示例说明,将禁止所有用户检索 /etc/passwd 文件。


虚拟主机托管

虚拟主机托管允许 FTP 服务器支持同一计算机上的多个域。每个虚拟主机需要单独的逻辑接口和 IP 地址。

FTP 服务器支持两种类型的虚拟主机托管:有限完整。使用有限虚拟主机托管时,将对所有虚拟主机使用相同的配置文件。使用完整虚拟主机托管时,将对每个虚拟主机使用单独的配置文件。


注 –

缺省情况下,不允许实际用户和临时用户登录到虚拟主机。您可以设置以下 ftpaccess 指令来覆盖缺省值。


To allow access to specific users:

virtual address allow username

To deny access to anonymous users:

virtual address private username

有关详细信息,请参见 ftpaccess(4)

Procedure如何启用有限虚拟主机托管

有限虚拟主机托管提供对虚拟 FTP 服务器的部分支持。可以通过指定虚拟根目录来启用对有限虚拟主机托管的支持。如果需要,也可以在 ftpaccess 文件中设置虚拟主机的以下参数:

ftpaccess 文件中的所有指令在所有虚拟服务器中全局共享。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。


    virtual address root|banner|logfile path
    
    virtual address hostname|email string
    
    virtual

    用于启用虚拟服务器功能的关键字

    address

    虚拟服务器的 IP 地址

    root

    虚拟服务器的根目录

    banner

    连接到虚拟服务器时将显示的标题文件

    logfile

    虚拟服务器上的文件传送记录

    path

    用于指定虚拟服务器上的目录和文件位置的变量

    email

    消息文件和 HELP 命令中使用的电子邮件地址

    hostname

    问候消息或状态命令中显示的主机的名称

    string

    用于指定 emailhostname 参数的变量


    注 –

    虽然可以使用 hostname 作为虚拟服务器的 address,但强烈建议您使用 IPv4 地址。为了匹配 hostname,接收 FTP 连接时 DNS 必须可用。对于 IPv6 主机,请使用主机名而不要使用 IPv6 地址。



示例 28–15 在 ftpaccess 文件中启用有限虚拟主机托管


virtual 10.1.2.3 root    /var/ftp/virtual/ftp-serv

virtual 10.1.2.3 banner  /var/ftp/virtual/ftp-serv/banner.msg

virtual 10.1.2.3 logfile /var/log/ftp/virtual/ftp-serv/xferlog

上面的示例在虚拟 FTP 服务器上设置 root 目录、bannerlogfile 的位置。



示例 28–16 在命令行中启用有限虚拟主机托管

带有 -l 选项的ftpaddhost(1M) 脚本可用于配置有限虚拟主机。

在以下示例中,运行带有 -l -b -x 选项的 ftpaddhost,可以使用虚拟根 /var/ftp/virtual/10.1.2.3 下的测试标题和日志文件 /var/ftp/virtual/10.1.2.3/xferlog 配置有限虚拟主机托管。


# ftpaddhost -l -b -x /var/ftp/virtual/10.1.2.3/xferlog \

/var/ftp/virtual/10.1.2.3

Procedure如何启用完整虚拟主机托管

完整虚拟主机托管允许每个虚拟域使用单独的配置文件。要在 FTP 服务器上启用对虚拟主机托管的完整支持,可以创建或修改特定域的以下 FTP 配置文件:

有关详细信息,请参见 ftpaccess(4)ftpusers(4)ftpgroups(4)ftphosts(4)ftpconversions(4)


注 –

如果单独版本的配置文件不可用,则可以使用 /etc/ftpd 目录中的主版本的文件。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 /etc/ftpd/ftpservers 文件中。


    address /config-file-dir
    
    address

    虚拟服务器的 IP 地址

    config-file-dir

    包含对虚拟主机自定义的配置文件的目录


    注 –

    虽然可以使用 hostname 作为虚拟服务器的 address,但强烈建议您使用 IPv4 地址。为了匹配 hostname,接收 FTP 连接时 DNS 必须可用。对于 IPv6 主机,请使用主机名而不要使用 IPv6 地址。


  3. 要为虚拟主机创建自定义版本的 FTP 服务器配置文件,请将主版本的文件从 /etc/ftpd 复制到 /config-file-dir 目录中。

    有关详细信息,请参见 ftpservers(4)


示例 28–17 在 ftpservers 文件中启用完整虚拟主机托管


#

# FTP Server virtual hosting configuration file

#



10.1.2.3 /net/inet/virtual/somedomain/

10.1.2.4 /net/inet/virtual/anotherdomain/

上面的示例为虚拟服务器上的两个不同域指定 IP 地址。



示例 28–18 在命令行中启用完整虚拟主机托管

带有 -c 选项的ftpaddhost(1M) 脚本可用于配置完整虚拟主机。

在以下示例中,运行带有 -c -b -x 选项的 ftpaddhost,可以使用虚拟根 /var/ftp/virtual/10.1.2.3 下的测试标题和日志文件 /var/ftp/virtual/10.1.2.3/xferlog 配置完整虚拟主机托管。


# ftpaddhost -c -b -x /var/ftp/virtual/10.1.2.3/xferlog \

/var/ftp/virtual/10.1.2.3

自动启动 FTP 服务器

可以通过以下三种方式之一启动 FTP 服务器:

独立服务器始终具有可能最快的响应时间,适用于专门提供 FTP 服务的大型服务器。由于独立系统无需重新启动,所以独立服务器可以为专用服务器提供较低的连接延迟。即使在非高峰时间,独立服务器也始终处于运行状态以无限等待连接。

Procedure如何使用 SMF 启动 FTP 服务器

缺省情况下,SMF 服务配置为使用 nowait 模式启动 FTP 服务器。如果站点处理许多连接,还可以在单机模式下运行 FTP 服务器。有关其他命令行选项的信息,请参见 in.ftpd(1M) 手册页。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 验证 FTP 服务器的 wait 属性。

    报告 wait=FALSE 的行指示服务器在 nowait 模式下启动。


    # inetadm -l network/ftp
    
    SCOPE    NAME=VALUE
    
             name="ftp"
    
             endpoint_type="stream"
    
             proto="tcp6"
    
             isrpc=FALSE
    
             wait=FALSE
    
             exec="/usr/sbin/in.ftpd -a"
    
             user="root"
    
    default  bind_addr=""
    
    default  bind_fail_max=-1
    
    default  bind_fail_interval=-1
    
    default  max_con_rate=-1
    
    default  max_copies=-1
    
    default  con_rate_offline=-1
    
    default  failrate_cnt=40
    
    default  failrate_interval=60
    
    default  inherit_env=TRUE
    
    default  tcp_trace=FALSE
    
    default  tcp_wrappers=FALSE
    
  3. 启动 FTP 服务器。


    # svcadm enable network/ftp
    

Procedure如何在后台启动独立 FTP 服务器

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 禁用 FTP 服务器。


    # svcadm disable network/ftp
    
  3. 启动独立 FTP 服务器。


    # /usr/sbin/in.ftpd -a -S
    

    将该行添加到 FTP 服务器启动脚本中。有关创建系统启动脚本的信息,请参见《系统管理指南:基本管理》中的“使用运行控制脚本”

Procedure如何在前台启动独立 FTP 服务器

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 禁用 FTP 服务器。


    # svcadm disable network/ftp
    
  3. inittab 文件中添加项以启动该服务。

    /etc/inittab 中的新项应与以下类似:


    ftpd:3:respawn:/usr/sbin/in.ftpd -a -s
    
  4. 通知 init 重新检查 /etc/inittab

    此命令应启动 FTP 服务。


    # init q
    

关闭 FTP 服务器

ftpshut(1M) 命令在特定时间关闭 FTP 服务器。

运行 ftpshut 时,将通过用于指定发生关闭的时间、拒绝新连接的时间和放弃现有连接的时间的命令行选项,生成一个文件。将基于此信息向用户发出服务器关闭通知。由 ftpshut 创建的文件的位置由 ftpaccess 文件中的 shutdown 指令指定。

Procedure如何关闭 FTP 服务器

按照以下过程中的步骤运行 ftpshut 并将 shutdown 指令添加到 ftpaccess 文件中。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将以下项添加到 ftpaccess 文件中。


    shutdown path
    
    shutdown

    该关键字用于指定一个文件的 path,要定期此文件检查以查看 FTP 服务器是否已预定关闭。

    path

    ftpshut 命令创建的文件的位置

  3. 运行 ftpshut 命令。


    ftpshut [ -V ] [ -l min] [ -d min] time [warning-message...]
    ftpshut

    该命令提供用于通知用户,FTP 服务器正在关闭的过程。

    -V

    指定显示版权和版本信息,然后终止的选项

    -l

    该标志用于调整拒绝到 FTP 服务器的新连接的时间

    -d

    该标志用于调整断开到 FTP 服务器的现有连接的时间。

    time

    由单词 now 指定的立即关机的关机时间,或使用两种格式之一(+ numberHHMM)指定的将来关机的关机时间

    [warning-message...]

    关机通知消息

  4. 使用 ftprestart 命令可在关机之后重新启动 FTP 服务器。

    有关详细信息,请参见 ftpshut(1M)ftpaccess(4)ftprestart(1M)

调试 FTP 服务器

本节介绍调试 FTP 服务器的问题的一些方法。

Procedure如何在 syslogd 中检查 FTP 服务器消息

FTP 服务器将用于调试的消息写入为 /etc/syslog.conf 文件中的守护进程消息指定的位置。如果使用 FTP 服务器出现问题,请首先检查此文件中的这类消息。

FTP 服务器消息由工具守护进程和级别信息控制。要将来自 FTP 服务器的消息发送到 /var/adm/message 并让 syslogd 重新读取其配置文件,请按照以下说明操作:

  1. 将如下所示的项添加到 /etc/syslog.conf 文件中。


    daemon.info /var/adm/message
  2. syslogd 发出重新读取其配置的信号。


    # svcadm refresh system/system-log
    

    此操作将导致来自 FTP 服务器的提示性消息被写入 /var/adm/messages 中。

Procedure如何使用 greeting text 验证 ftpaccess

要使用 greeting text 功能检查是否正确使用了 ftpaccess 文件,请执行以下操作:

  1. 将以下指令添加到 ftpaccess 文件中。


    greeting text message
    
  2. 连接到 FTP 服务器。

  3. 如果显示消息失败,请执行以下操作:

    1. 确认 ftpaccess 文件的位置是否正确。使用 strings(1) 命令获取 FTP 服务器二进制程序的文件位置。


      # strings /usr/sbin/in.ftpd | grep "^/.*ftpaccess"
    2. 检查 ftpservers 文件以查看是否已配置虚拟主机托管。

      有关详细信息,请参见 ftpaccess(4)ftpservers(4)strings(1)syslog.conf(4)pgrep(1)

Procedure如何检查由 FTP 用户执行的命令

要查看由 FTP 用户执行的命令,请使用 ftpaccess 中的 log commands 日志记录功能。

  1. 将以下指令添加到 ftpaccess 文件中以记录由 typelist 中指定的用户执行的各个命令。


    log commands typelist
    
  2. 检查写入 /etc/syslog.conf 中指定的位置的消息。

繁忙站点的配置帮助

以下列出了有关提高繁忙 FTP 站点性能的一些建议。

  1. 通常支持许多同时连接的站点应在单机模式下运行 FTP 服务器,请参见自动启动 FTP 服务器

  2. 使用 vmstat 和其他系统实用程序监视驻留 FTP 服务器的系统。如果系统资源不足,请对同时连接的数量设置限制,请参见如何设置用户登录限制。有关系统监视的更多信息,请参见《系统管理指南:高级管理》中的第 20  章 “监视系统性能(任务)”

  3. 如果强加连接限制,请考虑使用 ftpaccess 文件中的 limit-timetimeout idle 功能以阻止用户扰乱连接。如果不强加连接限制,请针对 in.ftpd 指定 -Q 选项。

  4. 如果不需要 /var/adm/wtmpx 中的 ftp 登录和注销记录,请针对 in.ftpd 指定 -W 选项。

  5. 要降低驻留 FTP 服务器的系统的负载,请使用 ftpaccess 文件中的 recvbufsendbuf 功能增加传送缓冲区大小。如果选择比较大的缓冲区大小,则可能需要使用 ftpaccess 文件中的 timeout data 功能增加数据活动超时。

  6. FTP 服务器将读取各种数据库中的内容,包括主机、口令、组和服务。较慢的查找可能会导致登录到 FTP 服务器出现严重延迟,首先在 nsswitch.conf 中配置files 资源可将查找时间降至最低。有关更多信息,请参见 nsswitch.conf(4) 手册页。

  7. 缺省情况下,FTP 服务器尝试查找远程主机的名称,此过程可能很慢,将会导致登录出现严重延迟。ftpaccess 文件中的rhostlookup 功能可用于停止此查找。但是,请注意,如果没有查找远程主机的名称,使用 ftpaccess 文件中的其他功能和匹配 ftphosts 文件中的项时,将仅匹配远程主机的 IP 地址。远程主机的 IP 地址也将在消息和 %R 魔饼位置中使用。有关更多详细信息,请参见 ftpaccess(4) 手册页中 rhostlookup 功能的说明。

  8. 检索配额信息也可能导致登录到 FTP 服务器时出现严重延迟,因此如果利用配额魔饼,请仅使用 ftpaccess 文件中的 quota-info 功能。有关配额魔饼的列表,请参见 ftpaccess(4) 手册页。