语言入口:简体中文 | English | 北亚博客
 
    
 
北亚Linux数据恢复

首席工程师:张宇

手机:18600440055

座机:4006-505-646-806

传真:4006-505-646-810

Email:zy@frombyte.com

地址:北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
QQ:免费咨询
当前位置:首页>>Linux修复知识>>Linux资源文档>>正文
Linux修复知识

如何将应用程序集成到 AIX RBAC 中?

 

许多管理员都有关于 AIX 基于角色的访问控制(RBAC)方面的问题:

它会正常运行吗?
将打破什么?
我已经试过了,但是现在为什么还没有看到任何区别?
将一个应用程序集成到 RBAC 中怎么样?
对于那些想要一个程序模板来将应用程序集成到 AIX RBAC 中的管理员来说,可以考虑下列关于如何使用 AIX RBAC 启动 / 停止 Apache HTTPD 的示例。该示例演示了在没有管理员特权的情况下,如何启动 / 停止 httpd 服务。进一步采用这些步骤时,记住一定要在以 root 用户启动时验证应用程序是否在正常运行。如果当以 root 用户启动时应用程序无法运行,那么您就可以假定该应用程序不是访问问题,而是其他需要首先解决的问题。

步骤 1:创建一个沙盒

使用默认值安装 AIX V6.1 或 7.1。同时,还可以安装 openssh,但不是必须的。

步骤 2:安装一个应用程序,例如,Apache HTTPD

安装 Apache HTTPD 服务。可以通过任何方式完成安装。例如,在本例中,我使用了一个我自己构建的资源和主机作为 AIXTOOLS。

步骤 3:验证成功安装,以 root 用户验证是否可以使用命令 "apachectl start" 启动 / 停止 httpd 服务,当您浏览 “首页” 时,可以得到 Apache “It works!” 页面,或者是一些您已安装的内容。

步骤 4:启动“非 root” 环境

以 root 用户编辑 httpd.conf 文件,这样就可以使用用户 / 组 httpd/httpd:创建 httpd 组和用户 id,然后使用命令 chown -R httpd:httpd /var/httpd。再次以 root 用户进行验证,您可以启动 / 停止 httpd 以及显示 “It Works!” 页面。

步骤 5:展开调查

现在,您可以开始调查对于启动和停止 httpd 服务,非 root 用户可以做什么,不可以做什么。从我们刚刚创建的用户开始。因为用户 httpd 拥有所有文件的所有正常访问权(读、写、执行),这些特权应该在适当的地方提供。如果步骤 4 中一切正常运行,那么我们在这里看到的任何启动问题都是由于缺乏一个或多个特权导致的。

# apachectl stop
# su - httpd
$ apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
$ apachectl start
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
 


该示例显示,虽然用户 httpd 安装的模块可被列出(apachectl -l),但是我不能启动全服务(full-service)。Error (AH00072) 表示用户 httpd 缺乏绑定到端口 80 的足够特权。由于缺乏 “超级” 用户特权,应用程序没有执行 LISTEN 的任何套接字,最后关闭。

步骤 6: 设置应用程序 / 数据所有者

上述步骤使用帐户 id “httpd” 确保文件访问特权并不是问题所在。然而,对于一个真实环境,数据所有者和应用程序管理用户身份应该有所不同。使用组写入特权和 / 或切换用户(超级用户)访问特权来管理一个应用程序,将会使应用程序数据完整性处于危险中。

从 su - httpd 环境退出,返回到 root 特权。httpd 帐户意味着一个所有者帐户,而不是一个操作帐户。要阻止任何人以超级用户特权访问 httpd 帐户,进行以下更改(更改 PS1 提示来声明哪个身份被激活):

 root@x103:[/]chsec -f /etc/security/login.cfg -s usw -a
 shells="/bin/sh,/bin/bsh,/bin/csh,/bin/ksh,/bin/tsh,/bin/ksh93,/usr/bin/sh,
 /usr/bin/bsh,/usr/bin/csh,/usr/bin/ksh,/usr/bin/tsh,/usr/bin/ksh93,
 /usr/bin/rksh,/usr/bin/rksh93,/bin/
 false"

 root@x103:[/]mkgroup -a NONE

 root@x103:[/]chuser pgrp=httpd groups=httpd home=/dev/null shell=/bin/false login=false
 su=false rlogin=false daemon=false admin=true sugroups=NONE httpd

 root@x103:[/]su - httpd
 3004-614 Unable to change directory to "/dev/null".
         You are in "/home/guest" instead.
 root@x103:[/]id
 uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
 root@x103:[/]
 


