IBM®UrbanCode Deploy (以前称为uDeploy)是用于软件部署自动化的基于Web的应用程序。 它提供了一个图形用户界面(GUI),可用于设置环境配置以及编排不同的部署任务。 您还可以单击几下或通过调度常规部署,在许多不同的目标系统上运行任务。
在UrbanCode Deploy下管理的部署过程的总体情况包括:
为了安全起见,请在每个目标系统上使用专门的UrbanCode Deploy代理用户(请参阅UrbanCode Deploy文档中对此进行阅读)。 通过使用专用用户,可以仅将代理对目标系统的访问限制为特定的位置和命令。 以这种方式,可以增强相应目标系统上的安全性。 在代理将需要访问通常无法访问的某些位置或命令的情况下,它必须以其他用户身份运行这些任务。 UrbanCode Deploy提供了用户模拟功能,使您可以执行此操作。
将用户模拟应用于部署过程,以确保满足以下条件:
用户模拟的设置分为两个级别:
sudo是一个安全系统,该系统授予用户特权以超级用户身份运行各种命令(提供相应的安全级别)。 该系统在类似UNIX的操作系统(例如Ubuntu(Linux)和AIX(UNIX))上实现。 术语sudo代表超级用户do。 Sudoers是指系统文件/ etc / sudoers,用作具有相应操作系统sudo设置的配置文件。 它遵循《 Sudoers手册》中记录的特定sudoers文件格式。
sudoers条目示例为:
Barry ALL = (Ann) NOPASSWD: /tmp/script_files/*.sh
在代码示例中,用户Barry可以以用户Ann的身份访问/ tmp / script_files位置中任何主机上的任何外壳脚本文件,而无需提供标识密码。
根据用于管理类UNIX文件系统的访问控制列表(ACL)策略中的定义,每个文件都分配了一组10位(标志)。 它们被分类为文件类型标志,然后是三组,每组三个许可标志。 下表提供了这些权限位的进一步说明。
ACL位数 | 可能的值 | 含义 | 上 | 关 |
---|---|---|---|---|
1个 | -,l,d |
|
不适用 | 不适用 |
2 | - | 用户所有者- R的EAD许可 | [R | -- |
3 | -,w | 用户拥有者- 含仪式权限 | w | -- |
4 | -, X | 用户所有者– e X ecute权限 | X | -- |
5 | - | 集团拥有者- R的EAD许可 | [R | -- |
6 | -,w | 集团拥有者- 含仪式权限 | w | -- |
7 | -, X | 群组所有者– e X ecute权限 | X | -- |
8 | - | 其他用户- R的EAD许可 | [R | -- |
9 | -,w | 其他用户- 含仪式权限 | w | -- |
10 | -, X | 其他用户– e X ecute权限 | X | -- |
此策略允许拒绝或授予不同用户对各种系统文件,位置和命令的不同访问级别。
例如,考虑具有以下情况的系统:
-rwxr-x--- 1 Ann groupA 28 Apr 1 14:01 anns_script.sh
-rwxr-xr-x 1 Cathy groupABC 28 Apr 1 14:03 print_foo_bar.sh
在示例代码中,您可以看到第一个脚本文件由用户Ann和用户组groupA拥有。 您还可以看到第二个文件归用户Cathy和用户组groupABC拥有。 下面提供了上述文件的权限位的进一步细分。 请注意,文件类型标志(第一位)将被忽略。
rwxr-x---
并指定:
系统的超级用户root具有对所有文件的完全访问权限。 因此,root用户可以读取,写入和执行(如果适用)任何系统文件,而不管其所有者的用户和用户组如何。
如果用户Barry尝试运行anns_script.sh,则会出现相应的错误消息bash: ./tmp/script_files/anns_script.sh: Permission denied
。
要为Barry用户提供对anns_script.sh文件的访问,请完成以下步骤之一:
要使用第二种方法,用户Barry需要结合使用sudo
命令和相应的命令来运行所需的文件:
Barry:# sudo -u Ann /tmp/script_files/anns_script.sh
回顾本节前面提供的Barry的sudoers条目:
Barry ALL = (Ann) NOPASSWD: /tmp/script_files/*.sh
根据上述Barry用户的sudoers记录,如果用户运行上述提供的命令,则不需要密码即可完成指定的命令。 相反,所请求的anns_script.sh就像由用户Ann运行一样运行。
在未设置上述sudoers配置的情况下,或者Barry尝试以用户Ann的身份在不同位置访问或执行另一个文件时,情况有所不同。 例如:
Barry:# sudo -u Ann /tmp/other_location/other_file.sh
在这种情况下,需要密码验证:
[sudo] password for Barry:
这是因为上面提供的sudoers条目或文件中指定的任何其他sudoers规则未覆盖此位置。
本节提供有关使用UrbanCode Deploy进行用户模拟的设置和实施的全面指南。 它遵循许多步骤,包括目标系统配置和用于使用用户模拟的UrbanCode Deploy组件设置。
各种操作系统(OS)的配置,文件和用户管理不同。 因此,本文中的某些步骤仅说明要执行的操作,而没有提供相应的Shell或其他命令来完成该操作。
提供的每个步骤都是为基于Web的应用程序的部署设置而提供的,应该在Apache和数据库系统上都实施。
表2提供了有关已使用变量的更多信息。 表2中变量的值仅是示例,不是真实值。 而是将任何[使用方括号括起来的]变量替换为适当的目标系统值。
${JAVA_HOME}
并指向您的Java二进制主目录。 本节提供有关如何在UrbanCode Deploy系统上进一步设置用户模拟的注释。 记录了UrbanCode Deploy代理安装,并提供了两种安装类型的演练指南。
如“先决条件”部分所述,您应该已经在Apache和数据库系统上都安装了UrbanCode Deploy代理。 如果不是这样,请按照上述安装链接之一操作,然后再继续进行本文操作。
为了促进UrbanCode Deploy代理的功能并以其专用用户身份运行它,请执行以下操作:
su
命令切换到root用户。 ${JAVA_HOME}
shell变量已添加到您的AGENT_UserName配置文件中。
#export java path
export JAVA_HOME=[the value of your ${JAVA_HOME} shell variable]
export PATH=$JAVA_HOME/bin:$PATH
[AGENT_UserHome]/.profile
注意:稍后在本文的“ OS级别上的设置环境目录”部分中提供了进一步的安全措施。
su
命令切换到root用户。 chown -R [AGENT_UserName]:[AGENT_UserGroup] [AGENT_HOME_DIR]
su - [AGENT_UserName]
cd [AGENT_HOME_DIR]/bin
./agent run
这些操作的结果是,您将获得两条消息之一。 如果该代理已经在运行,则会收到第一条消息,告诉您该代理已经在运行。 如果代理未在运行,则会收到第二条消息,告诉您它正在启动。
要允许对Apache和数据库用户模拟用户,请在目标系统上完成以下步骤:
注意:这些步骤必须同时在Apache和数据库系统上实现。
在Apache和数据库系统上都更新您的sudoers文件。
su
命令切换到该用户。 visudo
命令打开sudoers编辑器。 [AGENT_UserName] ALL = (root,[Apache_or_DB_User]) NOPASSWD: /usr/bin/ksh -c [AGENT_HOME_DIR]/var/temp/command-script-*.ksh
[AGENT_UserName] ALL = (root,[Apache_or_DB_User]) NOPASSWD: /usr/bin/bash -c [AGENT_HOME_DIR]/var/temp/command-script-*.sh
sudo
命令的格式设置为与您在上一步中设置的sudoers配置相对应。 将此行添加到您的[AGENT_HOME_DIR] /conf/agent/installed.properties文件中: com.urbancode.shell.impersonation.unix.sudoFormat=%s -i -n -u %u %c
[AGENT_UserName] ALL = (root, [Apache_or_DB_User]) NOPASSWD: [AGENT_HOME_DIR]/var/temp/command-script-*.sh
通过此Sudoers配置,您的UrbanCode Deploy代理可以在执行UrbanCode Deploy流程期间模拟APACHE_UserName和DATABASE_UserName并以root用户身份登录,而无需提供密码。
下一步是更新或创建许多目录:
su
命令以root用户身份工作。 mkdir -p [AGENT_HOME_DIR]/var/plugins
mkdir -p [AGENT_HOME_DIR]/var/temp
mkdir -p [AGENT_HOME_DIR]/var/work
chown -R [AGENT_UserName]:[AGENT_UserGroup] [AGENT_HOME_DIR]
chmod -R u=rwx,go-rwx [AGENT_HOME_DIR]
sudoers
配置允许的用户。 chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/
chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/conf
chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/conf/agent
chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/conf/agent/installed.properties
chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/var
chmod u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/var/temp
chmod -R u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/opt
chmod -R u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/var/plugins
chmod -R u=rwx,g=rx,o-rwx [AGENT_HOME_DIR]/var/work
现在已完成目标系统的设置,以通过UrbanCode Deploy启用用户模拟。 接下来,启用模拟进程的调试,然后设置要使用用户模拟部署的UrbanCode Deploy组件进程。
要在UrbanCode Deploy上调试用户模拟的进程,请配置位于[AGENT_HOME_DIR] / conf / agent /目录中的log4j.properties文件。 要启用调试,请将以下行添加到文件末尾:
# logger level configurations
log4j.logger.com.urbancode.air=INFO
log4j.logger.com.arjuna.ats.jta=ERROR
log4j.logger.org.apache.activemq=FATAL
log4j.logger.org.hibernate=ERROR
# special logger configurations for user impersonation debugging
log4j.logger.com.urbancode.shell.impersonation.unix.UnixImpersonateCommand=DEBUG
log4j.logger.com.urbancode.shell.Shell=DEBUG
log4j.logger.com.urbancode.air.plugin_command.runtime.ShellHelper=DEBUG
使用以下行在[AGENT_HOME_DIR] / var / log /目录中定义代理的日志文件的位置:
log4j.appender.file.File=../var/log/agent.out
要获取更新,请使用以下两个命令以其专用用户身份启动代理中所述重新启动代理:
./agent stop
./agent start
日志文件中的调试条目显示为:
2014-06-27 09:34:24,408 - Executing shell as [APACHE USERNAME]
2014-06-27 09:34:24,442 - Running command as Unix user [APACHE USERNAME]
2014-06-27 09:34:24,442 - Command: [/bin/sudo, -n, -u, [APACHE USERNAME], [[PATH TO YOUR AGENT HOME DIRECTORY]/var/temp/command-script-#########.sh]
完成对用户模拟的进程的调试后,应注释掉#special logger...
下的调试日志行,然后重新启动代理。 这阻止了进一步的用户模拟调试日志记录,该日志记录可能将大量信息添加到日志文件中。
UrbanCode Deploy组件和流程的管理通过相应的UrbanCode Deploy服务器用户界面进行处理。 按照图1到4中的示例步骤,设置要模拟进行部署的UrbanCode Deploy组件过程。 图5和6提供了一个外壳脚本UrbanCode Deploy过程步骤的示例,该过程已模拟并部署了该步骤的输出。
图1显示了要编辑的示例组件过程的路径。
导航到组件流程编辑器屏幕:
组件流程编辑器窗口如图2所示。
可以模拟一些步骤。 每个处理步骤的右上角都有一个铅笔图标。 单击铅笔以打开编辑过程。 如果可以模拟该步骤,则图3中的字段将出现在弹出窗口中。
默认情况下,不会模拟该步骤。 要模拟该步骤,请选中“ 使用模拟”复选框。 这将更新“步骤编辑器”视图,如图4所示。
选择“ 使用模拟”复选框后,“用户”字段成为必填字段,如图4所示。您可以跳过“组”和“密码”字段,因为您已经在“ 设置Sudo权限”中设置了无密码的模拟。
注意:必须选中“使用Sudo”复选框。
本节提供了模拟的UrbanCode Deploy组件处理步骤及其在目标系统上部署后的输出示例。
图5显示了一个简单的Shell脚本,它作为Bash脚本(在Interpreter字段中定义)运行,并打印几条消息(如在Shell脚本字段中设置)。 代码${p:agent/sys.user.name}
是UrbanCode Deploy特定的代码格式,用于访问某些特定于过程的变量。 在这种情况下,AGENT_UserName专用于相应的UrbanCode Deploy代理。 在脚本执行之前和上述步骤的部署过程中,UrbanCode Deploy代理将${p:agent/sys.user.name}
代码替换为其相应的值。 在此示例中,这是udeployagent
。
图6显示了图5中执行的shell脚本的输出。
图6中以红色突出显示的脚本内容部分包含实际的Shell脚本,其中包含AGENT_UserName的更新字段。 这由相应的UrbanCode Deploy代理在其目标环境上运行。
实际的脚本结果显示在命令输出行下。 它以蓝色突出显示,显示了所使用的UrbanCode Deploy代理的专用用户名和模拟用户的用户名。 在这种情况下, apache
的用户名是通过shell命令whoami
获得的。
实践证明,使用特定或自定义脚本来促进软件部署过程可以大大减少手动部署的时间。 但是,对于部署更复杂的应用程序(其中特定功能由专用用户管理),需要以这些用户身份执行特定的部署步骤。 在部署过程中,自定义部署脚本的使用仍然需要合理数量的人工干预和观察。
本文表明,将UrbanCode Deploy与用户模拟一起使用是解决上面提到的部署过程中所有困难的一个很好的工具。 该工具在软件产品部署过程中的集成仍然需要一些开发时间。 但是,在设置并正确配置后,UrbanCode Deploy应用程序可以大大减少部署期间的人工干预。 它甚至可以使一个人只需单击几下即可触发并维护多个不同系统上的许多独立部署,从而显着减少部署时间,从而缩短了开发时间。
没有: | 变量/参考 | 含义 | 笔记 |
---|---|---|---|
1个 | AGENT_UserName | 参考UrbanCode Deploy代理专用用户 。 示例: ucduser |
|
2 | AGENT_UserGroup | 参考UrbanCode Deploy代理专用用户组 。 示例: ucdgroup |
|
3 | AGENT_UserHome | 上面引用了AGENT_UserName的用户主目录。 示例: /home/ucduser/ |
不适用 |
4 | AGENT_HOME_DIR | 对目标系统上UrbanCode Deploy代理安装目录的完整路径的引用。 示例: /opt/UrbanCode Deploy/ucd-agent |
不适用 |
5 | APACHE_UserName | 对Apache系统上的Apache用户的引用。 示例: apacheusr |
不适用 |
6 | DATABASE_UserName | 对数据库系统上的数据库用户的引用。 示例: dbuser |
不适用 |
7 | Apache_or_DB_User | 参考上面的#5或#6 。 |
|
8 | $ {JAVA_HOME} | Shell变量 ,该变量保存系统上Java二进制主目录的路径 示例: /usr/bin/java |
|
注意 :上表中变量的值仅是示例, 不应视为实际值。
翻译自: https://www.ibm.com/developerworks/library/d-increase-security-when-impersonating-other-users-trs/index.html