首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

精通 fpm(1)

精通 fpm(1)

理解 SUIDSUID 或 SGID 是一些权限位,可以在程序中设置它们,从而允许非特权用户能够像程序所有者那样运行程序(通常但并不总是在程序执行期间)。例如,查看下面的密码命令(root 用户拥有所有权):
1
2
$ ls -l passwd
-r-s r-x r-x   1 root security   29122 Aug 8 00:16 passwd




如果要修改密码,则需要运行前面的命令。该命令使我就能够修改密码,并将加密后的密码写入到 /etc/security/passwd 文件中(还会发生其他流程,但是本文不打算对它们进行讨论)。和普通用户一样,我没有更新 /etc/security/passwd 文件的权限。然而,由于密码程序为 SUID 并且归 root 用户所有,可以需要使用 root 用户身份而不是我的 ID 更新文件。简单地说,一个非特权用户可以像程序所有者那样运行 SUID。
AIX 报告两种类型的用户 ID。它们为:
  • 真实用户 ID
  • 有效(特权)用户 ID
有效用户 ID 就是指拥有程序或文件的 ID。因此,在上面的密码示例中,如果用户 dxtans 运行 passwd 命令:
  • 真实的用户 ID 为 dxtans
  • 有效用户 ID 为 root
要确定用户 ID 信息(即真实有效的用户 ID,在所有情况下是相同的),并且如果 id 命令是从命令行中运行的,那么只有真实 ID 会显示出来。真实用户 ID 是指启动流程的用户。
1
2
3
4
$ whoami
dxtans
$ id
uid=204(dxtans) gid=1(staff) groups=201(admin),208(sysmaint)




要使编译后的 SUID 或 SGID 程序使用 chmod 命令,并且采用八进制计数法,那么将使用第一个 8 位位组,其中:
  • 4 用于 SUID
  • 2 用于 SGID
例如,要使所有人能够读取和运行以下示例,那么:
chmod 4555 <file-name> 将生成文件 SUID:
1
r-s r-x r-x




chmod 6555 <file-name> 生成 SUID 和 SGID 文件:
1
r-s r-s r-x




要去掉 SUID,使用第一个例子,运行下面的命令:
1
chmod 555 < file-name>




如果 id 命令是从 SUID 封装器程序中运行的,后者由 root 用户所有,并由其他(非特权)用户运行,那么将同时显示真实的和有效的用户 ID。下面的 C 代码将调用 id 命令。我们可以看到,只要程序为 SUID,那么将同时显示两种 ID。
1
2
3
4
5
6
7
# cat idshow.c
int main(void)

{
system("/usr/bin/id");

}




作为 root 用户,创建前面的文件并命名为 idshow.c,然后进行编译。
1
# gcc -o idshow idshow.c




接下来,在文件中设置 SUID 位。
1
2
3
# chmod 4555 idshow
# ls -l
-r-s r-x r-x 1 root system   52699 Nov 28 10:07 idshow




现在,以另一个用户的身份(例如 dxtans)发出 id 命令:
1
2
$ id
uid=204(dxtans) gid=1(staff) groups=201(admin),208(sysmaint)




现在,以另外的用户身份运行新创建的程序:
1
2
$ ./idshow
uid=204(dxtans) gid=1(staff) euid=0(root) groups=201(admin),208(sysmaint)




在 id 命令(调用子 idshow)的输出中,注意用户的 ID 为 dxtans。然而,创建了一个名为 euid 的新字段,这是前面程序中用户的有效用户 ID,在本例中,它是 root 用户。
1
2
3
Setting the SGID bit on directories that holds logs or documents, you can allow
different group members to write to one directory, thus allowing the system administrator
not having to go down the path of doing a chmod 777.