粗体文本显示,root 用户甚至也不能成为 httpd(存在 shell /bin/false)。此外,非 root 用户将由属性 login、rlogin、su 和 sugroups 锁定。

步骤 7: 为应用程序操作建立一个 userid

以 root 用户创建一个新用户(身份),该用户身份将可用于管理 httpd 服务,例如,httpd_op(httpd 操作)。

 root@x103:[/]mkuser httpd_op
 


(请注意,该帐户不在 httpd 组中,我们将使用 RBAC 获取任何所需的访问特权 - 非组特权。)

步骤 8:为 root 和 非 root 用户创建不同的会话

在一个新的窗口中,以 httpd_op 身份登录,并重复步骤 5 的动作。应该的到相同的错误,甚至更糟的是,现在都没有特权来运行这个程序了。同时,像前面一样,检查 root 会话中,httpd 服务依旧可以使用 apachctl 来启动和关闭。

步骤 9:使用 tracepriv 命令确定所需的特权。在 httpd_op 的会话窗口中,得到 Shell 进程的 ID:

 httpd_op@x103:[/home/httpd_op]echo $$
 5243132
 


在 root 会话窗口中,利用进程 ID 来提升会话的特权,这样后面这个会话就具有 root 特权了:

 root@x103:[/]setsecattr -p iprivs=PV_ROOT 5243132
 


步骤 10:启动 / 关闭 httpd

在 http_op 会话经过特权提升以后,使用 apachectl 脚本启动 / 关闭 httpd:

 httpd_op@x103:[/home/httpd_op]id
 uid=204(httpd_op) gid=1(staff)
 httpd_op@x103:[/home/httpd_op]apachectl start
 httpd_op@x103:[/home/httpd_op]apachectl stop
 


我们现在知道了可以通过 tracepriv 得到的所需特权以及 Shell 提升的方法来实现上面的功能。-f 选项十分重要,我们可以通过它知道从 Shell 启动 /opt/httpd/sbin/httpd 需要哪些特权:

 httpd_op@x103:[/home/httpd_op]tracepriv -ef apachectl start
 6619318: Used privileges for /usr/bin/apachectl:
  PV_DAC_R                           PV_KER_ACCT                     
  PV_KER_RAC                      

 6619318: Used privileges for /etc/apachectl:
  PV_DAC_R                           PV_KER_ACCT                     
  PV_KER_RAC                      

 6357072: Used privileges for /usr/sbin/apachectl:
  PV_TP_SET                          PV_KER_RAC                      

 6357072: Used privileges for /opt/httpd/sbin/httpd:  
 PV_DAC_R                           PV_DAC_W                           
 PV_DAC_X                           PV_DAC_O                           
 PV_KER_RAC                         PV_NET_CNTL                        
 PV_NET_PORT                     

 6619318: Used privileges for /usr/sbin/apachectl:
  PV_AZ_ROOT                         PV_TP_SET                       
  PV_KER_ACCT                        PV_KER_RAC 

 httpd_op@x103:[/home/httpd_op]tracepriv -ef apachectl stop
 6422566: Used privileges for /usr/bin/apachectl:
  PV_DAC_R                           PV_KER_ACCT                     
  PV_KER_RAC                      

 6422566: Used privileges for /etc/apachectl:
  PV_DAC_R                           PV_KER_ACCT                     
  PV_KER_RAC                      

 5832890: Used privileges for /usr/sbin/apachectl:
  PV_TP_SET                          PV_KER_RAC                      

 5832890: Used privileges for /opt/httpd/sbin/httpd:  
 PV_DAC_R                           PV_DAC_X                           
 PV_DAC_O                           PV_PROC_SIG                        
 PV_KER_RAC                         PV_NET_CNTL                        
 PV_NET_PORT                     

 6422566: Used privileges for /usr/sbin/apachectl:
  PV_AZ_ROOT                         PV_TP_SET                       
 PV_KER_ACCT                        PV_KER_RAC 
 


