下一步 上一步 目录

4. 逐步指南

所需材料

以下是步骤

4.1 获取 RH

购买或以其他方式获得 RedHat 7.0(以下简称 RH,更新时最新版本号为 7.0)发行版和 兼容的 硬件。可以从 http://www.cheapbytes.com 以大约 3.00 美元(包括运费和手续费)的价格获得完整的 RH CDROM。此版本不包含安全 Web 服务器和额外的软件等奢侈品。对于这些,您应该访问 RedHat 网站。或者,对于某些人来说,购买预装 Linux RH 的 PC 可能也是一个选择。

4.2 安装 RH

按照*包装上的说明*安装 RH(稍后可能会在此处添加)。CDROM 安装非常容易执行。我建议使用文本模式设置,在我的情况下,他们的图形界面设置完全失败了。当询问安装类型(服务器/工作站/自定义)时,选择服务器或自定义(如果您知道自己在做什么)- 您始终可以在以后添加软件。进一步概述了一些其他重要的安装决策。对于 RH 6.0 和 6.1,您可能还能够向工作站设置添加软件包,但在 RH 6.2 及更高版本 (7.0) 中,所有服务器服务都被禁用,并且需要进行大量调整 - 因此强烈建议仅使用服务器或自定义。

4.3 一些安装技巧

如果您的硬件确实是 兼容的,则安装过程将正确检测并配置它。否则,请参阅相应的文档以解决网卡、调制解调器、显卡等问题(主要是 HOWTO 和 mini-HOWTO,其中一些在下面的参考部分中)。

以下是一些关于磁盘空间分区的想法。阅读 Linux 分区 HOWTO(有点过时)以了解有关分区功能及其在不同类型的服务器设置中的大小的一些一般提示。

假设我们正在为一百个以下的用户设置服务器。我们将需要单独的 /tmp、/var 和 /home 分区(当然还有交换分区)。如果您的硬盘驱动器约为 4 GB,则大约 300 MB 是 /tmp,100MB 交换分区,1 GB /var(您需要充足的日志记录),以及 1GB /home。剩余的 1.6GB 将是根分区(没有单独的 /usr)。/home 和 / 之间的划分可能取决于您计划托管的网页数量 - 页面越多,/home 的空间就越大。为了增强安全性,最好对 /tmp、/var 和 /home 分区(在 /etc/fstab 中)设置一些限制(类似于我的 公共浏览器工作站 HOWTO 中描述的那些)。

如果您的网卡被正确检测到,系统会要求您输入机器的 IP 地址、网关地址和网络掩码以及 DNS 服务器的地址(如果您计划以这种方式设置,则可能是您自己的机器)。准备好所有这些信息。此外,系统还会要求您输入机器名称和域名。我们将使用示例域名 you.com,并将机器命名为 ns(这给了我们一个完全限定域名 (FQDN) ns.you.com)。您应该使用您注册的任何域名(请参阅下面的参考部分中的“设置新域名 Mini-HOWTO”链接)并打算用作您的主域名(而不是虚拟域名)。对于网关地址,我们将使用示例地址 111.222.333.111。网关很可能是将您的机器(或您的 LAN)连接到外部世界的路由器。

启用 shadowMD5 密码以提高安全性。前者使包含加密密码的文件只能由 root 用户读取,后者允许更长且更难破解的密码。由于它将是一台独立机器,因此不要启用 NIS/NFS。

安装完成后,机器重新启动,您将看到登录提示。输入登录名和密码(对于 root 帐户),然后开始配置您的新 Linux 工作站。

4.4 一些初步的安全配置

首先(也是最快的),在你的 /etc/hosts.deny 文件中添加一行:ALL:ALL。这将(在一定程度上)阻止其他人在您进行配置时访问您的机器。这也将阻止您自己这样做。对于进一步的配置工作(可以通过远程方式完成),建议使用 安全 shell。从众多站点之一下载 RH 的 RPM 软件包,并使用以下命令(以 root 身份)安装它: rpm -U ssh*rpm 或类似命令(取决于版本)。您将必须同时获取客户端和服务器软件包(如果您想从这台机器以及到这台机器进行 ssh 连接)。安装后,RPM 软件包会自动运行所有必要的安装后命令(如服务器密钥生成)。您将必须使用命令 /etc/rc.d/init.d/sshd start 手动启动服务器。一些早期版本的 ssh1 以及所有使用 RSAREF 库编译的 ssh1 版本都包含缓冲区溢出漏洞。使用 ssh2 或不带 RSAREF 的最新版本的 ssh1。如果您这样做,您将必须在 /etc/hosts.allow 文件中允许从某些受信任的机器(稍后描述)使用 ssh 进行访问。RedHat 7.0 现在包含 OpenSSH 克隆,它同时支持 ssh1 和 ssh2 协议。它的配置几乎与 ssh 相同。它在配置方面比 ssh 有一些小的优势(例如,默认情况下不进行 X11 转发),否则是相同的。Sshd(作为守护程序运行时)也将参考 /etc/hosts.deny/etc/hosts.allow 进行访问控制。

如果您想真正严格地进行配置,请通过给出命令 init 1 进入单用户模式,在这种情况下,所有工作都将在本地完成,并且您将无法测试您的网络相关配置,因为网络在此模式下不可用。

为了进一步增强您的安全性,可以使用 ipchains 软件(通常是您的 Linux 发行版的一部分)(有关此信息,请参阅 IPCHAINS HOWTO,参考部分中的链接)。配置它比 TCP wrappers 需要更多的工作,尽管也有一些自动化工具可用于此。

4.5 删除不必要的服务

