系统管理指南:网络服务

第 6 部分 使用远程系统主题

本节提供了在 Solaris 环境中管理 FTP 服务器和访问远程系统的说明。

第 27 章 使用远程系统(概述)

本节包括有关使用远程文件的信息。

什么是 FTP 服务器?

FTP 服务器基于 wu-ftpd。wu-ftpd 最初由位于圣路易斯的华盛顿大学开发,广泛用于互联网上批量数据的分发,它是大型 FTP 站点的首选标准。有关许可条款的信息,请参阅以下位置的相关资料:/var/sadm/pkg/SUNWftpu/install/copyright

什么是远程系统?

在本章中,远程系统是指通过任何类型的物理网络连接到本地系统并且配置为进行 TCP/IP 通信的工作站或服务器。

在运行 Solaris 发行版的系统上,TCP/IP 配置在启动时自动建立。有关更多信息,请参见《系统管理指南:IP 服务》

Solaris 10 发行版对 FTP 服务的更改

Solaris 10 发行版包括一些对 FTP 服务的更改。这些更改包括对 FTP 服务器的增强以及对 ftpcountftpwhoftp 命令的更改。

FTP 服务器的增强功能可提高可伸缩性,并改进日志传送功能。这些选项将在繁忙站点的配置帮助ftpaccess(4) 手册页中介绍。具体而言:

此外,ftpcountftpwho 现在支持 -v 选项,此选项将显示在虚拟主机 ftpaccess 文件中定义的 FTP 服务器类的用户计数和进程信息。有关更多信息,请参见 ftpcount(1)ftpwho(1) 手册页。

FTP 客户机和服务器现在支持 Kerberos。有关更多信息,请参阅 ftp(4) 手册页和《System Administration Guide: Security Services》中的《系统管理指南:安全性服务》中的“Kerberos 用户命令”

ftp 命令已更改。缺省情况下,在对连接到 Solaris FTP 服务器的 Solaris FTP 客户机发出 ls 命令时,该客户机将列出目录和纯文本文件。如果 FTP 服务器未在 Solaris OS 中运行,则可能不会列出目录。要在连接到非 Solaris FTP 服务器时执行缺省 Solaris 行为,可在每台 Solaris 客户机上相应地编辑 /etc/default/ftp 文件。要对单个用户进行更改,可将 FTP_LS_SENDS_NLST 环境变量设置为 yes。有关更多信息,请参见 ftp(4) 手册页。

ftpd 守护进程由服务管理工具管理。 可使用 svcadm 命令对此服务执行管理操作,如启用、禁用或重新启动。可使用 svcs 命令来查询此服务对应所有守护进程的状态。有关服务管理工具的概述,请参阅《System Administration Guide: Basic Administration》中的《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”

Solaris 9 FTP 服务器的新增功能

Solaris 9 发行版对 FTP 服务器作了大量更改,所以 Solaris 10 发行版中保留了本节。此 FTP 服务器与 Solaris 8 FTP 软件兼容,但为 Solaris 9 用户提供了改进了性能的新功能。

表 27–1 Solaris 9 FTP 服务器的新增功能

功能 

说明 

参考 

按类型和位置进行的用户分类 

允许您根据类型和地址定义用户类 

如何定义 FTP 服务器类

对每个类的限制 

根据在 ftpaccess 文件中设置的限制,控制允许同时登录的某类用户的数量。

如何设置用户登录限制

系统范围的和与目录相关的消息 

显示为特定事件指定的消息 

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

每个目录的上载权限 

允许您控制到 FTP 服务器的上载,包括文件和目录创建及权限。 

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

文件名过滤器 

允许您指定上载文件的名称中的可接受字符以及顺序。 

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

虚拟主机支持 

允许您将 FTP 服务器配置为在一台计算机上支持多个域 

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

命令日志记录 

允许对由实际用户、临时用户和匿名 FTP 用户执行的命令记录日志 

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

传送日志记录 

允许对实际用户、临时用户和匿名 FTP 用户的传送记录日志 

ftpaccess(4)xferlog(4)in.ftpd(1M)