步骤 11:创建授权

从上面,我们看到使用 apachectl 启动 httpd 服务需要一系列的特权。作为 root,还需要创建相应的授权来关联这一系列特权。换句话说,我们目前具有的特权还无法以更细颗粒度的方式来实现分配还是不分配给哪些用户。RBAC 中的授权像是打开特权集合的钥匙。

特权是可以分层次的,所以必须从根部开始进行定义。所有以 aix 开头的授权都是保留给 root 用户使用的。如果没有创建完整的层次,AIX 会在命令执行完成后报出错误。在这个例子中,我们使用 aixtools.httpd.operate 特权来代表所需的特权:

root@x103:[/]mkauth aixtools.httpd.operate
1420-004 Authorization hierarchy "aixtools.httpd" does not exist.
root@x103:[/]mkauth aixtools
root@x103:[/]mkauth aixtools.httpd
root@x103:[/]mkauth aixtools.httpd.operate
 


现在,授权创建好了,可以使用 setsecattr 命令继续向可执行的命令分配“授权:特权”对。

 root@x103:[/]setsecattr -c authprivs=aixtools.httpd.operate=
 PV_DAC_R+PV_DAC_W+PV_DAC_X+PV_DAC_O+PV_KER_RAC+PV_NET_CNTL+PV_NET_PORT
 accessauths=aixtools.httpd.operate secflags=FSF_EPS /opt/httpd/sbin/httpd
 


所有这些操作会修改 /etc 目录下的一些文件。为了让内核了解这些更新,我们需要手动地更新内核的安全表:

 root@x103:[/]setsecattr -c
 authprivs=aixtools.httpd.operate=PV_DAC_R+PV_DAC_W+PV_DAC_X+PV_DAC_O+PV_KER_RAC
 +PV_NET_CNTL+PV_NET_PORT
 accessauths=aixtools.httpd.operate secflags=FSF_EPS /opt/httpd/sbin/httpd
 


步骤 12:创建和委派角色给用户

现在,命令已经被赋予了相应的 RBAC 授权和特权,这时候需要将相应的钥匙授予用户了。RBAC 中的角色(role)就是这个钥匙。现在,就需要创建一个角色,然后将角色和授权联系起来。一旦联系完成,就可以将角色授予用户了:

 root@x103:[/]mkrole authorizations="aixtools.httpd.operate"
 dfltmsg="APACHE HTTPD Control" apacheops
 root@x103:[/]setkst
 root@x103:[/]chuser roles=apacheops httpd_op
 


步骤 13:重新登录,然后使用角色用户来操作 Apahce HTTPD

RBAC 已经就绪了!特权已经定义,授权已经创建,并将“授权:特权”对赋予了命令。角色也创建好,并授予了用户。现在,就检验一下成果吧。记住:不要再继续使用旧的 Shell 会话,

 *******************************************************************************
 *                                                                             *
 *  Welcome to AIX Version 6.1!                                                *
 *                                                                             *
 *                                                                             *

本新闻共2页,当前在第1页  1  2  

上一篇:AIX/Unix/Linux/HP-UX 系统中文字符编码设置
下一篇:RAID6结构原理详解(北亚Linux工程师张宇老师原创)
JFS文件系统简介
XFS文件系统简介
Reiserfs文件系统简介
EXT3文件系统简介
常见Linux文件系统简介
GRUB简介与配置
LILO的使用和配置
Linux单用户模式维护系统
引导加载程序简介
重置Linux用户口令
  版权所有@北京北亚宸星科技有限公司   京ICP备09039053号    
  总部电话:(010)82488636  中国·北京·海淀区永丰基地丰慧中路7号新材料创业大厦B座205室              站点地图   联系我们  RSS阅读