在将您的系统联线之前,几分种的准备和计划能帮助您保护它们和存储其中的数据。
决不能允许 SUID/SGID 程序从用户的主(home)目录运行。请在 /etc/fstab 文件中对 root 之外的用户能够写入的分区使用 nosuid 选项。您也可能想对用户的主(home)分区以及 /var 目录使用 nodev 和noexec,以禁止运行程序及建立不需要的字符或块设备。
如果您正使用 NFS 输出文件系统,请确定用最严格的访问权限配置了 /etc/exports。这表示不要使用通配符,不允许 root 的写权限,以及尽可能只读导出。
请尽量严格配置您的用户建立文件使用的 umask。参见"umask 设定"。
如果您在挂载类如 NFS 的网络文件系统,请确认用合适的限制规则配置了 /etc/fstab。一般,请使用 nodev、nosuid,也可能需要 noexec 选项。
设置文件系统限额来代替默认的 unlimited (无限额)。您可以使用资源限额 PAM 模块和 /etc/pam.d/limits.conf 来控制每个用户的限额。例如:对 users 组的限额类似:
@users hard core 0 @users hard nproc 50 @users hard rss 5000 |
/var/log/wtmp 和 /var/run/utmp 文件包含您系统上所有用户的登录纪录。请维护其完整性,因为从中能够确定某个用户(或是潜在入侵者)何时何地进入您的系统。这些文件也应该具有 644 访问权限,以避免影响正常系统操作。
“不变位”能用来防止意外删除或改写必须被保护的文件。它也能防止建立到该文件的硬链接。关于“不变位”的详情请参见 chattr(1)。
具有 SUID 和 SGID 位的文件对于您的系统是潜在威胁。请密切注意它们。由于这些程序赋予运行它们的用户特殊的权限,有必要确认没有安装不安全的程序。攻击具有 SUID-root 的程序,然后留下一个具有 SUID 的程序作为下次攻击的后门而不用担心原有的漏洞是否已经被填补,这是一个骇客们喜欢使用的伎俩。
找出您系统中所有具有 SUID/SGID 的程序,并记录下它们是什么,这样您就能了解任何一个显示潜在入侵者作过更动的征兆。请使用下列命令找出您系统上所有具有 SUID/SGID 的程序:
root# find / -type f \( -perm -04000 -o -perm -02000 \) |
所有人都可以写入的文件(特别是系统文件),在某个骇客获得访问您系统的权限并且改写它们之后将会成为安全性漏洞。而且,所有人都可以写入的目录也是危险的,因为它们允许骇客为所欲为地添加或删除文件。要找出您系统中全部所有人都可以写入的文件,请使用下述命令:
root# find / -perm -2 ! -type l -ls |
并请确定您知道为什么那些文件是可写入的。在正常操作过程中,有一些文件将会是所有人都可以写入的,包括 /dev 之中某些以及符号链接。因此 ! -type l 将其从 find 命令结果中删除。
无人拥有的文件也是一个入侵者侵入您系统的征兆。您可以使用下述命令找出您系统中不属于任何用户或用户组的文件:
root# find / \( -nouser -o -nogroup \) -print |
找出 .rhosts 文件也应该是您日常系统维护职责之一,因为不能允许它们在您的系统上。记住,骇客只需要一个不安全的账户就有能力攻占您的整个网络。您可以使用下述命令找出您系统中的全部 .rhosts 文件:
root# find /home -name .rhosts -print |
最后,在改变任何系统文件的权限之前,请确定您明白您在做什么。决不要因为看起来好像是一个捷径而更改某一个文件的权限。在更改某个文件的权限之前,都请确定为什么该文件要有那个权限。
umask 命令是用来决定您系统中文件建立的默认模式(权限)。它是期望模式(权限)的八进制补码。如果在建立文件时没有指定其权限,该文件可能不为建立它的用户所知地对其他人开放读或者写权限。常用的 umask 设定有 022、027 和 077 (最严格)。一般在 /etc/profile 中设置 umask,因此这一设置适用于系统上全部用户。文件建立掩码可以通过从 777 中减去期望的值计算得到。换句话说,掩码为 777 将导致新建立的文件对于任何人都不能够读、写及执行。掩码为 666 将导致新建立的文件具有 111 模式。例如:
# 设定用户默认 umask umask 033 |
请确保将 root 的 umask 设为 077,以保证除非显式使用 chmod 改变,其他用户既不能读写也不能执行。在这种情况下,新建立的目录会有 744 权限(从 777 中减去 033 得到)。使用 033 umask 新建立的文件将拥有 644 权限。
确保您的系统文件不会被那些不作系统维护的用户意外修改是很重要的。
UNIX 将文件和目录的访问权限分为三组:所有者、所有者组、和其他人,分别由一个所有者、一些同组的成员、以及其余所有人组成。
权限 – 能够设置和清除以允许对文件的某一访问权限的二进制位。目录权限其含义可能不同于具有同一权限的文件。
-rw-r--r-- 1 zhang users 114 Aug 28 1997 .zlogin 1号位 - 是否为目录? (不是) 2号位 - 所有者可读? (是的,zhang 用户) 3号位 - 所有者可写? (是的,zhang 用户) 4号位 - 所有者可执行? (不是) 5号位 - 组可读? (是的,users 组) 6号位 - 组可写? (不是) 7号位 - 组可执行? (不是) 8号位 - 其他人可读? (是的,所有人) 9号位 - 其他人可写? (不是) 10号位 - 其他人可执行? (不是) |
以下几行列举了满足所需访问权限的最小权限集合。您可以给予更多的权限,但这里只描述这些最小权限对于文件的作用:
-r-------- 允许文件所有者读取该文件 --w------- 允许文件所有者修改或删除该文件 (注意:对该文件所在目录拥有写权限的任何人 都能通过覆盖该文件从而删除它) ---x------ 允许所有者执行该程序,要执行 shell 脚本 还需要读权限 ---s------ 以有效用户 ID = 所有者的执行 ------s--- 以有效组 ID = 组的执行 -rw------T 不能更新 "最新修改时间(last modified time)"。 通常用于交换文件 ---------t 无效。(前述“粘滞位”) |
drwxr-xr-x 3 zhang users 512 Sep 19 13:47 .public_html/ 1号位 - 是否为目录? (是的,它包含许多文件) 2号位 - 所有者可读? (是的,zhang 用户) 3号位 - 所有者可写? (是的,zhang 用户) 4号位 - 所有者可执行? (是的,zhang 用户) 5号位 - 组可读? (是的,users 组) 6号位 - 组可写? (不是) 7号位 - 组可执行? (是的,users 组) 8号位 - 其他人可读? (是的,所有人) 9号位 - 其他人可写? (不是) 10号位 - 其他人可执行? (是的,所有人) |
以下几行列举了满足所需访问权限的最小权限集合。您可以给予更多的权限,但这里只描述这些最小权限对于目录的作用:
dr-------- 能够浏览内容,但不能读取文件属性 d--x------ 能够进入该目录,也可包含于完整执行路径中 dr-x------ 文件属性能被其所有者读取 d-wx------ 能够建立/删除文件,既使该目录不是当前目录 d-----x--t 防止拥有写权限的其他人删除文件。 用于 /tmp 目录 d--s--s--- 无效 |
系统配置文件(通常在 /etc 目录中)的模式通常为 640 (-rw-r-----),并由 root 所有。取决于您站点的安全性需求,您可能想要对其调整。决不要让系统文件对于某个组或是其他人可写。某些配置文件(包括 /etc/shadow)应该只能由 root 读取,并且 /etc 中的目录至少应该阻止其他人访问。
检测您系统上本地(以及网络)攻击的另一个好方法是执行完整性检查程序,例如 Tripwire、Aide 和 Osiris。这些完整性检查程序对您所有重要的二进制代码和配置文件执行一系列校验,并将它们与先前已知完好的数据库进行比较以作为参考。因此,对这些文件任何的更改都会被标出。
请将这些类型的程序安装到软盘上,然后设置该软盘的物理写保护。这样一来,入侵者就不能篡改完整性检查程序本身或是数据库了。一旦您按照上述方法装备完毕,请将其作为您日常安全管理职责的一部分来执行它,以察看是否存在任何更改。
您甚至可以添加一条 crontab 条目以便每晚从软盘上执行该检查程序,并且将结果在早晨寄给您。例如:
# 设定收件人 MAILTO=zhang # 运行 Tripwire 15 05 * * * root /usr/local/adm/tcheck/tripwire |
将在每天早晨 5:15am 给您寄送一份报告。
完整性检查程序能在您察觉入侵者之前侦测到他们。因为在您的系统中可能有许许多多文件更改,您需要仔细确定什么是骇客行为,而什么是您自己的。
您能在 TripWire 网站上找到免费的但不提供支持的 Tripwire 版本。手册和技术支持需要购买。
可在 Sourceforge 上找到 Aide。
可在 OSIRIS –– 主机完整性管理网站找到 OSIRIS。
"特洛伊木马"因荷马史诗"伊利亚德(Iliad)"中虚构的战役命名。其思想是骇客发布某个听起来不错的程序或二进制代码,并鼓励人们下载并以 root 权限执行。随后,该程序会在他们不注意的时候破坏他们的系统。虽然他们认为他们下载的二进制代码做了某事(可能挺好),然而它同时也破坏了他们的安全性。
您应该注意在您的计算机上都安装了哪些程序。Mandrakesoft 在它提供的 RPM 文件上包含 MD5 校验及 PGP 签名,以便您可以验证您正在安装的确实是真实的东西。决不要以 root 身份运行任何不熟悉的,没有其源代码的程序!几乎没有骇客会愿意公布源代码让公众审查。
虽然可能挺复杂,但是请确定您从其真实的发布站点得到该程序的源代码。如果该程序要以 root 身份执行,请确定您或您所信任的某人已经查看并确认了其源代码。