密码是当今使用最重要的安全功能之一。对您和所有用户而言,拥有安全且难以猜测的密码至关重要。大多数较新的 Linux 发行版都包含passwd程序,这些程序不允许您设置容易猜测的密码。确保您的passwd程序是最新的并具有这些功能。
深入讨论加密超出了本文档的范围,但有必要进行介绍。加密非常有用,在这个时代甚至可能是必需的。有各种各样的数据加密方法,每种方法都有自己的一组特性。
大多数 Unix 系统(Linux 也不例外)主要使用一种称为 DES(数据加密标准)的单向加密算法来加密您的密码。然后,这个加密后的密码存储在(通常)/etc/passwd(或较少见)/etc/shadow。当您尝试登录时,您输入的密码会再次加密,并与存储您密码的文件中的条目进行比较。如果它们匹配,则一定是同一个密码,您将被允许访问。虽然 DES 是一种双向加密算法(在给定正确密钥的情况下,您可以编码和解码消息),但大多数 Unix 系统使用的变体是单向的。这意味着应该不可能反向加密以从以下内容中获取密码/etc/passwd(或/etc/shadow).
暴力破解攻击,例如 “Crack” 或 “John the Ripper”(请参阅 第 6.9 节)通常可以猜出密码,除非您的密码足够随机。PAM 模块(见下文)允许您对密码使用不同的加密例程(MD5 或类似)。您也可以利用 Crack。考虑定期对您自己的密码数据库运行 Crack,以查找不安全的密码。然后联系违规用户,并指示他更改密码。
您可以访问 http://consult.cern.ch/writeup/security/security_3.html 获取有关如何选择良好密码的信息。
公钥密码学,例如 PGP 使用的密码学,使用一个密钥进行加密,一个密钥进行解密。然而,传统的密码学使用相同的密钥进行加密和解密;这个密钥必须为双方所知,因此必须以某种方式安全地从一方传输到另一方。
为了减轻安全传输加密密钥的需求,公钥加密使用两个单独的密钥:公钥和私钥。每个人的公钥可供任何人用于加密,同时每个人都保留自己的私钥来解密用正确的公钥加密的消息。
公钥和私钥密码学都有其优点,您可以在本节末尾列出的 RSA 密码学常见问题解答 中阅读有关这些差异的信息。
PGP(Pretty Good Privacy)在 Linux 上得到很好的支持。已知 2.6.2 和 5.0 版本运行良好。有关 PGP 及其使用方法的良好入门指南,请查看 PGP FAQ:http://www.pgp.com/service/export/faq/55faq.cgi
请务必使用适用于您所在国家的版本。由于美国政府的出口限制,强加密技术被禁止以电子形式在国外传输。
美国的出口管制现在由 EAR(出口管理条例)管理。它们不再受 ITAR 管辖。
还有一个在 Linux 上配置 PGP 的分步指南,网址为 http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html。它是为国际版 PGP 编写的,但很容易适应美国版。您可能还需要针对某些最新版本的 Linux 的补丁程序;该补丁程序可在 ftp://metalab.unc.edu/pub/Linux/apps/crypto 找到。
有一个项目正在维护 PGP 的免费开源重新实现。GnuPG 是 PGP 的完整且免费的替代品。因为它不使用 IDEA 或 RSA,所以可以不受任何限制地使用。GnuPG 符合 OpenPGP。有关更多信息,请参阅 GNU Privacy Guard 网页:http://www.gnupg.org/。
有关密码学的更多信息,请参见 RSA 密码学 FAQ,网址为 http://www.rsa.com/rsalabs/newfaq/。在这里,您将找到有关诸如 “Diffie-Hellman”、“公钥密码学”、“数字证书” 等术语的信息。
用户经常询问各种安全和加密协议之间的区别,以及如何使用它们。虽然这不是加密文档,但最好简要解释一下每种协议是什么,以及在哪里可以找到更多信息。
SSL: - SSL,或安全套接字层,是 Netscape 开发的一种加密方法,用于在 Internet 上提供安全性。它支持几种不同的加密协议,并提供客户端和服务器身份验证。SSL 在传输层运行,创建安全加密的数据通道,因此可以无缝地加密多种类型的数据。这在访问安全站点以使用 Communicator 查看安全在线文档时最为常见,并且是与 Communicator 以及许多其他 Netscape Communications 数据加密进行安全通信的基础。更多信息可以在 http://www.consensus.com/security/ssl-talk-faq.html 找到。有关 Netscape 的其他安全实现以及这些协议的良好起点的更多信息,请访问 http://home.netscape.com/info/security-doc.html。还值得注意的是,SSL 协议可用于传递许多其他常见协议,为它们“包装”以确保安全。请参阅 http://www.quiltaholic.com/rickk/sslwrap/
S-HTTP: - S-HTTP 是另一种在 Internet 上提供安全服务的协议。它旨在提供机密性、身份验证、完整性和不可否认性 [不会被误认为是其他人],同时通过参与每个事务的各方之间的选项协商来支持多种密钥管理机制和加密算法。S-HTTP 仅限于实现它的特定软件,并单独加密每条消息。[摘自 RSA 密码学 FAQ,第 138 页]
S/MIME: - S/MIME,或安全多用途 Internet 邮件扩展,是一种用于加密 Internet 上的电子邮件和其他类型消息的加密标准。它是 RSA 开发的开放标准,因此我们很可能很快会在 Linux 上看到它。有关 S/MIME 的更多信息,请访问 http://home.netscape.com/assist/security/smime/overview.html。
除了 CIPE 和其他形式的数据加密之外,还有其他几种 Linux 的 IPSEC 实现。IPSEC 是 IETF 努力在 IP 网络级别创建密码安全通信,并提供身份验证、完整性、访问控制和机密性。有关 IPSEC 和 Internet 草案的信息,请访问 http://www.ietf.org/html.charters/ipsec-charter.html。您还可以找到涉及密钥管理的其他协议的链接,以及 IPSEC 邮件列表和存档。
在亚利桑那大学开发的 x-kernel Linux 实现,使用一个基于对象的框架来实现名为 x-kernel 的网络协议,可以在 http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html 找到。最简单地说,x-kernel 是一种在内核级别传递消息的方法,这使得实现更容易。
另一个免费提供的 IPSEC 实现是 Linux FreeS/WAN IPSEC。他们的网页声明,""这些服务允许您通过不受信任的网络构建安全隧道。通过不受信任的网络传输的所有内容都由 IPSEC 网关机器加密,并由另一端的网关解密。结果是虚拟专用网络或 VPN。这是一个实际上是私有的网络,即使它包含通过不安全的 Internet 连接的多个不同站点的机器。""
它可以从 http://www.xs4all.nl/~freeswan/ 下载,并且在撰写本文时刚刚达到 1.0 版本。
与其他形式的密码学一样,由于出口限制,它默认不与内核一起分发。
ssh和stelnet是程序套件,允许您登录到远程系统并建立加密连接。
openssh是一个程序套件,用作安全的替代品rlogin, rsh和rcp。它使用公钥密码学来加密两台主机之间的通信,以及对用户进行身份验证。它可以用于安全地登录到远程主机或在主机之间复制数据,同时防止中间人攻击(会话劫持)和 DNS 欺骗。它将对您的连接执行数据压缩,并保护主机之间的 X11 通信。
现在有几个 ssh 实现。Data Fellows 的原始商业实现可以在 Thessh主页可以在 http://www.datafellows.com 找到。
优秀的 Openssh 实现基于 datafellows ssh 的早期版本,并已完全重新设计,不包含任何专利或专有部分。它是免费的,并采用 BSD 许可证。可以在以下位置找到:http://www.openssh.com。
还有一个开源项目从头开始重新实现 ssh,名为 “psst...”。有关更多信息,请参见:http://www.net.lut.ac.uk/psst/
您也可以使用ssh从您的 Windows 工作站到您的 Linuxssh服务器。有几个免费提供的 Windows 客户端实现,包括 http://guardian.htu.tuwien.ac.at/therapy/ssh/ 上的那个,以及 DataFellows 的商业实现,网址为 http://www.datafellows.com。
SSLeay 是 Eric Young 开发的 Netscape 安全套接字层协议的免费实现。它包括多个应用程序,例如安全 telnet、Apache 模块、多个数据库以及包括 DES、IDEA 和 Blowfish 在内的多种算法。
使用此库,创建了一个安全 telnet 替代品,它通过 telnet 连接进行加密。与 SSH 不同,stelnet 使用 SSL,即 Netscape 开发的安全套接字层协议。您可以通过从 SSLeay FAQ 开始找到安全 telnet 和安全 FTP,网址为 http://www.psy.uq.oz.au/~ftp/Crypto/。
SRP 是另一个安全 telnet/ftp 实现。从他们的网页
""SRP 项目正在开发免费的全球使用的安全 Internet 软件。从完全安全的 Telnet 和 FTP 发行版开始,我们希望用强大的替代品来取代弱联网身份验证系统,这些替代品不会为了安全性而牺牲用户友好性。安全应该是默认设置,而不是选项!""
较新版本的 Red Hat Linux 和 Debian Linux 发行版附带一个名为 “PAM” 的统一身份验证方案。PAM 允许您动态更改身份验证方法和要求,并封装所有本地身份验证方法,而无需重新编译任何二进制文件。PAM 的配置超出了本文档的范围,但请务必查看 PAM 网站以获取更多信息。https://linuxkernel.org.cn/pub/linux/libs/pam/index.html。
以下是您可以使用 PAM 执行的一些操作
对您的密码使用 DES 以外的加密方式。(使它们更难暴力破解解码)
对所有用户设置资源限制,以便他们无法执行拒绝服务攻击(进程数、内存量等)
动态启用影子密码(见下文)
允许特定用户仅在特定时间从特定地点登录
在安装和配置系统后的几个小时内,您就可以在许多攻击发生之前阻止它们。例如,使用 PAM 禁用系统范围内对.rhosts用户主目录中的文件,方法是将以下行添加到/etc/pam.d/rlogin:
# # Disable rsh/rlogin/rexec for users # login auth required pam_rhosts_auth.so no_rhosts |
该软件的主要目标是为跨不安全数据包网络(如 Internet)的安全(防止窃听,包括流量分析和伪造消息注入)子网互连提供便利。
CIPE 在网络级别加密数据。在网络上的主机之间传输的数据包被加密。加密引擎放置在发送和接收数据包的驱动程序附近。
这与 SSH 不同,SSH 在套接字级别按连接加密数据。在不同主机上运行的程序之间的逻辑连接被加密。
CIPE 可用于隧道传输,以创建虚拟专用网络。低级加密的优点是它可以使在 VPN 中连接的两个网络之间透明地工作,而无需更改任何应用程序软件。
从 CIPE 文档中总结
""IPSEC 标准定义了一组协议,这些协议可用于(除其他外)构建加密的 VPN。但是,IPSEC 是一个相当重量级且复杂的协议集,有很多选项,完整协议集的实现仍然很少使用,并且某些问题(例如密钥管理)仍未完全解决。CIPE 使用一种更简单的方法,其中许多可以参数化的内容(例如所用实际加密算法的选择)都是安装时固定的选择。这限制了灵活性,但允许进行简单(因此高效、易于调试...)的实现。""
更多信息可以在 http://www.inka.de/~bigred/devel/cipe.html 找到
与其他形式的密码学一样,由于出口限制,它默认不与内核一起分发。
Kerberos 是 MIT Athena 项目开发的身份验证系统。当用户登录时,Kerberos 会对该用户进行身份验证(使用密码),并为用户提供一种向网络中分散的其他服务器和主机证明其身份的方法。
然后,此身份验证被诸如rlogin之类的程序使用,以允许用户无需密码即可登录到其他主机(代替.rhosts文件)。邮件系统也可以使用此身份验证方法,以保证邮件已传递给正确的人,并保证发件人是其声称的人。
Kerberos 及其附带的其他程序可防止用户“欺骗”系统,使其相信他们是其他人。不幸的是,安装 Kerberos 非常具有侵入性,需要修改或替换许多标准程序。
您可以通过查看 kerberos FAQ 找到有关 kerberos 的更多信息,代码可以在 http://nii.isi.edu/info/kerberos/ 找到。
[来源:Stein, Jennifer G.、Clifford Neuman 和 Jeffrey L. Schiller。“Kerberos:开放网络系统的身份验证服务。”USENIX 会议论文集,德克萨斯州达拉斯,1998 年冬季。]
Kerberos 不应该是您提高主机安全性的第一步。它非常复杂,并且不如 SSH 广泛使用。
影子密码是一种对普通用户保密您的加密密码信息的方法。最新版本的 Red Hat 和 Debian Linux 默认使用影子密码,但在其他系统上,加密密码存储在/etc/passwd文件中供所有人读取。然后,任何人都可以对它们运行密码猜测程序,并尝试确定它们是什么。相比之下,影子密码保存在/etc/shadow中,只有特权用户才能读取。为了使用影子密码,您需要确保所有需要访问密码信息的实用程序都已重新编译以支持它们。PAM(上文)还允许您只需插入一个影子模块;它不需要重新编译可执行文件。如有必要,您可以参考 Shadow-Password HOWTO 以获取更多信息。它位于 http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html。它现在已经过时了,并且对于支持 PAM 的发行版来说不是必需的。
如果由于某种原因您的passwd程序没有强制执行难以猜测的密码,您可能需要运行密码破解程序,并确保用户的密码是安全的。
密码破解程序基于一个简单的想法工作:它们尝试字典中的每个单词,然后尝试这些单词的变体,加密每个单词并将其与您的加密密码进行比较。如果它们找到匹配项,它们就知道您的密码是什么。
有很多程序...其中最著名的两个是 “Crack” 和 “John the Ripper”(http://www.openwall.com/john/)。它们将占用您大量的 CPU 时间,但是您应该能够通过首先自己运行它们并通知使用弱密码的用户来判断攻击者是否可以使用它们进入。请注意,攻击者必须首先使用其他漏洞才能读取您的/etc/passwd文件,但是这样的漏洞比您想象的更常见。
由于安全性仅与最不安全的主机一样强大,因此值得一提的是,如果您的网络上有任何 Windows 计算机,则应查看 L0phtCrack,它是 Windows 的 Crack 实现。它可以从 http://www.l0pht.com 获得
CFS 是一种加密整个目录树并允许用户在其中存储加密文件的方法。它使用在本地计算机上运行的 NFS 服务器。RPMS 可在 http://www.zedz.net/redhat/ 获得,有关其工作原理的更多信息,请访问 ftp://ftp.research.att.com/dist/mab/。
TCFS 通过增加与文件系统的更多集成来改进 CFS,以便加密的文件系统对用户是透明的。更多信息请访问:http://www.tcfs.it/。
它也不需要在整个文件系统上使用。它也适用于目录树。
保护您的图形显示非常重要,以防止攻击者在您键入密码时抓取您的密码、读取您在屏幕上阅读的文档或信息,甚至使用漏洞来获得 root 访问权限。通过网络运行远程 X 应用程序也可能充满危险,允许嗅探器查看您与远程系统的所有交互。
X 有许多访问控制机制。其中最简单的是基于主机的:您使用xhost来指定允许访问您的显示的主机。这不是很安全,因为如果有人可以访问您的计算机,他们可以xhost + their machine并轻松进入。此外,如果您必须允许来自不受信任的计算机的访问,则那里的任何人都可以危及您的显示。
当使用xdm(X 显示管理器)登录时,您会获得更好的访问方法:MIT-MAGIC-COOKIE-1。生成一个 128 位 “cookie” 并将其存储在您的.Xauthority文件中。如果您需要允许远程计算机访问您的显示,则可以使用xauth命令和您的.Xauthority文件中的信息,仅为该连接提供访问权限。请参阅 Remote-X-Apps mini-howto,网址为 http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html。
您也可以使用ssh(参见上面的 第 6.4 节)以允许安全 X 连接。这还具有对最终用户透明的优点,并且意味着没有未加密的数据在网络上传输。
您还可以通过对 X 服务器使用 “-nolisten tcp” 选项来禁用与 X 服务器的任何远程连接。这将阻止通过 tcp 套接字与您的服务器建立任何网络连接。
查看Xsecurity手册页,以获取有关 X 安全性的更多信息。安全的做法是使用xdm登录到您的控制台,然后使用ssh转到您希望在其上运行 X 程序的远程站点。
SVGAlib 程序通常是 SUID-root,以便访问您的 Linux 机器的所有视频硬件。这使它们非常危险。如果它们崩溃,您通常需要重新启动计算机才能恢复可用的控制台。确保您正在运行的任何 SVGA 程序都是真实的,并且至少可以部分信任。更好的是,根本不要运行它们。
Linux GGI 项目正试图解决 Linux 上视频接口的几个问题。GGI 将把一小部分视频代码移入 Linux 内核,然后控制对视频系统的访问。这意味着 GGI 将能够随时将您的控制台恢复到已知的良好状态。他们还将允许使用安全注意键,以便您可以确定没有木马login程序在您的控制台上运行。http://synergy.caltech.edu/~ggi/