按需压缩并归档 

允许使用 ftpconversions 文件中指定的转换来根据需要进行压缩和归档

ftpconversions(4), ftpaccess(4)

以下列表给出了更高发行版中不支持的 Solaris 8 功能。

第 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) 手册页。

第 29 章 访问远程系统(任务)

本章介绍登录到远程系统并管理其文件所需的全部任务。以下是本章中的逐步说明列表。

访问远程系统(任务列表)

本章介绍了用于登录远程系统并从中复制文件的任务,如下表中所述。

表 29–1 任务列表: 访问远程系统

任务 

说明 

参考 

登录到远程系统 (rlogin)

 

  • 删除 .rhosts 文件。

  • 使用 rlogin 命令访问远程系统。

如何搜索并删除 .rhosts 文件

如何查明远程系统是否在运行

如何查找已登录到远程系统的用户

如何登录到远程系统 (rlogin)

如何从远程系统注销 (exit)

登录到远程系统 (ftp)

 

  • 打开和关闭 ftp 连接。

  • 将文件复制到远程系统,以及从远程系统复制文件。

如何打开与远程系统的 ftp 连接

如何关闭与远程系统的 ftp 连接

如何从远程系统复制文件 (ftp)

如何将文件复制到远程系统 (ftp)

使用 rcp 复制远程文件

使用 rcp 命令将文件复制到远程系统,以及从远程系统复制文件。

如何在本地系统和远程系统间复制文件 (rcp)

登录到远程系统 (rlogin)

通过 rlogin 命令,可以登录到远程系统。登录之后,可以浏览远程文件系统并处理其内容(受授权限制)、复制文件或执行远程命令。

如果要登录到的系统位于远程域中,请务必在系统名称后附加域名。在以下示例中,SOLAR 是远程域的名称:

rlogin pluto.SOLAR

此外,也可以通过键入 Ctrl-D 组合键随时中断远程登录操作。

远程登录验证 (rlogin)

通过远程系统或网络环境,可以执行 rlogin 操作的验证(确定身份)。

这些验证形式的主要差别在于它们要求与您进行的交互类型以及建立验证的方式。如果远程系统尝试对您进行验证,则除非您设置 /etc/hosts.equiv.rhosts 文件,否则将提示您输入口令。如果网络尝试对您进行验证,则不会要求您输入口令,因为网络已经知道您的身份。

当远程系统尝试对您进行验证时,将会依据其本地文件中的信息,尤其是在满足下列其中一个条件时:

网络验证依据下列两种方法之一:


注 –

网络验证通常会取代系统验证。


/etc/hosts.equiv 文件

/etc/hosts.equiv 文件包含远程系统的可信主机列表,每行列示一台主机。如果用户尝试从此文件中列出的主机之一远程登录(使用 rlogin 命令),并且如果远程系统可以访问用户的口令项,则远程系统允许用户在不使用口令的情况下登录。

典型的 hosts.equiv 文件具有以下结构:


host1

host2 user_a

+@group1

-@group2

如果在 hosts.equiv 中创建一个简单的主机项(如上述 host1 项),则表示该主机是可信的,该计算机中的任何用户也是可信的。

如果还包含用户名(如示例中的第二项),则该主机只有在指定用户尝试访问时才可信。

前面带有加号 (+) 的组名表示,该网络组中的所有计算机均被视为可信。

前面带有减号 (–) 的组名表示,该网络组中的所有计算机均被视为不可信。

使用 /etc/hosts.equiv 文件时的安全风险

/etc/hosts.equiv 文件存在安全风险。如果将 /etc/hosts.equiv 文件保存在系统上,则应仅包含网络中的可信主机。该文件不应包含属于不同网络的任何主机或公共区域中的所有计算机。例如,不应包含终端室内的主机。

使用不受信任的主机可能产生严重的安全问题。请将 /etc/hosts.equiv 文件替换为正确配置的文件,或者完全删除该文件。

/etc/hosts.equiv 文件中的一个 + 行表示信任所有已知主机。

.rhosts 文件

