本章包括下表中说明的设置和管理 FTP 服务器的任务。
任务 |
说明 |
参考 |
---|---|---|
配置对 FTP 服务器的访问 |
使用 /etc/ftpd 目录中的 ftpaccess、ftpusers 和 ftphosts 文件可建立或限制对 FTP 服务器的访问。 | |
设置 FTP 服务器登录帐户 |
为实际用户、临时用户和匿名用户建立登录帐户。 | |
自定义消息文件 |
编辑 /etc/ftpd/ftpaccess 文件以配置 FTP 服务器,使其将消息返回到与特定事件相关的 FTP 客户机。 | |
配置对 FTP 服务器上文件的访问 |
使用 /etc/ftpd/ftpaccess 文件可指定用户类,允许该类用户执行某些命令或者从 FTP 服务器下载文件以及将文件上载到该服务器。 | |
启用有限或完整虚拟主机托管 |
使用 /etc/ftpd/ftpaccess 文件可配置 FTP 服务器,使其支持同一计算机上的多个域。 | |
启动 FTP 服务器 |
更改服务属性以在 nowait 模式、单机模式或前台模式下启动 FTP 服务器。 | |
关闭 FTP 服务器 |
使用 /etc/ftpd/ftpaccess 文件并运行 ftpshut 可关闭 FTP 服务器。 | |
对常见 FTP 服务器问题进行疑难解答 |
选中 syslogd 并使用 greeting text 和 log commands 可调试 FTP 服务器上的问题。 |
可以使用 /etc/ftpd 目录中的以下配置文件控制对 FTP 服务器的访问。
ftpusers 用于列出被拒绝访问 FTP 服务器的用户。
ftphosts 用于允许或拒绝从各种主机登录到 FTP 服务器上的各种帐户。
ftpaccess 是主 FTP 配置文件。只有使用 -a 选项调用 /etc/ftpd/ftpaccess,FTP 服务器才会读取该文件。使用 ftpaccess 文件时,所有用户必须为允许访问 FTP 服务器的某类的成员。您可以指定仅应用于特定类的许多 ftpaccess 指令。
有关详细信息,请参见 ftpusers(4)、ftphosts(4) 和 ftpaccess(4)。
在所有 FTP 服务器配置文件中,以 # 号开头的行被认为是注释。
要登录到 FTP 服务器,用户在使用 ftpaccess 文件时必须是某类的成员。要将 class 指令添加到 ftpaccess 文件中,应指定允许通过特定主机进行访问的用户的 class 名称和 typelist。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在 ftpaccess 文件中为匿名用户、临时用户和实际用户添加项。
class class typelist addrglob[addrglob...] |
用于定义 FTP 用户的关键字。
由 class 关键字定义的名称。每次登录会与所定义类的列表进行比较。已登录的用户将视为匹配的第一个类的成员。
与三类用户(anonymous、guest 和 real)匹配的、用逗号分隔的关键字列表:
域名簇或数字地址簇。addrglob 也可以是包含其他地址簇、以斜杠 (`/`) 开头的文件名:address:netmask 或 address/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
class local real,guest,anonymous *.provider.com class remote real,guest,anonymous * |
上一示例将 local 类定义为从 *.provider.com 登录的 real、guest 或 anonymous 类型的任何用户。最后一行将 remote 定义为从除 *.provider.com 之外的任何位置登录的任何用户。
您可以使用 ftpaccess 文件中设置的指令限制同时登录的某类用户的数量。每个登录限制包含类名、UUCP 样式的周日期列表和超出限制时将显示的消息文件。
要设置用户登录限制,请使用以下过程中的步骤。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中:
limit class n times [message_file] |
用于限制同时登录的关键字,即对属于某个已定义类的指定数目的用户在特定连接时段的同时登录进行限制。
由 class 关键字定义的名称。每次登录会与所定义类的列表进行比较。已登录的用户将视为匹配的第一个类的成员。
用户数。
可以连接相应类的周日期和时间。用 Any 表示任何日期。
如果用户被拒绝访问将显示的消息文件。
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)。
如果因为出现问题(如需要的信息拼写错误)导致登录到 FTP 服务器失败,则通常会重复登录。在将消息记录到 syslog 文件之前,允许用户连续尝试登录特定的次数。然后,将断开用户的连接。通过执行以下过程中的步骤,可对登录尝试失败的次数设置限制。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中。
loginfails n |
用于指定在终止 FTP 连接之前,允许登录失败的次数的关键字。
登录可以失败的次数
loginfails 10 |
上面的示例说明,在尝试登录失败 10 次后,将会断开用户与 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)。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将不允许登录到 FTP 服务器的用户的项添加到 /etc/ftpd/ftpusers 文件中。
root daemon bin sys adm lp uccp nuucp listen nobody noaccess nobody4 |
上面的示例列出了 ftpusers 文件中的典型项。用户名与 /etc/passwd 中的项匹配。该列表通常包括 root 及其他管理和系统应用程序标识。
作为安全措施,根项包括在 ftpusers 文件中。缺省安全策略是禁止 root 的远程登录。对于 /etc/default/loginfile 中设置为 CONSOLE 项的缺省值,也遵守该策略。请参见 login(1)。
除了上面提到的控制方法,还可以向 ftpaccess 文件中添加显式声明来限制对 FTP 服务器的访问。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中。
缺省情况下,允许所有用户访问缺省(非虚拟)FTP 服务器。要拒绝特定用户(anonymous 用户之外的用户)的访问,请添加以下项:
defaultserver deny username [username...] |
用于标识拒绝或允许对其进行访问的非虚拟服务器的关键字
拥有对 defaultserver 的受限制访问权限的用户的登录名
要允许 deny 行中未列出的用户的访问,请添加以下行:
defaultserver allow username [username...] |
要阻止匿名用户的访问,请添加以下项:
defaultserver private |
defaultserver deny * defaultserver allow username |
上面的示例说明,FTP 服务器拒绝除 anon 用户和 allow 行中列出的那些用户之外的所有用户的访问。
也可以使用 ftphosts 文件拒绝来自各种主机对特定登录帐户的访问。有关其他信息,请参见 ftphosts(4)。
要访问 FTP 服务器,必须先登录。FTP 服务器支持三种类型的用户登录帐户,它们分别是实际用户、临时用户和匿名用户。
实际用户具有允许他们在运行 FTP 服务器的系统上建立终端会话的帐户。整个磁盘结构对实际用户是否可见取决于目录和文件访问权限。
临时用户也需要帐户来登录到 FTP 服务器。可以使用用户名和口令设置每个临时用户帐户。为了防止临时用户建立终端会话,将不会为该类用户指定功能登录 shell。登录时,FTP 服务器执行 chroot(2) 操作以限制临时用户查看服务器的磁盘结构。
要允许实际用户和临时用户访问 FTP 服务器,必须在 /etc/shells 文件中列出他们的登录 shell。
匿名用户通过使用 ftp 或 anonymous 作为用户名来登录到 FTP 服务器。根据约定,在系统提示输入口令时,匿名用户提供电子邮件地址。
登录时,FTP 服务器执行 chroot(2) 操作以限制匿名用户查看服务器的磁盘结构。与可以为每个临时用户创建独立的区域不同,所有匿名用户共享一个文件区域。
实际用户和临时用户使用包含口令(仅一个人知道)的各个帐户登录。匿名用户登录到可能对所有用户可用的已知帐户。大多数大规模文件分发是通过使用匿名帐户创建的。
验证用户是否具有使用用户名和口令设置的可用于建立终端会话的帐户。
有关更多信息,请参见《系统管理指南:基本管理》中的第 4 章 “管理用户帐户和组(概述)”。
确认该实际用户是否是 ftpaccess 文件中某类的成员。
有关 ftpaccess 文件中定义的用户类的信息,请参见如何定义 FTP 服务器类。
验证 /etc/shells 文件中是否列出了用户的登录 shell。
ftpconfig 脚本用于将所有需要的系统文件复制到起始目录中。如果临时用户和临时用户的起始目录已存在,则 ftpconfig 脚本将会使用当前的系统文件更新该区域。
有关更多信息,请参见 ftpconfig(1M)。
与为匿名用户设置的用户名(anonymous 或 ftp)不同,FTP 临时用户的用户名不是固定的。可以选择将任何名称作为实际用户名。
要使临时用户可以访问 FTP 服务器,请执行以下操作:
使用 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 |
为临时帐户指定口令。
将 guestuser 项添加到 ftpaccess 文件中。
guestuser guest1 |
也可以使用 ftpaccess 文件中的 guestgroup 功能指定临时用户。ftpaccess 中的 guest-root 功能无需指定临时用户的起始目录路径中的 /./。
确认该临时用户是否是 ftpaccess 文件中某个 class 的成员。有关详细信息,请参见如何定义 FTP 服务器类。
使用 ftpconfig 脚本在 chroot 区域中创建需要的文件。
/usr/sbin/ftpconfig -d /home/guests |
确认 /bin/true 是否列在 /etc/shells 文件中。请参见如何创建 /etc/shells 文件。
在此示例中,将在 /home/guests 目录中设置 FTP 区域。
# /usr/sbin/ftpconfig -d /home/guests Updating directory /home/guests |
ftpconfig 脚本创建 anonymous 用户帐户并使用需要的文件填充起始目录。
有关更多信息,请参见 ftpconfig(1M)。
要使匿名用户可以访问 FTP 服务器,请按照以下说明操作:
使用 ftpconfig 脚本创建匿名用户帐户。
/usr/sbin/ftpconfig anonymous-ftp-directory |
确认是否在 ftpaccess 文件的某个 class 中指定了该匿名用户。
有关详细信息,请参见如何定义 FTP 服务器类。
在此示例中,将在 /home/ftp 目录中设置 FTP 区域。
# /usr/sbin/ftpconfig /home/ftp Creating user ftp Updating directory /home/ftp |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
创建 /etc/shells 文件。
编辑 /etc/shells。添加每个 shell 的全路径,一个路径占一行。
以下是 /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 文件中未定义主机名,则将使用本地计算机的缺省主机名。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
根据需要,编辑消息文件以包括魔饼。
有关可以使用的 cookie 的列表,请参见 ftpaccess(4)。
以下是包括魔饼的消息文件的示例:
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. |
用户登录后,屏幕上将显示与系统相关或与应用程序相关的消息。ftpaccess 文件列出了触发关联的 message 语句的事件。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中:
message message_file [when [class ...]] |
该关键字用于指定当用户登录或执行命令以更改工作目录时,将显示的消息文件。
要显示的消息文件的名称。
设置为 login 或 cwd=dir 的参数。请参见以下示例。
class 规范允许仅向特定类的成员显示消息。
message /etc/ftpd/Welcome login anon guest message .message cwd=* |
上面的示例说明,anon 或 guest 类的用户登录时将显示 /etc/ftpd/Welcome 文件。第二行说明,将对所有用户显示当前工作目录中的 .message 文件。
对于临时用户和匿名用户,将创建相对于 chroot 目录的消息文件。
首次访问目录时,可能会列出 README 文件。要配置 README 选项,请将以下项添加到 ftpaccess 文件中。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中。
readme message_file [when [class...]] |
该关键字用于指定当用户登录或更改工作目录时,将检查的消息文件。如果该消息文件存在,则将通知用户,并指出文件被修改的日期。
要检查的消息文件的名称。
设置为 login 或 cwd=dir 的参数。请参见以下示例。
class 规范允许仅向特定类的成员显示消息。
greeting 和 banner 关键字也可用于向用户发送消息。请参见 ftpaccess(4)。
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 服务器访问控制是 Solaris 发行版中可用的标准文件和目录访问控制的补充。使用标准 Solaris 命令可限制能够访问、更改或上载文件的用户。请参见 chmod(1)、chown(1) 和 chgrp(1)。
要使用 ftpaccess 中的权限功能指定哪种类型的用户允许执行哪些命令,请执行以下操作:
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 中:
command yes|no typelist |
chmod、delete、overwrite、rename 或 umask 等命令
允许或禁止用户发出命令
用逗号分隔的任何关键字(anonymous、guest 和 real)的列表
以下是对 FTP 服务器上的文件访问功能设置的权限示例。
chmod no anonymous, guest delete no anonymous overwrite no anonymous rename no anonymous umask no guest, anonymous |
上面的示例说明了以下内容:
不允许匿名用户删除、覆写或重命名文件。
禁止临时用户和匿名用户更改访问模式和重置 umask。
通过对 FTP 服务器上的目录设置权限,可以控制对 FTP 服务器执行的已启动的上载和下载操作。缺省情况下,不允许匿名用户上载。启用匿名上载时请务必小心。
向 ftpaccess 文件中添加指令以指定上载权限和上载失败的错误消息。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 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...} |
该关键字应用于起始目录(chroot() 的参数)为 root-dir 的用户。可以将 root-dir 指定为“*”以便与任何起始目录匹配。
该参数指定将 root-dir 目录路径解释为绝对路径还是相对于当前 chroot 目录的路径。
该关键字用于指定任何数量的 class=<classname> 限制。如果指定该限制,则仅在当前用户为指定的某个类的成员时,上载子句才有效。
匿名用户的用户根目录和起始目录。
与目录名称匹配的模式。可以在任何位置或单独使用星号来表示任何目录。
允许或禁止上载到 FTP 服务器的变量。
上载到 dirnames 中的文件的属主。
与上载到 dirnames 中的文件关联的组。
用于对已上载的文件指定访问权限的参数。缺省模式 0440 禁止匿名帐户读取已上载的文件。
该关键字允许或禁止用户在 dirnames 中列出的目录中创建子目录。
确定新创建目录的权限的可选模式。
控制已上载文件的名称的关键字。
用逗号分隔的任何关键字(anonymous、guest 和 real)的列表。
与 regexp 条件匹配失败时将显示的消息文件。
文件名称中允许或禁止使用的字母或数字。
upload /export/home/ftp /incoming yes ftpadm ftpadmin 0440 nodirs path-filter anonymous /etc/ftpd/filename.msg ^[-A-Za-z0-9._]*$ ^[.-] |
上面的示例说明了以下内容:
对 /export/home/ftp 使用 chroot 的 FTP 用户帐户可以上载到 /incoming 目录。已上载的文件为用户 ftpadm 和组 ftpadmin 拥有。使用 nodirs 关键字将模式设置为 0440 以阻止匿名用户创建子目录。
对于匿名用户,文件名可以是 A-Z、a-z、0-9、.(点)、-(破折号)或 _(下划线)的任意序列。文件名不能以 .(点)或 -(破折号)开头。如果文件名不能通过此过滤,则会显示消息 /etc/ftpd/filename.msg(如果 FTP 管理员已创建该消息文件)。此消息后接 FTP 服务器错误消息。
应对允许匿名上载到的目录的拥有权和权限进行严格控制。FTP 管理员应该是上载到 FTP 服务器的所有文件的属主。允许匿名用户上载文件时,需要创建 FTP 管理员。该目录应为权限设置为 3773 的用户 ftpadm 和组 ftpadm 拥有。
上载到 FTP 服务器的文件的访问模式应为 0440。0440 模式禁止匿名帐户读取已上载的文件。此限制可以防止服务器成为第三方文件分发的临时区域。
要使已上载的文件可以进行分发,FTP 管理员可以将这些文件移到公共目录中。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中可阻止用户检索文件。
noretrieve [absolute|relative] [class=classname]... [-] filename ... |
用于拒绝检索特定文件的关键字
该参数指定将 root-dir 目录路径解释为绝对路径还是相对于当前 chroot 目录的路径
该关键字用于指定要应用 noretrieve 限制的用户的 class=<classname>
不允许用户检索的文件的名称
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)。
有限虚拟主机托管提供对虚拟 FTP 服务器的部分支持。可以通过指定虚拟根目录来启用对有限虚拟主机托管的支持。如果需要,也可以在 ftpaccess 文件中设置虚拟主机的以下参数:
banner
logfile
hostname
ftpaccess 文件中的所有指令在所有虚拟服务器中全局共享。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中。
virtual address root|banner|logfile path virtual address hostname|email string |
用于启用虚拟服务器功能的关键字
虚拟服务器的 IP 地址
虚拟服务器的根目录
连接到虚拟服务器时将显示的标题文件
虚拟服务器上的文件传送记录
用于指定虚拟服务器上的目录和文件位置的变量
消息文件和 HELP 命令中使用的电子邮件地址
问候消息或状态命令中显示的主机的名称
用于指定 email 或 hostname 参数的变量
虽然可以使用 hostname 作为虚拟服务器的 address,但强烈建议您使用 IPv4 地址。为了匹配 hostname,接收 FTP 连接时 DNS 必须可用。对于 IPv6 主机,请使用主机名而不要使用 IPv6 地址。
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 目录、banner 和 logfile 的位置。
带有 -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 |
完整虚拟主机托管允许每个虚拟域使用单独的配置文件。要在 FTP 服务器上启用对虚拟主机托管的完整支持,可以创建或修改特定域的以下 FTP 配置文件:
ftpaccess
ftpusers
ftpgroups
ftphosts
ftpconversions
有关详细信息,请参见 ftpaccess(4)、ftpusers(4)、ftpgroups(4)、ftphosts(4) 和 ftpconversions(4)。
如果单独版本的配置文件不可用,则可以使用 /etc/ftpd 目录中的主版本的文件。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 /etc/ftpd/ftpservers 文件中。
address /config-file-dir |
虚拟服务器的 IP 地址
包含对虚拟主机自定义的配置文件的目录
虽然可以使用 hostname 作为虚拟服务器的 address,但强烈建议您使用 IPv4 地址。为了匹配 hostname,接收 FTP 连接时 DNS 必须可用。对于 IPv6 主机,请使用主机名而不要使用 IPv6 地址。
要为虚拟主机创建自定义版本的 FTP 服务器配置文件,请将主版本的文件从 /etc/ftpd 复制到 /config-file-dir 目录中。
有关详细信息,请参见 ftpservers(4)。
# # FTP Server virtual hosting configuration file # 10.1.2.3 /net/inet/virtual/somedomain/ 10.1.2.4 /net/inet/virtual/anotherdomain/ |
上面的示例为虚拟服务器上的两个不同域指定 IP 地址。
带有 -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 服务的大型服务器。由于独立系统无需重新启动,所以独立服务器可以为专用服务器提供较低的连接延迟。即使在非高峰时间,独立服务器也始终处于运行状态以无限等待连接。
缺省情况下,SMF 服务配置为使用 nowait 模式启动 FTP 服务器。如果站点处理许多连接,还可以在单机模式下运行 FTP 服务器。有关其他命令行选项的信息,请参见 in.ftpd(1M) 手册页。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
验证 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 |
启动 FTP 服务器。
# svcadm enable network/ftp |
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
禁用 FTP 服务器。
# svcadm disable network/ftp |
启动独立 FTP 服务器。
# /usr/sbin/in.ftpd -a -S |
将该行添加到 FTP 服务器启动脚本中。有关创建系统启动脚本的信息,请参见《系统管理指南:基本管理》中的“使用运行控制脚本”。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
禁用 FTP 服务器。
# svcadm disable network/ftp |
向 inittab 文件中添加项以启动该服务。
/etc/inittab 中的新项应与以下类似:
ftpd:3:respawn:/usr/sbin/in.ftpd -a -s |
通知 init 重新检查 /etc/inittab。
此命令应启动 FTP 服务。
# init q |
ftpshut(1M) 命令在特定时间关闭 FTP 服务器。
运行 ftpshut 时,将通过用于指定发生关闭的时间、拒绝新连接的时间和放弃现有连接的时间的命令行选项,生成一个文件。将基于此信息向用户发出服务器关闭通知。由 ftpshut 创建的文件的位置由 ftpaccess 文件中的 shutdown 指令指定。
按照以下过程中的步骤运行 ftpshut 并将 shutdown 指令添加到 ftpaccess 文件中。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
将以下项添加到 ftpaccess 文件中。
shutdown path |
该关键字用于指定一个文件的 path,要定期此文件检查以查看 FTP 服务器是否已预定关闭。
由 ftpshut 命令创建的文件的位置
运行 ftpshut 命令。
ftpshut [ -V ] [ -l min] [ -d min] time [warning-message...] |
该命令提供用于通知用户,FTP 服务器正在关闭的过程。
指定显示版权和版本信息,然后终止的选项
该标志用于调整拒绝到 FTP 服务器的新连接的时间
该标志用于调整断开到 FTP 服务器的现有连接的时间。
由单词 now 指定的立即关机的关机时间,或使用两种格式之一(+ number 或 HHMM)指定的将来关机的关机时间
关机通知消息
使用 ftprestart 命令可在关机之后重新启动 FTP 服务器。
有关详细信息,请参见 ftpshut(1M)、ftpaccess(4) 和 ftprestart(1M)。
本节介绍调试 FTP 服务器的问题的一些方法。
FTP 服务器将用于调试的消息写入为 /etc/syslog.conf 文件中的守护进程消息指定的位置。如果使用 FTP 服务器出现问题,请首先检查此文件中的这类消息。
FTP 服务器消息由工具守护进程和级别信息控制。要将来自 FTP 服务器的消息发送到 /var/adm/message 并让 syslogd 重新读取其配置文件,请按照以下说明操作:
将如下所示的项添加到 /etc/syslog.conf 文件中。
daemon.info /var/adm/message |
向 syslogd 发出重新读取其配置的信号。
# svcadm refresh system/system-log |
此操作将导致来自 FTP 服务器的提示性消息被写入 /var/adm/messages 中。
要使用 greeting text 功能检查是否正确使用了 ftpaccess 文件,请执行以下操作:
将以下指令添加到 ftpaccess 文件中。
greeting text message |
连接到 FTP 服务器。
如果显示消息失败,请执行以下操作:
确认 ftpaccess 文件的位置是否正确。使用 strings(1) 命令获取 FTP 服务器二进制程序的文件位置。
# strings /usr/sbin/in.ftpd | grep "^/.*ftpaccess" |
检查 ftpservers 文件以查看是否已配置虚拟主机托管。
有关详细信息,请参见 ftpaccess(4)、ftpservers(4)、strings(1)、syslog.conf(4) 和 pgrep(1)。
要查看由 FTP 用户执行的命令,请使用 ftpaccess 中的 log commands 日志记录功能。
将以下指令添加到 ftpaccess 文件中以记录由 typelist 中指定的用户执行的各个命令。
log commands typelist |
检查写入 /etc/syslog.conf 中指定的位置的消息。
以下列出了有关提高繁忙 FTP 站点性能的一些建议。
通常支持许多同时连接的站点应在单机模式下运行 FTP 服务器,请参见自动启动 FTP 服务器。
使用 vmstat 和其他系统实用程序监视驻留 FTP 服务器的系统。如果系统资源不足,请对同时连接的数量设置限制,请参见如何设置用户登录限制。有关系统监视的更多信息,请参见《系统管理指南:高级管理》中的第 20 章 “监视系统性能(任务)”。
如果强加连接限制,请考虑使用 ftpaccess 文件中的 limit-time 和 timeout idle 功能以阻止用户扰乱连接。如果不强加连接限制,请针对 in.ftpd 指定 -Q 选项。
如果不需要 /var/adm/wtmpx 中的 ftp 登录和注销记录,请针对 in.ftpd 指定 -W 选项。
要降低驻留 FTP 服务器的系统的负载,请使用 ftpaccess 文件中的 recvbuf 和 sendbuf 功能增加传送缓冲区大小。如果选择比较大的缓冲区大小,则可能需要使用 ftpaccess 文件中的 timeout data 功能增加数据活动超时。
FTP 服务器将读取各种数据库中的内容,包括主机、口令、组和服务。较慢的查找可能会导致登录到 FTP 服务器出现严重延迟,首先在 nsswitch.conf 中配置files 资源可将查找时间降至最低。有关更多信息,请参见 nsswitch.conf(4) 手册页。
缺省情况下,FTP 服务器尝试查找远程主机的名称,此过程可能很慢,将会导致登录出现严重延迟。ftpaccess 文件中的rhostlookup 功能可用于停止此查找。但是,请注意,如果没有查找远程主机的名称,使用 ftpaccess 文件中的其他功能和匹配 ftphosts 文件中的项时,将仅匹配远程主机的 IP 地址。远程主机的 IP 地址也将在消息和 %R 魔饼位置中使用。有关更多详细信息,请参见 ftpaccess(4) 手册页中 rhostlookup 功能的说明。
检索配额信息也可能导致登录到 FTP 服务器时出现严重延迟,因此如果利用配额魔饼,请仅使用 ftpaccess 文件中的 quota-info 功能。有关配额魔饼的列表,请参见 ftpaccess(4) 手册页。