系统管理指南:安全性服务

防止程序受到安全风险(任务列表)

以下任务列表说明查找系统中的危险可执行程序,以及禁止程序利用可执行栈的过程。

任务 

说明 

参考 

使用特殊权限查找文件 

查找设置了 setuid 位,但不归 root 用户拥有的文件。

如何使用特殊文件权限查找文件

防止可执行栈溢出 

防止程序利用可执行栈。 

如何禁止程序使用可执行栈

防止记录可执行栈消息 

关闭记录可执行栈消息 

示例 6–13

Procedure如何使用特殊文件权限查找文件

应对系统中未经授权在程序中使用 setuidsetgid 权限的情况进行监视。使用 setuidsetgid 权限,普通用户可以获取超级用户功能。可疑可执行文件为用户而不是 rootbin 授予拥有权。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 find 命令查找拥有 setuid 权限的文件


    # find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename
    
    find directory

    检查以指定的 directory(可以是 root (/)、sys binmail)开头的所有挂载路径。

    -user root

    仅显示由 root 拥有的文件。

    -perm -4000

    仅显示权限被设置为 4000 的文件。

    -exec ls -ldb

    ls -ldb 格式显示 find 命令的输出。

    >/tmp/filename

    包含 find 命令的结果的文件。

  3. /tmp/filename 中显示结果。


    # more /tmp/filename
    

    有关 setuid 权限的背景信息,请参见setuid 权限


示例 6–12 使用 setuid 权限查找文件

以下示例的输出显示,名为 rar 的用户创建了一份 /usr/bin/sh 的个人副本,并将权限设置为 rootsetuid。因此,/usr/rar/bin/sh 程序将使用 root 权限运行。

通过将文件从 /tmp 目录中移出,可以保存此输出以供将来参考。


# find / -user root -perm -4000 -exec ls -ldb {} \; > /var/tmp/ckprm

# cat /var/tmp/ckprm

-r-sr-xr-x 1 root bin 38836 Aug 10 16:16 /usr/bin/at

-r-sr-xr-x 1 root bin 19812 Aug 10 16:16 /usr/bin/crontab

---s--x--x 1 root sys 46040 Aug 10 15:18 /usr/bin/ct

-r-sr-xr-x 1 root sys 12092 Aug 11 01:29 /usr/lib/mv_dir

-r-sr-sr-x 1 root bin 33208 Aug 10 15:55 /usr/lib/lpadmin

-r-sr-sr-x 1 root bin 38696 Aug 10 15:55 /usr/lib/lpsched

---s--x--- 1 root rar 45376 Aug 18 15:11 /usr/rar/bin/sh

-r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /usr/bin/df

-rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /usr/bin/newgrp

-r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /usr/bin/passwd

-r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /usr/bin/su

# mv /var/tmp/ckprm /export/sysreports/ckprm

Procedure如何禁止程序使用可执行栈

有关可执行栈的安全风险的说明,请参见防止可执行文件危及安全

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/system 文件并添加以下行:


    set noexec_user_stack=1
  3. 重新引导系统。


    # init 6
    

示例 6–13 禁止记录可执行栈消息

在此示例中,将禁止记录可执行栈消息,然后重新引导系统。


# cat /etc/system

set noexec_user_stack=1

set noexec_user_stack_log=0

# init 6