.rhosts 文件是 /etc/hosts.equiv 文件的用户等效文件。此文件包含主机-用户组合列表,而不包含一般意义的主机。如果此文件中列出了主机-用户组合,则指定用户将被授予从指定主机登录而不必提供口令的权限。

请注意,.rhosts 文件必须驻留在用户起始目录的顶层。如果 .rhost 文件位于子目录中,则不会访问这些文件。

用户可在其起始目录中创建 .rhosts 文件。使用 .rhosts 文件是另外一种允许在不使用 /etc/hosts.equiv 文件的情况下,在不同系统的用户自己帐户之间进行受信任访问的方法。

使用 .rhosts 文件时的安全风险

遗憾的是,.rhosts 文件存在严重的安全问题。虽然 /etc/hosts.equiv 文件受系统管理员的控制并且可以有效地管理,但任何用户都可以创建 .rhosts 文件,从而可以在系统管理员不知情时对其选择的任何人授予访问权限。

如果所有用户起始目录都在一台服务器上,并且只有某些人员才在该服务器上具有超级用户权限,则防止用户使用 .rhosts 文件的一种好方法就是以超级用户身份在用户起始目录中创建一个空文件。然后,将此文件的权限更改为 000,这样即使作为超级用户也很难更改它。此更改可有效地防止用户因不负责任地使用 .rhosts 文件而导致的系统安全风险。但是,如果用户能够更改指向其起始目录的有效路径,则此更改将不能解决任何问题。

管理 .rhosts 文件的唯一安全方法是完全禁用它们。有关详细说明,请参见如何搜索并删除 .rhosts 文件。作为系统管理员,可以经常检查系统以了解此策略的违规情况。此策略可能存在一种例外情况,即超级用户帐户可能需要使用 .rhosts 文件来执行网络备份和其他远程服务。

链接远程登录

如果系统配置正确,则可链接远程登录。 例如,earth 中的用户可登录到 jupiter,并从该处决定登录到 pluto

该用户也可以从 jupiter 注销然后直接登录到 pluto,但此类型的链接更加方便。

要链接远程登录而不必提供口令,必须正确设置 /etc/hosts.equiv.rhosts 文件。

直接或间接远程登录

通过 rlogin 命令,可以直接或间接地登录到远程系统。

使用缺省用户名(即当前登录到本地系统的个人用户名)尝试直接远程登录。这是最常见的远程登录形式。

在远程登录操作时,可以通过提供不同的用户名来尝试间接远程登录。 这是在从临时借用的工作站尝试登录的情况下采用的远程登录方式。例如,如果您在同事的办公室并且需要检查您的起始目录中的文件,则可以从同事的系统远程登录到您的系统。但是,在执行间接远程登录时应提供您自己的用户名。

下表概述了直接和间接登录与验证方法之间的相关性。

表 29–2 登录方法与验证方法 (rlogin) 之间的相关性

登录类型 

用户名提供者 

验证 

口令 

直接 

系统 

网络 

无 

 

 

系统 

必需 

间接 

用户 

网络 

无 

 

 

系统 

必需  

远程登录后发生的情况

登录到远程系统时,rlogin 命令将尝试查找您的起始目录。如果 rlogin 命令找不到您的起始目录,它会将您指定给远程系统的根 (/) 目录。例如:


Unable to find home directory, logging in with / 

但是,如果 rlogin 命令找到您的起始目录,它将获取 .cshrc.login 文件。因此,在远程登录后,提示符即成为标准登录提示符,并且当前目录与本地登录时的目录相同。

例如,如果常规提示符显示系统名和工作目录,并且在登录时工作目录是您的起始目录,则登录提示符与以下类似:


earth(/home/smith):

随后,当您登录到远程系统时,则不管您从哪个目录输入 rlogin 命令,都会显示类似的提示符并且工作目录是您的起始目录:


earth(/home/smith): rlogin pluto

.

.

.

pluto(/home/smith):

唯一的差别在于远程系统名称将替代提示符开头的本地系统名称。远程文件系统相当于您的起始目录。

