寻求 root 访问权的恶意用户总是会在系统上寻找配置了 SUID 或 SGID 位的程式。就象我们在 LPI 101 系列第 3 部分中讨论的那样,这些位使程式始终作为拥有该文档的用户或组运行。有时这是程式正确运行所必需的。问题是任何程式都可能包含允许用户在不正确地使用程式时获得特权的错误。
应该仔细考虑每个程式以确定是否需要将其 SUID 或 SGID 位打开。系统上有些 SUID/SGID 程式可能是根本无需的。
要搜索具备这样性质的程式,可使用 find 命令。例如,能够在 /usr 目录中启动对 SUID/SGID 程式的搜索:
# cd /usr
# find . -type f -perm 6000 -xdev -exec ls {} ;
-rwsr-sr-x 1 root root 593972 11-09 12:47 ./bin/gpg
-r-xr-sr-x 1 root man 38460 01-27 22:13 ./bin/man
-rwsr-xr-x 1 root root 15576 09-29 22:51 ./bin/rcp
-rwsr-xr-x 1 root root 8256 09-29 22:51 ./bin/rsh
-rwsr-xr-x 1 root root 29520 01-17 19:42 ./bin/chfn
-rwsr-xr-x 1 root root 27500 01-17 19:42 ./bin/chsh
-rwsr-xr-x 1 lp root 8812 01-15 23:21 ./bin/lppasswd
-rwsr-x--- 1 root cron 10476 01-15 22:16 ./bin/crontab
在这个清单中,我已发现了需要更仔细检查的侯选对象:lppasswd 是 CUPS 打印软件分发版的一部分。因为没有在系统上提供打印服务,所以我会考虑除去 CUPS,那也会除去 lppasswd 程式。lppasswd 中可能没有危及安全性的错误,但为什么要在不使用的程式上冒险呢?同样地,应该关闭任何不使用的服务。您总是能够在需要时再启用他们。
用 ulimit 配置用户限制
bash 中的 ulimit 命令提供了限制特定用户的资源使用情况的方法。一旦限制降低,则在进程的生命期内无法提高该限制。此外,该限制会被任何子进程继承。结果是:能够在 /etc/profile 中调用 ulimit,而限制将以不能撤消的方式应用于任何用户(假设用户正在运行 bash 或另一个 shell,该 shell 在登录时运行 /etc/profile)。
要检索当前限制,可使用 ulimit -a:
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 3071
virtual memory (kbytes, -v) unlimited
以一种能实际提高系统安全性而不会对合法用户造成麻烦的方式配置这些限制是相当复杂的,所以调整这些配置时要小心。
查找 SUID/SGID 程式
作为 ulimit 的一个示例,我们尝试将一个进程的 CPU 时间配置为 1 秒钟,然后用一个忙循环使他超时。一定要确保启动新的 bash 进程(象我们在下面做的那样),以在其中进行尝试;否则将被注销!
# time bash
# ulimit -t 1
# while true; do true; done
Killed
real 0m28.941s
user 0m1.990s
sys 0m0.017s
在上面的示例中,“user”时间加上“sys”时间等于该进程所用的全部 CPU 时间。当 bash 进程到达 2 秒标记时,Linux 断定他超过 1 秒的限制,因此该进程被杀掉。酷吧?
注:一秒钟只是示例而已。不要对您的用户这样做!即使几小时也是不对的,因为 X 真地很消耗时间(我当前的会话已用掉了 69 小时的 CPU 时间)。在实际的实现中,您可能要对某些项而不是 CPU 时间执行 ulimit。
您可能希望限制诸如同时登录数量或磁盘使用情况之类的项。ulimit 还不能解决这些问题;您应该转而查看以下包之一:
- Clobberd 监控用户活动,并计量如时间和网络活动这样的资源。
- Idled 能够注销空闲时间过长的用户或登录了很长时间的用户。他还能够防止用户登录次数过多,连同完全拒绝用户登录。
- LPI 101 系列第 4 部分讨论了文档系统限额的实现。
入侵预防
外部安全性可分为两类:入侵预防和入侵检测。采取入侵预防手段是为了防止未授权用户访问系统。假如这些手段失败,那么入侵检测在确定何时发生未授权访问连同造成什么损坏方面或许有用。
完全的 Linux 安装是巨大且复杂的系统。跟踪已安装的每一项是很困难的,而配置每个包的安全性特征就更困难了。安装的包越少,则问题就变得越简单。入侵预防的第一步是除去无需的包。回头看看 LPI 101 系列第 4 部分以对打包系统进行回顾。
| 关闭未使用的网络服务(终极服务器) |
关闭未使用的网络服务一直是提高入侵预防能力的好方法。例如,假如正在运行因特网终极服务器(如本教程前面描述的 inetd 或 xinetd),那么 in.rshd、in.rlogind 和 in.telnetd 通常都在缺省情况下启用。这些网络服务几乎都已被更安全的替代项(如 ssh)所取代。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




