Linux操作系统内部和外部安全性综合概述

来源:Linux认证    发布时间:2012-11-10    Linux认证视频    评论


  查找 SUID/SGID 程序

  寻求 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

  以一种能实际提高系统安全性而不会对合法用户造成麻烦的方式设置这些限制是相当复杂的,所以调整这些设置时要小心。

  用 ulimit 设置 CPU 时间限制

  作为 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。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答