实际上,如果将目录更改为 /home 然后运行 ls,则会显示以下内容:


earth(home/smith): cd ..

earth(/home): ls

smith  jones

Procedure如何搜索并删除 .rhosts 文件

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

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

  2. 使用 find(1) 命令搜索并删除 .rhosts 文件。


    # find home-directories -name .rhosts -print -exec rm {} \;
    
    home-directories

    标识指向用户起始目录所在目录的路径。请注意,一次可输入多个路径来搜索多个起始目录。

    -name .rhosts

    标识文件名。

    -print

    列显当前路径名。

    -exec rm {} \;

    指示 find 命令将 rm 命令应用于通过匹配文件名标识的所有文件。

    find 命令将从指定目录开始搜索名为 .rhosts 的所有文件。如果找到此类文件,find 将在屏幕上列显相应路径并删除该文件。


示例 29–1 搜索并删除 .rhosts 文件

以下示例搜索并删除 /export/home 目录的所有用户起始目录中的 .rhosts 文件。


# find /export/home -name .rhosts -print | xargs -i -t rm {} \;

如何查明远程系统是否在运行

使用 ping 命令查明远程系统是否在运行。


$ ping system-name | ip-address
system-name

远程系统的名称

ip-address

远程系统的 IP 地址

ping 命令将返回以下三条消息之一:

状态消息 

说明 

system-name is alive

可通过网络访问系统。 

ping: unknown host system-name

系统名未知。 

ping: no answer from system-name

系统已知,但当前未运行。  

如果您对其执行 "ping" 操作的系统位于其他域中,则返回消息还可包含路由信息,不过您可以忽略该信息。

ping 命令的超时时间为 20 秒。实际上,如果该命令在 20 秒内未接收到响应,则会返回第三条消息。您可以通过键入 time-out 值(以秒为单位),强制 ping 等待更长(或更短)的时间:


$ ping system-name | ip-address time-out

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

如何查找已登录到远程系统的用户

使用 rusers(1) 命令查找已登录到远程系统的用户。


$ rusers [-l] remote-system-name
rusers

(无选项)显示系统名称,后跟当前已登录到系统的用户的名称,包括超级用户

-l

显示有关每个用户的其他信息:用户的登录窗口、登录时间和日期、已登录时间以及用户从中登录的远程系统的名称


示例 29–2 查找已登录到远程系统的用户

以下示例显示 rusers 的简短输出。


$ rusers pluto

pluto    smith  jones

在以下示例中,较长版本的 rusers 显示两个用户已登录到远程系统 starbug。第一个用户在 9 月 10 日从系统控制台登录并且已登录 137 小时 15 分钟。第二个用户在 9 月 14 日从远程系统 mars 登录。


$rusers -l starbug

root         starbug:console           Sep 10 16:13  137:15

rimmer       starbug:pts/0             Sep 14 14:37         (mars)

如何登录到远程系统 (rlogin)

使用 rlogin(1) 命令登录到远程系统。


$ rlogin [-l user-name] system-name
rlogin

(无选项)使用当前用户名有效地直接登录到远程系统

-l user-name

使用您提供的用户名有效地间接登录到远程系统

如果网络尝试对您进行验证,将不会提示您输入口令。如果远程系统尝试对您进行验证,则会要求您提供口令。

如果操作成功,则 rlogin 命令会显示有关您最近登录该系统的简要信息、远程系统上运行的操作系统版本以及您的起始目录中是否有邮件等待查阅。


示例 29–3 登录到远程系统 (rlogin)

以下示例显示直接远程登录 pluto 的输出。网络已对用户进行了验证。


$ rlogin starbug

Last login: Mon Jul 12 09:28:39 from venus

Sun Microsystems Inc.   SunOS 5.8       February 2000

starbug:

以下示例显示间接远程登录 pluto 的输出,并且用户由远程系统进行验证。


$ rlogin -l smith pluto

password: user-password

Last login: Mon Jul 12 11:51:58 from venus

Sun Microsystems Inc.   SunOS 5.8       February 2000

starbug: 

如何从远程系统注销 (exit)