回顾 SUID 的用法在本文其余部分,当我提到 SUID 时,我还在引用中包括了 SGID。一般来讲,某些 SUID 程序被认为存在潜在的安全风险。它们以有效用户 ID 的身份运行,在最常见的情况下,这些 ID 均为 root 用户。因此,root 用户对于设置了 SUID 程序的所有用户均是开放的。Shell 脚本对 SUID shell 脚本采用非常松懈的写权限,虽然内核忽略了这些脚本,但是它们会造成很严重的问题,因为这将把整个系统公开给不适宜的对象。这仅仅解释了 AIX 和大多数其他 UNIX® 及 Linux® 系统忽略所有设置了 SUID 或 SGID 位的 shell 脚本的部分原因。如今,一种常见的做法是禁用或移除一些 SUID 系统或应用程序命令,而是使用 sudo 或基于角色的权限由非授权用户运行程序。在履行安全策略并需要限制 root 访问时就需要这样做。这意味着对基于 root 的 SUID 命令进行重新评估。AIX 支持这种方法并提供了一个名为 fpm 的实用工具,可以从程序中移除 SUID 位。fpm 实用工具控制您希望设置或移除的 SUID 和 SGID 程序数量。虽然 fpm 是 AIX 安全基于角色访问控制 (RBAC) 和 AIX 6 的 aixpert 实现的一部分,它也包含在 5.3 TL6 版本中。虽然应当对 SUID 程序的使用进行回顾,但是有许多类似于 passwd 命令的 SUID 程序可以忽略不管。
1
2
3
To locate all the SUID and SGID programs in your server, use the following find command:
# find / -perm -4000 -o -perm
-2000|more<br>/usr/bin/acctctl/usr/bin/acctras




fpm 工具fpm 工具通过移除相应的 SUID 位,使您能够限制对 SUID 程序的执行。AIX 提供了以下安全级别,基于通用的安全策略和非特权用户最有可能的使用方法。
  • 高级
  • 中级
  • 低级
  • 额外的自定义级别
fpm 使用的文件的位置为:
  • /usr/lib/security/fpm/data 中的文件包含不同级别的系统 SUID
  • /usr/lib/security/fpm/custom 中的文件为包含 bespoke SUID 的自定义文件
在 /usr/lib/security/fpm/data 目录中,您具有以下列表,其中包含将要修改的文件:
  • 高级别使用 high_fpm 列表,并将移除列表中所有的 SUID/SGID。
  • 中级别使用 med_fpm 列表并将移除列表中所有的 SUID/SGID。
  • 低级别使用 med_fpm 列表并将移除列表中所有的 SUID。
  • 默认级别将使用 default_list_example 并将该列表中的 SUID/SGID 存储到一个 AIX 默认安装中。
在 /usr/lib/security/fpm/custom 目录内,您将看到以下子目录,可以根据安全级别存放自定义列表,其中 SUID 将移除或添加位:
  • Default
  • High
  • Medium
fpm 命令最常见的用法是:
1
fpm -l <level>  -p -v -f




其中:
  • level 可以是高、中、低或默认级别
  • -p 仅用于预览结果,不会对文件进行修改
  • -v 会生成详细的输出,默认情况下,在不运行预览时为最小输出
  • -f 是一个文件,包含将要修改的文件名
自定义目录保存您希望进行处理的 bespoke/custom SUID 文件。
数据目录保存 IBM AIX 确定的不同安全级别,文件名具有自解释性。您应当查看这些文件的内容,了解哪些程序被修改过。您需要了解从文件中删除的某些 SUID 位的含义。
fpm 所作的任何修改都将记录到位于 /var/security/fpm/log 的日志文件中。
在运行 fpm 时,根据所解析的安全级别,它还将包括文件内容(如果在相应的自定义目录中给出的话)。因此,如果我需要在中级安全级别上运行 fpm,它将使用 /usr/lib/security/fpm/data/med_fpm_list 中包含的列表,以及 /usr/lib/security/fpm/custom/medium 中的列表(如果有的话)。
为了谨慎起见,在第一次运行 fpm 时,我对系统进行了备份。然而,fpm 按照预期运行,期间未出现任何问题。

如果运行了 fpm 并且产生的变更对系统产生不良影响,那么可以恢复到先前的设置或恢复到在服务器中安装 AIX 时的初始设置。
返回列表