现在让我们处理不必要的服务。请注意,我对“不必要”的想法可能与您的想法并非 100% 相同。此外,现在许多人认为 telnet 不仅是不必要的,而且实际上是完全不受欢迎的。使用 ssh,永远忘记 telnet!

  1. /etc/inetd.conf 启动的服务(RedHat 7.0 引入了更高级的 /etc/xinetd.conf,它使用稍微不同的语法,请参见下文)

    注释掉所有行,但以下行除外

    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -L -l -i -a
    telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
             
    
    使用命令检查这一点:grep -v '\#' /etc/inetd.conf

    如果您将使用安全 shell (ssh),则 telnet 也是不必要的,可以删除。安全 shell 可以作为守护程序在系统启动时启动,也可以作为 /etc/inetd.conf 中的服务启动。默认配置(由 RPM 软件包使用)是将其作为守护程序启动。可以编译 Sshd 以参考 /etc/hosts.allow 文件进行访问控制。在这种情况下,虽然您的 /etc/inetd.conf 中没有它,但它仍然会使用 /etc/hosts.allow/etc/hosts.deny 中的设置。此方法的优点是连接速度更快,因为 sshd 不必在每次有人连接时都重新生成服务器密钥。另一方面,如果您从 /etc/inetd.conf 启动它,它将与外部世界更加隔离。将根据需要向 /etc/inetd.conf 添加更多行(POP3 是其中之一)。

    以下是 RedHat 7.0 用户的注意事项。Inetd 守护程序(虽然仍然存在于发行版中)现在被 xinetd 取代。其配置文件格式如下

    #
    # Simple configuration file for xinetd
    #
    # Some defaults, and include /etc/xinetd.d/
    
    defaults
    {
            instances               = 60
            log_type                = SYSLOG authpriv
            log_on_success          = HOST PID
            log_on_failure          = HOST RECORD
    }
    
    includedir /etc/xinetd.d
    
    其中 /etc/xinetd.d 目录看起来像(在您的情况下可能包含更多文件)
    -rw-r--r--    1 root     root          498 Aug 23 00:17 tftp
    -rw-r--r--    1 root     root          414 Jul 21 08:43 rsh
    -rw-r--r--    1 root     root          362 Jul 21 08:43 rexec
    -rw-r--r--    1 root     root          361 Jul 21 08:43 rlogin
    -rw-r--r--    1 root     root          347 Aug  9 05:55 wu-ftpd
    

    目录中的文件配置各个服务,如 finger、telnet 或 ftp。它们的格式是(此服务 ftp,在 RedHat 7.0 股票版中默认为 on

    # default: on
    # description: The wu-ftpd FTP server serves FTP connections. It uses \
    #       normal, unencrypted usernames and passwords for authentication.
    service ftp
    {
            socket_type             = stream
            wait                    = no
            user                    = root
            server                  = /usr/sbin/in.ftpd
            server_args             = -l -a
            log_on_success          += DURATION USERID
            log_on_failure          += USERID
            nice                    = 10
    }
    

    或者(此服务 tftp,在 RedHat 7.0 股票版中默认为 off

    # default: off
    # description: The tftp server serves files using the trivial file transfer \
    #       protocol.  The tftp protocol is often used to boot diskless \
    #       workstations, download configuration files to network-aware printers, \
    #       and to start the installation process for some operating systems.
    service tftp
    {
            socket_type             = dgram
            wait                    = yes
            user                    = nobody
            log_on_success          += USERID
            log_on_failure          += USERID
            server                  = /usr/sbin/in.tftpd
            server_args             = /tftpboot
            disable                 = yes
    }
    

    因此,要禁用服务,请将“disable= yes”添加到相应文件的末尾,或者直接删除该文件。

  2. 在系统启动时从 /etc/rc.d 目录启动的服务

    使用以下命令检查正在运行的服务:ps ax。您将获得类似于下面 sample 输出的内容

        PID TTY      STAT   TIME COMMAND
        1 ?        S      0:04 init
        2 ?        SW     0:30 [kflushd]
        3 ?        SW     0:32 [kupdate]
        4 ?        SW     0:00 [kpiod]
        5 ?        SW     0:03 [kswapd]
        6 ?        SW<    0:00 [mdrecoveryd]
      296 ?        SW     0:00 [apmd]
      349 ?        S      0:00 syslogd -m 0
      360 ?        S      0:00 klogd
      376 ?        S      0:00 /usr/sbin/atd
      392 ?        S      0:00 crond
      412 ?        S      0:00 inetd
      454 ttyS0    S      0:00 gpm -t ms
      533 tty2     SW     0:00 [mingetty]
      534 tty3     SW     0:00 [mingetty]
      535 tty4     SW     0:00 [mingetty]
      536 tty5     SW     0:00 [mingetty]
      537 tty6     SW     0:00 [mingetty]
      667 tty1     SW     0:00 [mingetty]
     4540 ?        S      0:00 httpd
     5176 ?        S      0:00 httpd
     5177 ?        S      0:00 httpd
     5178 ?        S      0:00 httpd
     5179 ?        S      0:00 httpd
     5180 ?        S      0:00 httpd
     5181 ?        S      0:00 httpd
     5182 ?        S      0:00 httpd
     5183 ?        S      0:00 httpd
     7321 ?        S      0:00 /usr/sbin/sshd                 <<< only after you installed sshd to run on startup
     7323 pts/0    S      0:00 -bash
     7336 pts/0    R      0:00 ps ax
    

    让我们专注于监听网络的进程,例如 lpd。由于我们不打算将我们的服务器用于打印(我们当然可能会,我只是不在此处描述它),我建议我们通过以下方式删除打印机守护程序:rpm -e lpd 。如果 rpm 抱怨任何依赖项(例如,在我的情况下,printfilter 和 rhprinttool),请将它们添加到您的 rpm -e 命令中并重复它。如果错误地安装了其他应删除的服务,则为 NFS、NIS、samba 等。确保您删除 NFS/NIS(如果您不使用它们),因为经常在其中发现错误。同样,这些都是有用的东西,我只是遵循*黄金法则* “删除您当前不使用的软件”。而且,使用 RH RPM,将来随时添加它真的很容易。

可以从 Armoring Linux 论文中获得更多基本安全设置。正如那里建议的那样,让我们创建一个 wheel 组,其中包含受信任的用户(在我们的例子中,只有用户 you 才能执行 /bin/su 并运行 cron 作业(与 root 一起)。

我建议您不要安装 X Windows,因为它会带来您可能没有准备好处理的新问题。

4.6 启用多个 IP 地址

现在我们准备好启用我们的机器来处理用于虚拟主机的多个 IP 地址。此时,IP 别名 HOWTO 可能会派上用场(请参阅参考部分中的链接)。由于多种原因,基于 IP 的虚拟主机更好(如果您有足够的 IP 地址)。例如,如果从浏览器端完成反向查找,则反向查找将成功。对于托管加密启用的网站(通常称为“安全网站”)也可能需要它。较旧的浏览器(不支持 HTTP 1.1)也会感到不高兴。

更改将集中在 /etc/rc.d/ 目录中。要启用多个 IP 地址,您的内核应该支持此功能。在全新安装的 RH Linux 上,它支持此功能。要验证它,应该查看用于编译内核的配置文件。在我的情况下,它是 /usr/src/linux/configs/kernel-2.2.17-i686.config,因为机器具有 Pentium III 处理器。如果安装了 kernel-source RPM 软件包,则此文件存在。如果文件中存在行 CONFIG_IP_ALIAS=y,则您就可以了。当我们在这里时,我们还可以确认转发 IP 数据包的能力(拨号用户 PPP 所需)。此功能存在,但默认情况下未启用(要启用它,请执行以下命令 echo 1 > /proc/sys/net/ipv4/ip_forward 或在 /etc/sysctl.conf 中添加一行)。还需要对 PPP 协议的支持(行 CONFIG_PPP=m,这意味着 PPP 支持编译为内核可加载模块,CONFIG_PPP=y 也可以)。

示例将使用来自 C 块 111.222.333.0 的荒谬 IP 地址 111.222.333.444-111.222.333.777。111.222.333.444 是真实主机 IP(在 RH 安装期间配置),111.222.333.555-777 是虚拟地址,111.222.333.888 是拨号用户地址(可以有更多)。

假设我们要配置 3 个虚拟主机。

将使用两组命令

  1. /sbin/ifconfig eth0:0 111.222.333.555
    /sbin/ifconfig eth0:1 111.222.333.666
    /sbin/ifconfig eth0:2 111.222.333.777
    

    这些命令会将 IP 地址绑定到(虚拟)接口 eth0:0-eth0:2

  2. /sbin/route add -host  111.222.333.555 dev eth0
    /sbin/route add -host  111.222.333.666 dev eth0
    /sbin/route add -host  111.222.333.777 dev eth0
    

    这些命令将为这些地址添加路由,并将它们连接到真实接口 eth0(网卡)。

执行这些命令后,ifconfig 命令输出 (ifconfig) 将如下所示
eth0      Link encap:Ethernet  HWaddr 02:60:8C:4D:24:CE  
          inet addr:111.222.333.444  Bcast:255.255.255.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:901597 errors:33 dropped:0 overruns:0 frame:823
          TX packets:433589 errors:0 dropped:0 overruns:0 carrier:0
          collisions:128327 txqueuelen:100 
          Interrupt:5 Base address:0x280 

eth0:0    Link encap:Ethernet  HWaddr 02:60:8C:4D:24:CE  
          inet addr:111.222.333.555  Bcast:111.222.333.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:5 Base address:0x280 

eth0:1    Link encap:Ethernet  HWaddr 02:60:8C:4D:24:CE  
          inet addr:111.222.333.666  Bcast:111.222.333.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:5 Base address:0x280

eth0:2    Link encap:Ethernet  HWaddr 02:60:8C:4D:24:CE  
          inet addr:111.222.333.777  Bcast:111.222.333.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:5 Base address:0x280

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:26232 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26232 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
所有命令都可以添加到 /etc/rc.d/rc.local 的底部,以便在重新启动后保存更改。严格来说,添加新 IP 地址不需要重新启动机器。请务必记录您对机器所做的所有更改。许多优秀的系统管理员(或者,我应该说不太好的系统管理员?)都在职业生涯的某个时刻因此而受挫。

测试更改

执行: ping 虚拟地址,例如

ping 111.222.333.555
ping 111.222.333.666
ping 111.222.333.777

应该得到: 接口应已启动

4.7 配置 DNS

现在我们准备好配置 DNS。最简单的方法是将我们希望世界看到的主机名(真实的和所有虚拟的)添加到已经运行 bind(DNS 守护程序)的某些机器的配置中。但是,由于我们正在设置盒式 ISP,我们可能无法避免“DNS 乐趣”。

现在,也让我尝试为选择“过时”版本的 bind 4.9.7(8 系列之前的最后一个版本)辩护(这是有问题的)。我知道我的论点可能会被击败,现在甚至 bind 9 都出来了,但我认为 bind 4.9.7 经过了更多时间的考验,并且更加稳定。升级到 8.x 的论据(在 http://www.acmebw.com/askmrdns/00444.htmhttp://www.dns.net/dnsrd/servers.html 以及,我想,在许多其他地方提供。这是来自 Theo de Raadt 本人(OpenBSD 开发负责人)的 消息,他在其中证明了选择 bind 4 作为 OpenBSD(最安全的 UNIX 操作系统)的一部分是合理的。他还对 OpenBSD 审计团队在 BIND 8 源代码中看到的错误数量感到震惊)仍然没有说服很多人。而且,让我们不要忘记“1999 年的漏洞” - ADMROCKS,它为几乎所有运行 bind 版本早于 8.1.2 patch 3 的 Linux 机器提供远程 root 访问权限。根据 INCIDENTS 邮件列表判断,如果未安装推荐的升级,这仍然是攻击 RH 版本 5.0-6.1 的一种非常流行的方式。据称,named(无论哪个版本)应始终在 chroot jail 中运行。

以下是说明,大致遵循 O'Reilly 的 DNS 书籍(一本好书,强烈推荐给所有人,但非常适合休闲 DNS 用户)。

  1. 查找并安装 bind 4.9.7,可以从 RPM 软件包(RH 4.2,如果我没有记错 - 为此您可以使用 RPMFIND.net,就我个人而言,我没有尝试过,因此我对在 RH 6.1 系统上安装 RH 4.2 软件包持怀疑态度,但这可能会起作用)或从源代码安装( bind 4.9.7,编译它有点麻烦,但阅读存档中的所有 README 文件肯定会有所帮助)。
  2. 创建 bind 所需的文件和目录这将用于 3 个虚拟域:yoursite1.comyoursite2.comyoursite3.com。另一个重要的评论是指辅助 DNS 问题。由于您的所有域及其所有服务都将托管在同一台机器上,因此辅助服务器形式的 DNS 备份没有多大意义:如果您的主 DNS 关闭,则其他所有内容(邮件、www、ftp、pop 等)也将关闭。但是您确实需要一个辅助 DNS 来注册域名。尝试说服某人将您作为辅助 DNS 放入,或使用免费 DNS 服务(链接在“设置新域名 Mini-HOWTO”中)。
  3. 这就是它们的样子(如果您不熟悉 bind 4.x 配置文件格式,请阅读 O'Reilly DNS 书籍或任何 HOWTO 或 bind 页面上的文档,或者,最好是所有上述内容。您还可以选择在不理解它们的情况下使用它们,但这通常是一个坏主意)

    /etc/named.boot

    这是 bind 4.9.x 的主配置文件。

    directory /etc/namedb
    
    ;cache-obtained from internic, usually
    cache   .                               db.cache
    
    ;main config files
    primary you.com                         db.you
    ;reverse lookups
    primary 333.222.111.in-addr.arpa        db.111.222.333
    ;localhost.localnet configs
    primary 0.0.127.in-addr.arpa            db.127.0.0
    
    ;virtual Domains
    primary yoursite1.net                     db.yoursite1
    primary yoursite2.net                     db.yoursite2
    primary yoursite3.net                     db.yoursite3
    
  4. /etc/namedb/db.you

    ; defines our local hosts at you.com, just one in our case, and its aliases
    @                       IN      SOA     ns.you.com. root.ns.you.com. (
                                            2000012190 7200 1800 3600000 7200 )
    ;name servers and mail servers
                            IN      NS      ns.you.com.
                            IN      MX      10 ns.you.com.
                            IN      A       111.222.333.444
    ns                      IN      A       111.222.333.444
    
    ;address of the canonical names
    localhost               IN      A       127.0.0.1
    gateway                 IN      A       111.222.333.111
    
    ;aliases (to use in ftp: ftp ftp.you.com etc, for clarity)
    www                     CNAME   ns
    mail                    CNAME   ns
    ftp                     CNAME   ns
    pop3                    CNAME   ns
    
  5. /etc/namedb/db.111.222.333

    ;reverse mapping of our IP addresses
    .
    ;origin is 333.222.111.in-addr.arpa
    333.222.111.in-addr.arpa. IN    SOA     ns.you.com. root.ns.you.com. (
                                            1999121501 7200 1800 3600000 7200 )
    ;name Servers
                            IN      NS      ns.you.com.
    
    ;addresses point to canonical name
    444.333.222.111.in-addr.arpa.   IN      PTR     ns.you.com.
    ;dialins
    888                             IN      PTR     dialup.you.com.
    
    ;virtual hosts
    555                             IN      PTR    yoursite1.com.
    666                             IN      PTR    yoursite2.com.
    777                             IN      PTR    yoursite3.com.
    
  6. /etc/namedb/db.127.0.0

    ;local loop config file
    0.0.127.in-addr.arpa.   IN      SOA     ns.you.com. root.ns.you.com. (
                                            1997072200 7200 1800 3600000 7200 )
                            IN      NS      ns.you.com.
    1                       IN      PTR     localhost.
    
  7. /etc/namedb/db.yoursite1

    ; yoursite1.com
    @                       IN      SOA     virtual root.virtual (
                                            1999092201      ; Serial: update each time the file is changed
                                            7200            ; refresh, sec
                                            1800            ; retry, sec
                                            3600000         ; expire, sec
                                            7200 )          ; minimum TTL
    ;name servers
                            IN      NS      ns.you.com.
                            IN      MX      10 virtual
                            IN      A       111.222.333.555 
    ;address of the canonical names
    localhost               IN      A       127.0.0.1
    gateway                 IN      A       111.222.333.111
    virtual                 IN      A       111.222.333.555
                            IN      MX      10 virtual
    ;aliases
    www                     CNAME   virtual
    mail                    CNAME   virtual
    ftp                     CNAME   virtual
    pop3                    CNAME   virtual
    
  8. /etc/namedb/db.yoursite2

    ; yoursite2.com
    @                       IN      SOA     virtual root.virtual (
                                            1999092201      ; Serial: update each time the file is changed
                                            7200            ; refresh, sec
                                            1800            ; retry, sec
                                            3600000         ; expire, sec
                                            7200 )          ; minimum TTL
    ;name servers
                            IN      NS      ns.you.com.
                            IN      MX      10 virtual
                            IN      A       111.222.333.666 
    ;address of the canonical names
    localhost               IN      A       127.0.0.1
    gateway                 IN      A       111.222.333.111
    virtual                 IN      A       111.222.333.666
                            IN      MX      10 virtual
    ;aliases
    www                     CNAME   virtual
    mail                    CNAME   virtual
    ftp                     CNAME   virtual
    pop3                    CNAME   virtual
    
  9. /etc/namedb/db.yoursite3

    ; yoursite3.com
    @                       IN      SOA     virtual root.virtual (
                                            1999092201      ; Serial: update each time the file is changed
                                            7200            ; refresh, sec
                                            1800            ; retry, sec
                                            3600000         ; expire, sec
                                            7200 )          ; minimum TTL
    ;name servers
                            IN      NS      ns.you.com.
                            IN      MX      10 virtual
                            IN      A       111.222.333.777 
    ;address of the canonical names
    localhost               IN      A       127.0.0.1
    gateway                 IN      A       111.222.333.111
    virtual                 IN      A       111.222.333.777
                            IN      MX      10 virtual
    ;aliases
    www                     CNAME   virtual
    mail                    CNAME   virtual
    ftp                     CNAME   virtual
    pop3                    CNAME   virtual
    
这些配置文件将允许您托管这三个虚拟域和您的真实域 you.com

测试更改

执行: 检查地址解析

nslookup www.you.com
nslookup www.yoursite1.com
nslookup www.yoursite2.com
nslookup www.yoursite3.com

应该得到: nslookup 为所有主机名返回正确的 IP 地址

4.8 配置 httpd

要服务 html 页面,使用 httpd 守护程序。RH 7.0 附带 Apache 1.3.12(当前最新版本为 1.3.14,即将推出的 2.0 的 alpha 版本已发布)。此时,明智的做法是检查 RH 站点或其镜像( RH 镜像)以获取更新。

我们即将进行的大多数更改都集中在 /etc/httpd/httpd.conf 中(Apache 配置的 RH 标准位置)。html 页面的默认位置(当您访问 www.you.com 时显示)是 /home/httpd/html。您可以在同一 /home/httpd 中为虚拟主机分配目录,下面显示了它们的以下位置:/home/httpd/yoursite1/home/httpd/yoursite2/home/httpd/yoursite3

下面我提供了您的 /etc/httpd/httpd.conf 文件所需的最低限度更改

<VirtualHost 111.222.333.555>
ServerAdmin webmaster@you.com
DocumentRoot /home/httpd/yoursite1
ServerName www.yoursite1.com
ErrorLog yoursite1-error_log
TransferLog yoursite1-access_log
</VirtualHost>


<VirtualHost 111.222.333.666>
ServerAdmin webmaster@you.com
DocumentRoot /home/httpd/yoursite2
ServerName www.yoursite2.com
ErrorLog yoursite2-error_log
TransferLog yoursite2-access_log
</VirtualHost>

<VirtualHost 111.222.333.777>
ServerAdmin webmaster@you.com
DocumentRoot /home/httpd/yoursite3
ServerName www.yoursite3.com
ErrorLog yoursite3-error_log
TransferLog yoursite3-access_log
</VirtualHost>

该配置将导致所有站点的所有日志都存储在一个目录中(无论指定为什么)。如果不需要这样做,则可以更改 ErrorLogTransferLog 指令,以便分别为每个虚拟主机指向正确的位置。“真实” www.you.com 的页面将存储在默认位置 /home/httpd/html 中。

有关更多信息,请访问 https://apache.ac.cn,Apache http 服务器主页。他们有很多支持页面,包括用于虚拟主机设置的页面(基于 IP 和基于名称的 [仅使用 1 个 IP 地址])。Linux WWW HOWTO(参考部分中的链接),虚拟主机部分也很有用。

测试更改

执行: 通过 Lynx 浏览器或 telnet 访问端口 80 来访问测试页面

lynx http://www.you.com
lynx http://www.yoursite1.com
lynx http://www.yoursite2.com
lynx http://www.yoursite3.com

应该得到: 将返回测试页面(如果您将它们放在正确的目录中)

4.9 配置 sendmail

设置

现在我们将处理 sendmail。同样,建议对股票 RH /etc/sendmail.cf/etc/sendmail.cw 进行最低限度的必要更改。

  1. 查找以 Dj$w.foo.com 开头的行,并将其更改为指向您的主(“真实”的,而不是虚拟的)服务器名称(you.com,因此它看起来像这样 Dj$w.you.com)。
  2. 找到文件 /etc/sendmail.cw 并使其看起来像这样
    # sendmail.cw - include all aliases for your machine here.
    you.com
    ns.you.com
    mail.you.com
    yoursite1.com
    mail.yoursite1.com
    yoursite2.com
    mail.yoursite2.com
    yoursite3.com
    mail.yoursite3.com
    
    这些是必要的,以便 sendmail 接受这些域的邮件。

没有解决 user@yoursite1.comuser@yoursite2.com 邮件进入不同邮箱的问题。为此,请查看 /etc/mail/virtusertable 功能(/etc/sendmail.cw 中的相应行是 Kvirtuser hash -o /etc/mail/virtusertable,详细信息可能会稍后在此处添加)。http://www.sendmail.org/virtual 上有关于虚拟主机的 sendmail 参考的优秀文档。

值得补充的是,linuxconf 提出了一种稍微不同的虚拟电子邮件方案,为所有域使用单独的假脱机目录(这干净地解决了上述“名称冲突”问题),但这需要特殊的虚拟感知 POP/IMAP 服务器(包含在 RH 中),并且稍微复杂一些。建议用于电子邮件量较大的站点,每个域内有许多用户。

关于 sendmail 的几句话,最好(从安全角度来看)从 inetd.conf 运行 sendmail,而不是作为独立守护程序运行。为此,我们需要将其添加到 /etc/inetd.conf,从 /etc/rc.d/init.d 中删除它,并将 sendmail 队列处理添加到 cron。以下是您必须执行的操作

  1. 将以下行添加到 /etc/inetd.conf
    smtp  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/sendmail -bs
    

    或者,如果使用 xinetd,请在 /etc/xinetd.d/ 中创建一个类似于以下的 sendmail 文件

    # default: on
    service sendmail
    {
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/sendmail -bs
    }
    
  2. 编辑 /etc/rc.d/init.d/sendmail 以在最开始的某个位置具有 exit 0 (可能不是最好的方法,请务必记录您对这些文件所做的更改),以便此文件不执行任何操作而不是启动 sendmail
  3. 通过编辑您的(root 的)crontab(要编辑,请执行 crontab -e)添加如下行
    */20 * * * * /usr/sbin/sendmail -q
    
    这将每 20 分钟处理一次 sendmail 队列(如果存在)。描述的步骤将简化 sendmail 访问控制,并让您控制谁可以与您的 25 端口对话,而不仅仅是谁可以通过您发送电子邮件。/etc/hosts.allow 中的行允许来自 .com 和 .org 域的所有机器向您发送电子邮件,如下所示
    sendmail: .com .org
    
    请注意,此处使用守护程序名称,而不是协议名称(sendmail,而不是 smtp)。

这将允许您的系统处理所有这些域的电子邮件。

故障排除

问题: 您尝试发送的邮件被拒绝,并显示消息 Relaying denied

解决方案:查看您的 /etc/sendmail.cw。您确定您的主机名和虚拟主机名的所有可能变体都在这里吗?查看消息头,看看是从哪台机器拒绝的:它看起来像是您遗漏的另一个名称吗?

测试更改

执行: 通过 telnet 访问 SMTP 端口 25

telnet www.you.com 25
telnet www.yoursite1.com 25
telnet www.yoursite2.com 25
telnet www.yoursite3.com 25

应该得到: Sendmail 应该响应提示符和版本号!键入 QUIT 以退出提示符。

4.10 配置 POP3

设置

POP3 配置很简单(此设置不需要“虚拟化”)。RH 配备了 imapd IMAP 服务器。如果您不想使用 IMAP 功能,或者不喜欢此特定实现(在某个时候发现了缓冲区溢出漏洞),那么使用来自 Eudora 的免费 POP3 守护程序 qpopper 是一个好主意 http://www.eudora.com/freeware/qpop.html。在撰写本文时,发布的版本是 qpopper 3.0.2。重要的是要注意,早于 2.5 的版本包含缓冲区溢出错误,该错误允许执行远程 root 漏洞利用。同样的问题也困扰着直到 3.0 release 21 的“公共 beta 版”。使用 2.53 或最新的 3.0(前者经过更好的审核,后者更适合 RH - 与 PAM 身份验证无缝协作)。我建议使用 3.0,因此以下说明适用于这种情况。截至 4 月 13 日,Qpopper 3.0 不再是 beta 版,而是常规软件。截至最近,即使在 Qpopper 2.53 中也发现了漏洞,攻击者可以获得组 ID 为“mail”的 shell,从而可能允许对所有邮件进行读/写访问。

  1. wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper3.0.tar.Z

    从 Eudora 站点检索存档。

  2. tar zxvf qpopper3.0.tar.Z

    解压缩并解压缩内容。

  3. cd qpopper

    如果您需要此步骤的解释,请停止阅读文档。

  4. ./configure --enable-specialauth --with-pam --enable-log-login --enable-shy

    此处的选项为

    --enable-specialauth:允许 MD5 和 shadow 密码

    --with-pam:允许使用 RH Pluggable Authentication Modules (PAM) 技术

    --enable-log-login:记录成功登录,而不仅仅是失败登录(实际上并没有那么有用,因为它无论如何都会使用 tcpd wrappers 日志记录)

    --enable-shy:隐藏版本号(是的,有点小气的“通过模糊实现安全”的表现)

  5. make

    这会编译 popper

  6. /bin/cp popper/popper /usr/local/bin
    

    将二进制文件复制到 /usr/local/bin

  7. 现在将模式设置为
    -rwx------   1 root     root       297008 Feb 16 15:41 /usr/local/bin/popper
    
    通过使用命令
    chmod 700 /usr/local/bin/popper
    
  8. /etc/inetd.conf 添加一行
    pop3  stream tcp        nowait root /usr/sbin/tcpd /usr/local/bin/popper -s
    
    这将导致 tcpd wrapper 控制对 popper 的访问。在 /etc/hosts.allow 中添加的行是
    popper: .good.com .nice.org
    
    这将允许来自域 good.comnice.org 的人员通过 POP3 客户端从您的机器读取电子邮件。

    要使 qpopper 使用 PAM 身份验证,必须在 /etc/pam.d/ 目录中为 POP3 服务创建一个文件。文件应命名为“pop3”(与 /etc/services 和 qpopper 编译时选项中的行相同)。该文件如下所示

    auth       required     /lib/security/pam_pwdb.so shadow 
    account    required     /lib/security/pam_pwdb.so
    password   required     /lib/security/pam_cracklib.so
    password   required     /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
    session    required     /lib/security/pam_pwdb.so
    

  9. 无论出于何种原因,股票 RH 在 /etc/services 文件中为 POP3 协议列出的行都是“pop-3”。由于 qpopper 更喜欢看到“pop3”,因此应将其编辑为
    pop3            110/tcp         # pop3 service
    
这将允许所有用户通过任何合理的邮件客户端获取他们的电子邮件。

故障排除

问题: 您正在使用有效的密码和用户名连接到您的 POP 服务器,但它们被拒绝,并显示消息 Password incorrect

解决方案: PAM 不喜欢您的设置。此消息对于 qpopper 2.53 很常见,请使用 3.0,它应该会消失。否则,请查看您创建的 /etc/pam.d/pop3。它正常吗?

测试更改

执行: 通过 telnet 访问 POP3 端口 110

telnet www.you.com 110

应该得到: Qpopper 应该响应提示符和版本号!键入 QUIT 以退出提示符。

4.11 配置 FTP 服务器

匿名 FTP 设置

我们将仅使用匿名 ftp,并且不允许任何非匿名用户进行任何访问。在这里,我们描述允许匿名上传的匿名 ftp 服务器设置。任何有自尊的关于该主题的指南都会告诉您“这是一件坏事”。但是,允许用户从不受信任的位置 ftp 并以明文形式传输他们的密码,这又有什么更糟糕的呢?并非所有人(尤其是使用 Windows 的人)都可以轻松地通过 ssh 设置 ftp 隧道。但是您绝对应该通过 tcp wrappers 限制访问,并注意“warez puppies”(如果允许无限制下载,他们将尝试通过您的 ftp 站点交换被盗软件的人!)。

我建议使用股票 RH wu-ftpd(撰写本文时为 2.6.1 版)。虽然有传言说有“更安全”的 ftp 守护程序(Pro-ftpd),但 wu-ftp 似乎是最常用的守护程序之一。最近,wu-ftp(甚至在 2.6.x 版本中)再次发现了一系列错误,并且它作为最流行的 ftp 守护程序的声誉似乎正在下降。CERT 已发布关于 WU-FTPD 和所有从 BSD 最终版本派生的 ftp 守护程序的咨询。

RH 默认在服务器配置中安装 wu-ftpd(软件包 wu-ftpd-2.6.1-1)。鼓励您检查更新,因为运行 ftp 是一个重要的安全问题。还有一个单独的 rpm 软件包,它为匿名 ftp 主目录创建一个单独的目录结构(anonftp-2.8-1)。由于匿名 ftp 始终执行 chroot() 系统调用(将用户置于受限文件系统中),因此需要所有必要的二进制文件和库。典型的目录如下所示(/home/ftp 中的 ls -lRa 的输出)

.:
total 20
d--x--x--x   2 root     root         4096 Feb 15 06:22 bin
d--x--x--x   2 root     root         4096 Feb 15 06:22 etc
drwxrws-wt   2 root     wheel        4096 Feb 18 19:51 incoming
drwxr-xr-x   2 root     root         4096 Feb 15 06:22 lib
drwxr-sr-x   3 root     ftp          4096 Feb 15 23:34 pub

bin:
total 344
---x--x--x   1 root     root        15204 Mar 21  1999 compress
---x--x--x   1 root     root        52388 Mar 21  1999 cpio
---x--x--x   1 root     root        50384 Mar 21  1999 gzip
---x--x--x   1 root     root        29308 Mar 21  1999 ls
----------   1 root     root        62660 Mar 21  1999 sh
---x--x--x   1 root     root       110668 Mar 21  1999 tar
lrwxrwxrwx   1 root     root            4 Feb 15 06:22 zcat -> gzip

etc:
total 40
-r--r--r--   1 root     root           53 Mar 21  1999 group
-rw-r--r--   1 root     root        31940 Mar 21  1999 ld.so.cache
-r--r--r--   1 root     root           79 Mar 21  1999 passwd

incoming:
total 0

lib:
total 1212
-rwxr-xr-x   1 root     root        77968 Mar 21  1999 ld-2.1.1.so
lrwxrwxrwx   1 root     root           11 Feb 15 06:22 ld-linux.so.2 -> ld-2.1.1.so
-rwxr-xr-x   1 root     root      1031004 Mar 21  1999 libc-2.1.1.so
lrwxrwxrwx   1 root     root           13 Feb 15 06:22 libc.so.6 -> libc-2.1.1.so
-rwxr-xr-x   1 root     root        77196 Mar 21  1999 libnsl-2.1.1.so
lrwxrwxrwx   1 root     root           15 Feb 15 06:22 libnsl.so.1 -> libnsl-2.1.1.so
-rwxr-xr-x   1 root     root        33596 Mar 21  1999 libnss_files-2.1.1.so
lrwxrwxrwx   1 root     root           21 Feb 15 06:22 libnss_files.so.2 -> libnss_fi
les-2.1.1.so

pub:
total 0

但请注意,无论出于何种原因,RH 都在 /home/ftp/bin 中放置了 /bin/sh 的副本。我对在那里拥有它感觉不好,所以通过 chmod 0 sh 将其 chmod 为 0(也可以完全删除,但是如果您尝试在之后删除软件包,RPM 可能会有点不高兴)。

应仔细考虑 /home/ftp 目录和文件的权限。在上面的示例中,所有系统文件都归 root 所有,并且仅对所有人可读(在必要时可执行)。bin 中的文件仅可执行(目录本身也是如此,以防止列出其内容)。

有趣的部分是 pubincoming 的权限。

以下是 ftp 守护程序(/etc/ftpaccess)的配置文件。它被充分注释,以至于不言自明

#ideas from <htmlurl url="ftp://ftp.wu-ftpd.org/pub/wu-ftpd/upload.configuration.HOWTO" name="ftp://ftp.wu-ftpd.org/pub/wu-ftpd/upload.configuration.HOWTO"> 
#only allow anonymous users-no other classes defined
class anonftp anonymous *

#number of users restriction with message shown when too many
limit   remote  10  Any                 /toomany.msg

#prevent uploads everywhere (for now)
upload /home/ftp * no

#display the contents of some files upon login/cd
readme  README*    login
readme  README*    cwd=*
message /welcome.msg            login
message .message                cwd=*

#log all file transfers DISABLED
#log transfers anonymous

#prevent these file operations for anon users
delete          no      anonymous
overwrite       no      anonymous

#fast cd and aliasing for the same reason (not really necessary, but convenient)
alias   inc:    /incoming
cdpath  /incoming
cdpath  /pub
cdpath  /

#what is allowed in paths
path-filter  anonymous  /etc/pathmsg  ^[-A-Za-z0-9_\.]*$  ^\.  ^-

#prevent the retrieval of some file
noretrieve .notar

#allow upload with NO subdirectory creation by anon users
upload    /home/ftp    /incoming   yes root wheel 0400 nodirs

#allow upload with subdirectory creation by anon users DISABLED
#upload    /home/ftp    /incoming   yes root wheel 0400 dirs

#prevent anon users to GET files from incoming (you might not like it, but it
#is a good idea-to prevent some people from using your ftp server to store
#their own stuff, pics, warez etc)
noretrieve /home/ftp/incoming
这将仅允许匿名用户以某种(!)受控方式进行下载和上传。确保下次升级 RPM 软件包后更新您更改的文件的权限。

访客 FTP 设置

访客 FTP 用户是那些具有有效用户名和密码的用户(与匿名用户不同),但无权访问整个目录结构(与真实用户不同)。因此,他们在身份验证后被 chroot。访客用户可以在此配置中进行上传。

下面提供了简单的 21 步 说明 ;-)

使用的软件:wu-ftpd-2.6.1

将创建示例用户名:ftpguy,用户 ID=505。

她的组将是:lusers,组 ID=701。

如果您想要更多相同类型的用户,他们应该成为同一组的成员。为此,最好稍微更改目录结构,以便他们都使用相同的 passwd 文件和相同的静态 ls。但是,为了更好的分离,您可以为他们每个人提供自己的文件。

  1. adduser ftpguy

    /etc/passwd 中创建一个条目

  2. passwd ftpguy 将密码更改为任何内容
  3. 编辑文件 /etc/passwd,最后一行(包含我们的新用户)应如下所示
    ftpguy:x:505:701::/home/ftpguy/./:/etc/ftponly
    
    是的,那是他的主目录之后的“斜杠”-“点”-“斜杠”。
  4. 编辑文件 /etc/shells,添加行,如下
    /etc/ftponly
    
    此文件必须存在于某些较新的 Linux 发行版中(与 Guest FTP HOWTO 中声明的相反)。有时可以将 /bin/true 放在其位置。
  5. 编辑文件 /etc/group,添加行,如下
    lusers:x:701:ftpguy
    
  6. cd /home
  7. chown ftpguy.lusers ftpguy
    
    此目录由 adduser 命令创建
  8. cd ftpguy; mkdir etc bin ; chown root.daemon etc bin
    
    这为 chroot 创建目录树
  9. chmod 111 etc bin
    
    这为 chrooted 树中的目录设置了非常保守的权限
  10. cp ~/static_ls /home/ftpguy/bin/ls
    
    获取静态(不调用任何库)版本的 /bin/ls:此目录( http://www.stanford.edu/group/itss-ccs/security/binaries/linux/redhat/)包含许多 RH 6.x/7.x 兼容实用程序的静态版本,包括 ls(本地副本是 http://www.chuvakin.org/ispdoc/ls.gz,运行 gunzip ls.gz
  11. cd bin ; chown root.bin ls
    
  12. chmod 111 ls
    
    这为 chroot 中的二进制文件设置了非常保守的权限
  13. cd ../etc
    
  14. 创建文件 /home/ftpguy/etc/passwd,如下所示
    root:*:0:0::/:/etc/ftponly
    ftpguy:*:505:701::/home/ftpguy/./:/etc/ftponly
    
  15. 创建文件 /home/ftpguy/etc/group,内容如下
    root::0:root
    lusers::701:ftpguy
    
  16. chown root.daemon passwd group
    
    这设置了这些文件的正确所有权
  17. chmod 444 passwd group
    
    这设置了该文件的最低必要权限
  18. cd ~ftpguy; touch .forward
    
    这创建了 .forward 文件
  19. chown root.root .forward ; chmod 400 .forward
    
    并出于安全原因锁定它
  20. cd /etc
    
  21. 将用于处理访客用户的工具添加到 /etc/ftpaccess
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-           
    class anonftp guest,anonymous *                                                 
                                                                                    
    delete     no   anonymous,guest               # delete permission?              
    overwrite  no   anonymous,guest               # overwrite permission?           
    rename     no   anonymous,guest               # rename permission?              
    chmod      no   anonymous,guest               # chmod permission?               
    umask      no   anonymous,guest               # umask permission?               
                                                                                    
    guestgroup lusers                                                               
                                                                                    
    limit   remote  10  Any                 /toomany.msg                            
    upload /home/ftp * no                                                           
    readme  README*    login                                                        
    readme  README*    cwd=*                                                        
    message /welcome.msg            login                                           
    message .message                cwd=*                                           
                                                                                    
    alias   inc:    /incoming                                                       
    cdpath  /incoming                                                               
    cdpath  /pub                                                                    
    cdpath  /                                                                       
                                                                                    
    path-filter  anonymous  /etc/pathmsg  ^[-A-Za-z0-9_\.]*$  ^\.  ^-               
    noretrieve .notar                                                               
    upload    /home/ftp    /incoming   yes root wheel 0400 nodirs                   
    noretrieve /home/ftp/incoming
    

让我们测试一下这个野兽

localhost[anton]#1008: ftp localhost
Connected to anton.
220 anton FTP server (Version wu-2.6.1(1) Mon Feb 28 10:30:36 EST 2000) ready.
Name (localhost:anton): ftpguy
331 Password required for ftpguy.
Password:
230 User ftpguy logged in.  Access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 4
drwx------   4 505      701          1024 Apr  8 02:16 .
drwx------   4 505      701          1024 Apr  8 02:16 ..
-r--------   1 0        0               0 Apr  8 02:16 .forward
d--x--x--x   2 0        2            1024 Apr  8 02:09 bin
d--x--x--x   2 0        2            1024 Apr  8 02:15 etc
226 Transfer complete.
ftp> mkdir TEST
257 "/TEST" new directory created.
ftp> ls -l
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 3
-r--------   1 0        0               0 Apr  8 02:16 .forward
drwxr-xr-x   2 505      701          1024 Apr  8 02:32 TEST
d--x--x--x   2 0        2            1024 Apr  8 02:09 bin
d--x--x--x   2 0        2            1024 Apr  8 02:15 etc
226 Transfer complete.
ftp> 

等等。

测试更改

执行: 使用 ftp 客户端访问 ftp 服务器

ftp www.you.com

应该得到: ftp 守护程序应响应提示符和版本号!

4.12 配置拨号

现在有趣的部分开始了。我们希望这台机器允许通过连接的(或插入的?)调制解调器进行拨号接入。它将提供常规 shell 或受限 shell(仅执行 pppd 守护进程)。Windows 95/98 用户应该能够使用他们计算机的所有默认设置轻松拨号接入。

Linux 设置

为了处理通过串行线路的登录,需要某种版本的 getty 程序。该程序监视串行线路(在本文档中将始终使用 /dev/ttyS1,详情请参阅 serial HOWTO),并在连接时显示登录提示符或启动程序。

我建议使用 mgetty 程序(因为它比一些竞争对手具有更多功能且更易于设置)。

RH 自带 mgetty-1.1.21-2,它还具有接收传真和语音邮件的扩展功能(如果调制解调器支持)。通过执行以下命令检查 mgetty 是否已安装:rpm -qa | grep mgetty

安装 mgetty 后,需要进行一些重新配置。以下是需要更改的文件和详细信息

  1. /etc/inittab

    这使得 mgetty 能够在系统启动时启动并相应地重新生成。这些行应添加到文件末尾。

    #for dialins use mgetty
    #note this S1 in the beginning of the line and ttyS1 in the end
    S1:2345:respawn:/sbin/mgetty ttyS1
    

  2. /etc/ppp/options

    此文件控制 pppd 守护进程的每次启动。这里的一些选项是可选的(嘿,这就是它们被称为选项的原因,对吧?)。

    auth -chap +pap login modem crtscts debug proxyarp lock
    ms-dns 111.222.333.444
    

    以下是它们的简要含义

    查看 pppd 手册页以获取所有详细信息(以上部分信息改编自那里)

    这里还需要注意一点。有些人报告说,他们在验证 Windows 和 Linux 拨号客户端时,使用 +chap -pap 更成功。如果您遇到问题,请尝试更改 /etc/ppp/options 以包含 +chap -pap。在这种情况下,应创建新文件 /etc/ppp/chap-secrets(内容与推荐的 /etc/ppp/pap-secrets 相同)。

    另一些人报告说,使用 /etc/mgetty+sendfax/login.config 中的默认行也能正常工作。我很高兴听到这一点,我从未声称我的设置方式是唯一正确的方式。

  3. /etc/ppp/options.ttyS1

    此文件的用途与前一个文件类似,但仅适用于特定的调制解调器线路。它指定分配给远程计算机的 IP 地址(在某种意义上是动态的,如果您有多条线路)以及本地 IP。

    111.222.333.444:111.222.333.888
    

  4. /etc/mgetty+sendfax/login.config

    此文件是 mgetty 的主要控制文件。Mgetty 具有 Windows-PPP 感知能力,因此它具有在收到来自 Windows 计算机的连接时自动启动 pppd 的功能。

    应存在以下行

    /AutoPPP/ -     -       /usr/sbin/pppd
    

    在添加它们之前,请检查是否已存在其他版本的类似命令(默认情况下已注释掉)。

  5. /etc/ppp/pap-secrets

    这类似于 /etc/password 文件,但仅用于拨号接入,并且包含明文密码(显然,只有 root 用户可见)。您希望能够拨号接入的所有用户都必须在此文件中列出其用户名和密码。他们应在 Windows 拨号网络配置中输入相同的用户名和密码。

    # Secrets for authentication using PAP
    # these two users below can use dialin
    # client        server  secret pword   remote IP addresses
    dialinuser1     *       b1ab1a!?         111.222.333.888
    dialinuser2     *       p8sSw0rD         111.222.333.888
    

通过查看 ps ax 命令的输出中是否有类似的行来检查 mgetty 是否正在运行。

 4625 ?        S      0:00 /sbin/mgetty ttyS1

现在这台机器将允许来自任何 Windows 95/98 计算机的调制解调器呼叫。

正如一位读者指出的那样,需要采取一些步骤来防止用户与他人共享其拨号密码。一个简单的 perl/shell 脚本可以通过杀死和记录使用相同用户名的连接来完成这项工作。

此外,如果希望阻止用户拨号接入,则不应将他们的用户名放入 /etc/ppp/pap-secrets

Windows 设置

真的非常简单。

  1. 点击我的电脑
  2. 点击拨号网络
  3. 点击新建连接
  4. 按照指示进行操作,输入电话号码等
  5. 创建新连接后,单击它并输入用户名和密码(与 /etc/passwd/etc/ppp/pap-secrets 中提到的相同)
  6. 点击连接,它应该可以工作(在我这里可以正常工作 ;-) )

测试更改

操作: 尝试使用终端程序拨号接入(UNIX:minicom /Windows:terminal 或其他)

应得到: Mgetty 应该响应提示符和您的 Linux 发行版版本!

4.13 开放访问

现在,在测试所有服务之后,我们准备开放对这台机器的访问。在我们的案例中,主要的访问控制工具是 TCP wrappers (tcpd)。在 RH 7 的情况下,xinetd 将自行检查相同的访问控制文件,而无需使用 /usr/sbin/tcpd 包装服务。这些工具由 2 个文件 /etc/hosts.allow/etc/hosts.deny 控制,正如在 посвященных 各种网络服务的部分中提到的那样。TCP wrappers 配置可以通过 2 种不同的方式完成,我们将采用最简单的方式。

让我们的 /etc/hosts.deny 包含 ALL:ALL 子句,从而拒绝所有主机和其上的所有用户访问所有服务(从 /etc/inetd.conf 启动)。现在我们可以在 /etc/hosts.allow 中显式允许我们需要的内容,从而遵循 “凡未明确允许的均被拒绝” 的原则。

假设我们希望允许人们读取和发送电子邮件,我们希望一些受信任的主机更新网页内容,并且我们希望管理员工作站拥有完全访问权限。因此,我们得到了以下 /etc/hosts.allow

#
# hosts.allow   This file describes the names of the hosts which are
#               allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
ALL: 127.0.0.1 adminbox.some.net
#we rely on anti-relaying features of sendmail 8.9+ to fight spam
#and also restrict some sites that we don't want to see email from
sendmail: ALL EXCEPT .kr .cn
popper: .com .edu .gov .mil
#these people can upload/download stuff, make it restrictive to avoid warez!
in.ftpd: .this.net .that.net


下一步 上一步 目录