使用 exit(1) 命令从远程系统注销。


$ exit

 

示例 29–4 从远程系统注销 (exit)

此示例说明用户 smith 如何从系统 pluto 注销。


$ exit

pluto% logout

Connection closed.

earth% 

登录到远程系统 (ftp)

ftp 命令打开 Internet 文件传输协议的用户接口。此用户接口又称为命令解释程序,它允许您登录到远程系统并对其文件系统执行各种操作。下表概述了主要操作。

rloginrcp 相比,ftp 的主要优点在于 ftp 不要求远程系统运行 UNIX。不过,远程系统却需要进行 TCP/IP 通信配置。但是,与 ftp 相比,rlogin 提供使用的文件处理命令更丰富。

远程登录验证 (ftp)

通过以下方法之一,可以建立 ftp 远程登录操作验证:

基本 ftp 命令

表 29–3 基本 ftp 命令

命令 

说明 

ftp

访问 ftp 命令解释程序。

ftp remote-system

建立与远程系统的 ftp 连接。有关说明,请参见如何打开与远程系统的 ftp 连接

open

从命令解释程序登录到远程系统。 

close

从远程系统注销并返回到命令解释程序。 

bye

退出 ftp 命令解释程序。

help

列出所有 ftp 命令;或者如果提供了命令名称,则简要说明该命令所执行的操作。

reset

使命令-回复序列与远程 ftp 服务器再次同步。

ls

列出远程工作目录的内容。 

pwd

显示远程工作目录的名称。 

cd

更改远程工作目录。 

lcd

更改本地工作目录。 

mkdir

在远程系统上创建目录。 

rmdir

删除远程系统上的目录。 

get, mget

将远程工作目录中的某个文件(或多个文件)复制到本地工作目录。 

put, mput

将本地工作目录中的某个文件(或多个文件)复制到远程工作目录。 

delete, mdelete

删除远程工作目录中的某个文件(或多个文件)。 

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

Procedure如何打开与远程系统的 ftp 连接

  1. 确保您具有 ftp 验证。

    您必须具有 ftp 验证,如远程登录验证 (ftp) 中所述。

  2. 使用 ftp 命令打开与远程系统的连接。


    $ ftp remote-system
    

    如果连接成功,则会显示确认消息和提示。

  3. 键入用户名。


    Name (remote-system:user-name): user-name
    
  4. 如有提示,请键入口令。


    331 Password required for user-name:
    
    Password: password
    

    如果要访问的系统已建立了匿名 ftp 帐户,将会提示您输入电子邮件地址作为口令。如果 ftp 接口接受您的口令,则它会显示确认消息和 (ftp>) 提示符。

    您现在可使用 ftp 接口提供的任何命令,包括 help。表 29–3 概述了主要命令。


示例 29–5 打开与远程系统的 ftp 连接

ftp 会话由远程系统 pluto 中的用户 smith 建立:


$ ftp pluto

Connected to pluto.

220 pluto FTP server ready.

Name (pluto:smith): smith

331 Password required for smith:

Password: password

230 User smith logged in.

ftp>

如何关闭与远程系统的 ftp 连接

使用 bye 命令关闭与远程系统的 ftp 连接。


ftp> bye

221-You have  transferred 0 bytes in 0 files.

221-Total traffic for this sessions was 172 bytes in 0 transfers.

221-Thanks you for using the FTP service on spdev.

221 Goodbye.

此时将显示再见消息,随后会出现常规 shell 提示符。

Procedure如何从远程系统复制文件 (ftp)

  1. 转至要将远程系统中的文件复制到其中的本地系统目录。


    $ cd target-directory
    
  2. 建立 ftp 连接。

    请参见如何打开与远程系统的 ftp 连接

  3. 转至源目录。


    ftp> cd source-directory
    

    如果系统正在使用自动挂载程序,则远程系统用户的起始目录可能与 /home 中您的起始目录并行。

  4. 确保您对源文件具有读取权限。


    ftp> ls -l
    
  5. 将传送类型设置为 binary


    ftp> binary
    
  6. 要复制单个文件,请使用 get 命令。


    ftp> get filename 
    
  7. 要一次复制多个文件,请使用 mget 命令。


    ftp> mget filename [filename ...]

    您可提供一系列单个文件名,也可使用通配字符。mget 命令会分别复制每个文件,并且每次都要求您进行确认。

  8. 关闭 ftp 连接。


    ftp> bye
    

示例 29–6 从远程系统复制文件 (ftp)

在此示例中,用户 kryten 将打开与系统 plutoftp 连接,并使用 get 命令来复制 /tmp 目录中的单个文件。


$ cd $HOME

ftp pluto

Connected to pluto.

220 pluto FTP server (SunOS 5.8) ready.

Name (pluto:kryten): kryten

331 Password required for kryten.

Password: xxx

230 User kryten logged in.

ftp> cd /tmp

250 CWD command successful.

ftp> ls

200 PORT command successful.

150 ASCII data connection for /bin/ls (129.152.221.238,34344) 

(0 bytes).

dtdbcache_:0

filea

files

ps_data

speckeysd.lock

226 ASCII Transfer complete.

53 bytes received in 0.022 seconds (2.39 Kbytes/s)

ftp> get filea

200 PORT command successful.

150 ASCII data connection for filea (129.152.221.238,34331) 

(0 bytes).

221 Goodbye.

在此示例中,同一用户 kryten 使用 mget 命令将 /tmp 目录中的一组文件复制到其起始目录。请注意,kryten 可以接受或拒绝该文件组中的个别文件。


$ ftp> cd /tmp

250 CWD command successful.

ftp> ls files

200 PORT command successful.

150 ASCII data connection for /bin/ls (129.152.221.238,34345) 

(0 bytes).

fileb

filec

filed

remote: files

21 bytes received in 0.015 seconds (1.36 Kbytes/s)

ftp> cd files

250 CWD command successful.

ftp> mget file*

mget fileb? y

200 PORT command successful.

150 ASCII data connection for fileb (129.152.221.238,34347) 

(0 bytes).

226 ASCII Transfer complete.

mget filec? y

200 PORT command successful.

150 ASCII data connection for filec (129.152.221.238,34348) 

(0 bytes).

226 ASCII Transfer complete.

mget filed? y

200 PORT command successful.

150 ASCII data connection for filed (129.152.221.238,34351) 

(0 bytes).

226 ASCII Transfer complete.200 PORT command successful.

ftp> bye

221 Goodbye.

Procedure如何将文件复制到远程系统 (ftp)

  1. 转至本地系统上的源目录。

    您键入 ftp 命令的目录是本地工作目录,也即此操作的源目录。

  2. 建立 ftp 连接。

    请参见如何打开与远程系统的 ftp 连接

  3. 转至目标目录。


    ftp> cd target-directory
    

    请记住,如果系统正在使用自动挂载程序,则远程系统用户的起始目录可能与 /home 中您的起始目录并行。

  4. 确保您对目标目录具有写入权限。


    ftp> ls -l target-directory
    
  5. 将传送类型设置为 binary。


    ftp> binary
    
  6. 要复制单个文件,请使用 put 命令。


    ftp> put filename
    
  7. 要一次复制多个文件,请使用 mput 命令。


    ftp> mput filename [filename ...]

    您可提供一系列单个文件名,也可使用通配字符。mput 命令会分别复制每个文件,并且每次都要求您进行确认。

  8. 要关闭 ftp 连接,请键入 bye


    ftp> bye
    

示例 29–7 将文件复制到远程系统 (ftp)

在此示例中,用户 kryten 将打开与系统 plutoftp 连接,并使用 put 命令将其系统中的文件复制到系统 pluto 上的 /tmp 目录。


$ cd /tmp

ftp pluto

Connected to pluto.

220 pluto FTP server (SunOS 5.8) ready.

Name (pluto:kryten): kryten

331 Password required for kryten.

Password: xxx

230 User kryten logged in.

ftp> cd /tmp

250 CWD command successful.

ftp> put filef

200 PORT command successful.

150 ASCII data connection for filef (129.152.221.238,34356).

226 Transfer complete.

ftp> ls

200 PORT command successful.

150 ASCII data connection for /bin/ls (129.152.221.238,34357) (0 bytes).

dtdbcache_:0

filea

filef

files

ps_data

speckeysd.lock

226 ASCII Transfer complete.

60 bytes received in 0.058 seconds (1.01 Kbytes/s)

ftp> bye

221 Goodbye.

在此示例中,同一用户 kryten 使用 mput 命令将其起始目录中的一组文件复制到 pluto/tmp 目录。请注意,kryten 可以接受或拒绝该文件组中的个别文件。


$ cd $HOME/testdir

$ ls

test1   test2   test3

$ ftp pluto

Connected to pluto.

220 pluto FTP server (SunOS 5.8) ready.

Name (pluto:kryten): kryten

331 Password required for kryten.

Password: xxx

230 User kryten logged in.

ftp> cd /tmp

250 CWD command successful.

ftp> mput test*

mput test1? y

200 PORT command successful.

150 ASCII data connection for test1 (129.152.221.238,34365).

226 Transfer complete.

mput test2? y

200 PORT command successful.

150 ASCII data connection for test2 (129.152.221.238,34366).

226 Transfer complete.

mput test3? y

200 PORT command successful.

150 ASCII data connection for filef (129.152.221.238,34356).

226 Transfer complete.

ftp> bye

221 Goodbye.

使用 rcp 进行远程复制

rcp 命令可在本地系统与远程系统或两个远程系统之间复制文件或目录。您可从远程系统使用此命令(使用 rlogin 命令登录后),也可从本地系统(在未登录到远程系统的情况下)使用此命令。

使用 rcp,可执行以下远程复制操作:

如果正在运行自动挂载程序,则可以使用 cp 命令来执行这些远程操作。但是,cp 只能应用于自动挂载程序创建的虚拟文件系统以及与用户起始目录有关的操作。由于 rcp 可以执行同样的操作而没有这些约束,因此本节仅介绍如何使用 rcp 来完成这些任务。

复制操作的安全注意事项

要在系统间复制文件或目录,必须具有登录和复制文件的权限。


注意 – 注意 –

cprcp 命令都可以覆写文件而不发出任何警告。执行该命令之前,请确保文件名正确。


指定源和目标

借助 C shell 中的 rcp 命令,可使用绝对或缩写路径名指定源(要复制的文件或目录)和目标(将文件或目录复制到的位置)。

 

绝对路径名 

缩写路径名 

从本地系统 

mars:/home/jones/myfile.txt

~jones/myfile.txt

在远程登录后 

/home/jones/myfile.txt

~jones/myfile.txt

绝对路径名可标识特定系统上挂载的文件或目录。在前面的示例中,第一个绝对路径名标识 mars 系统上的文件 (MyFile.txt)。缩写路径名标识相对于用户起始目录的文件或目录,而不管起始目录的驻留位置如何。在前面的第一个示例中,缩写路径名标识的是同一个 MyFile.txt 文件,只不过使用 "~" 符号来表示 jones 起始目录:

~ = mars:/home/jones

第二行中的示例向用户演示远程登录后的绝对路径名和缩写路径名。缩写路径名的差别并不明显。不过,由于远程登录操作将 jones 起始目录挂载到本地系统上(相当于本地用户的起始目录),因此绝对路径名不再需要指明系统名 mars。有关远程登录操作如何挂载其他用户的起始目录的更多信息,请参见远程登录后发生的情况

下表提供了 C shell 识别的绝对路径名和缩写路径名的样例。该样例使用的术语如下:

表 29–4 允许使用的目录和文件名语法

登录到 

语法 

说明 

本地系统  

.

本地工作目录 

 

path/filename

本地工作目录中的pathfilename

 

~

当前用户的起始目录 

 

~/path/filename

当前用户起始目录下的 pathfilename

 

~user

user 的起始目录

 

~user/path/filename

user 起始目录下的 pathfilename

 

remote-system:path/filename

远程工作目录中的 pathfilename

远程系统 

.

远程工作目录 

 

filename

远程工作目录中的 filename

 

path/filename

远程工作目录中的 pathfilename

 

~

当前用户的起始目录 

 

~/path/filename

当前用户起始目录中的 pathfilename

 

~user

user 的起始目录

 

~/user/path/filename

user 起始目录下的 pathfilename

 

local-system:path/filename

本地工作目录中的pathfilename

Procedure如何在本地系统和远程系统间复制文件 (rcp)

  1. 确保您具有复制权限。

    您至少应在源系统上具有读取权限,在目标系统上具有写入权限。

  2. 确定源和目标的位置。

    如果不知道源或目标的路径,可以先按如何登录到远程系统 (rlogin)中所述使用 rlogin 命令登录到远程系统。然后,浏览远程系统直到找到该位置。从而,可在未注销的情况下执行下一步。

  3. 复制文件或目录。


    $ rcp [-r] source-file|directory   target-file|directory
    
    rcp

    (无选项)将源中的单个文件复制到目标。

    -r

    将源中的目录复制到目标。

    无论您登录到远程系统还是登录到本地系统,此语法都适用。只是文件或目录的路径名要进行相应更改,如表 29–4 及以下样例所示。

    您可使用 "~" 和 "." 字符来指定本地文件或目录名称的路径部分。但是请注意,"~" 适用于当前用户而不适用于远程系统,"." 适用于所登录到的系统。有关这些符号的说明,请参见表 29–4


示例 29–8 使用 rcp 将远程文件复制到本地系统

在此示例中,rcp 用于将远程系统 pluto/home/jones 目录中的文件 letter.doc 复制到本地系统 earth 上的工作目录 (/home/smith):


earth(/home/smith): rcp pluto:/home/jones/letter.doc .

在此情况下,rcp 操作是在未远程登录的情况下执行的。此处,命令行结尾的 "." 符号表示本地系统而非远程系统。

目标目录也是本地用户的起始目录,因此还可使用 "~" 符号来指定它。



示例 29–9 使用 rloginrcp 将远程文件复制到本地系统

在此示例中,rcp 操作在执行 rlogin 命令之后运行,以将远程系统中的文件复制到本地系统。尽管该操作的流程与前一示例的流程相同,但已针对远程登录更改了路径:


earth(/home/smith): rlogin pluto

.

.

.

pluto(/home/jones): rcp letter.doc ~

在此情况下,不适合在命令行结尾使用 "." 符号。由于远程登录,因此该符号仅表示远程系统-实质上指示 rcp 创建重复文件。但是,"~" 符号表示当前用户的起始目录,即使登录远程系统也是如此。



示例 29–10 使用 rcp 将本地文件复制到远程系统

在此示例中,rcp 用于将本地系统 earth 的起始目录 (/home/smith) 中的文件 notice.doc 复制到远程系统 pluto/home/jones 目录:


earth(/home/smith): rcp notice.doc pluto:/home/jones

由于未提供远程文件名,因此文件 notice.doc 将以相同名称复制到 /home/jones 目录。

在下述情况下,将重复执行前面示例中的 rcp 操作,但 rcp 是从本地系统上的另一工作目录 (/tmp) 输入的。请注意,"~" 符号用于表示当前用户的起始目录:


earth(/tmp): rcp ~/notice.doc pluto:/home/jones


示例 29–11 使用 rloginrcp 将本地文件复制到远程系统

在此示例中,rcp 操作在执行 rlogin 命令之后运行,以将本地文件复制到远程目录。尽管该操作的流程与先前示例的流程相同,但路径已经针对远程登录进行了更改。


earth(/home/smith): rlogin pluto

.

.

.

pluto(/home/jones): rcp ~/notice.doc .

在此情况下,"~" 符号可用来指示当前用户的起始目录,即使该目录位于本地系统上。由于用户已登录到远程系统,因此 "." 符号表示远程系统上的工作目录。以下是可执行相同操作的替换语法:


pluto(/home/jones): rcp earth:/home/smith/notice.doc /home/jones