在身份白环境中,首先需要关注的是身份管理,也就是我们通常讲的人员管理、组织机构管理、账号生命周期管理等。身份管理所涉及的管理对象比较广泛,例如网络设备、操作系统、应用系统、数据库、中间件等,它们都需要管理员以及和管理员对应的账号。
首先,我们讨论为人员管理而构建的人员白名单。每个系统构建完成后都会有它的最终用户以及系统的管理人员。以邮件系统为例,最终用户是收发邮件的人,是使用者,人数通常比较多;管理人员是保证系统正常运行的人,是运维人员,人数通常比较少。在这里,我们所讨论的对象主要是管理人员、运维人员,对他们进行梳理并且形成人员白名单。
人员白名单是根据管理和运维需求梳理的运维人员名单,它的梳理不需要太多的技术手段,更多的是管理手段。这个白名单可以存放在一个csv文件或者excel文件中,后期可以导入企业的统一身份管理系统中。经过梳理和整理后,这个名单应该至少包括以下内容。
第一,能够唯一标识运维人员的信息,例如企业员工号、身份证号、手机号、姓名等,主要是为了和具体人员一一对应。除此之外,这些信息还可以用于生成系统中的账号。
第二,运维人员角色,例如网络管理员、测试环境主机管理员、生产环境数据库管理员等,主要是为了明确负责运维的系统环境范围,还可以用于定义在系统中的权限等。例如,测试环境主机管理员主要负责测试环境中所有服务器的运维工作,生产环境数据库管理员主要负责生产环境中所有数据库的运维工作。
第三,运维人员任职期限,例如长期、一天、一周、一月、一年等,主要是为了明确何时触发添加(和清除)人员、账号和权限的流程,做到人员管理的闭环。
人员白名单还应该做到最小化,并且保证信息都是最新的。当运维人员的部门、职责发生变化时,这个白名单里的信息也需要及时更新。
接下来,我们讨论和账号相关的账号白名单。它的主要目的是建立一个管理人员(运维人员)和系统账号之间的对应关系。
以Linux操作系统为例,每个运维人员和操作系统交互的时候,都需要依托一个账号进行操作。账号以及账号组是Linux中非常重要的一个安全概念。账号白名单建立完成后应该是一个矩阵,记录每个运维人员在不同操作系统上的账号信息,以及和权限相关的组信息、角色信息等。
账号白名单可以存放在一个文件中,或者通过统一身份管理平台进行管理。不同应用系统、操作系统、数据库、硬件设备有不同类型的账号。以Linux为例,它的账号可以简单分为4种,超级账号、普通账号、系统账号、服务账号。
1.超级账号
在Linux中,超级账号特指root账号,它属于root用户组。作为拥有全部最高权限的root账号,它可以访问和控制操作系统上的所有资源,包括文件、网络、账号等,例如设置强密码以及登录限制,这也是我们要把root账号管理好的主要原因。账号root的家目录(Home Directory)不在普通用户所在的/home下,而是在根目录下,具体位置在/root。
root账号所对应的UID是0,root用户组所对应的GID是0,如下所示。
有些企业为了运维方便,把root账号的密码分享给所有运维人员,运维人员可以直接用root账号登录到操作系统,虽然方便,但却是一种极其危险的方式,安全风险极大,也是企业应该严格禁止的。
2.普通账号/用户账号
在Linux安装后,所有后期添加的账号都属于普通账号。普通账号通常和运维人员一一对应。例如,可以为运维人员周凯在系统上创建一个普通账号zeeman。这些普通账号在操作系统上仅拥有非常有限的访问和控制权限,当需要特殊权限时,可以通过sudo来提升权限。
在Linux中,普通账号的UID从1000开始,通常来讲,在操作系统上创建的第一个普通账号的UID是1000。普通账号的家目录默认在/home下,例如,账号zeeman的家目录是/home/zeeman。普通账号的命令运行环境(shell)默认是Bash(Bourne Again Shell)。这些信息可以通过查看文件/etc/passwd以及/etc/group来确认,如下所示。
为了确保普通账号的生命周期管理是闭环的,企业需要有配套的制度、流程、工具和平台。例如,当员工入职后,需要在管理范围内的操作系统中创建普通账号;当员工离职后,需要在所有操作系统上把其账号删除。
除此之外,还需要特别注意的是要避免公共账号的使用,公共账号是为了运维方便而产生的一种事物,一个公共账号可以让很多人使用,密码是共享的,从安全角度看,这也同样具有很大的安全隐患。正确的做法是把每个普通账号对应到一个运维人员,这是一对一的对应关系,而不是像共享账号一样一对多的关系,甚至是多对多的关系。
3.系统账号
在安装操作系统时,会随之创建一些系统账号。系统账号主要用来运行操作系统自身的组件,它与root账号分离,也不需要root账号的超级权限。在Linux中,比较常见的系统账号包括daemon、bin、sys、sync、games、man、lp、mail、news、uucp、proxy、backup等。
很多系统账号的UID在1和99之间,例如,在安装操作系统时,就会创建一个mail账号,它的UID和GID都是8。由于这些系统账号通常不需要登录,因此,不用设置命令运行环境,默认是/usr/sbin/nologin。
4.服务账号
服务账号和系统账号类似,在安装软件或者服务时,也会随之创建一些服务账号。有些服务账号不需要登录,因此不需要设置家目录和命令运行环境。但有些服务账号是需要登录的,因此需要设置家目录和命令运行环境。
服务账号的UID通常在100和999之间。例如,在安装软件MySQL时,就会创建一个mysql服务账号,它会用来管理所有和MySQL相关的工作。这个mysql账号的UID是114,GID是119。
5.账号变化的监控
我们在管理账号白名单时,可以先建立一个账号的基线,然后关注账号的变化,其中包括账号的添加、删除,账号属性的变化,账号所属组的变化,账号能否登录的变化等。
对账号变化的监控,一种方式是利用auditd来监控所有和账号添加、删除、修改相关的命令。如下所示,其中参数-w代表需要监控的文件,-p代表需要监控的操作,-k代表可用于查询的关键值。
另外一种方式是利用auditctl来监控和账号相关文件的变化,如下所示。
当我们添加完监控策略后,再执行添加账号命令时,它所触发的一系列操作就会被记录下来,例如useradd命令的执行,以及/etc/passwd和/etc/shadow文件的修改。如下所示,其中命令useradd的参数-m代表要创建用户的家目录;命令ausearch的参数--format代表日志显示的格式,在这里是以可读的方式显示。
与上面类似,对组变化的监控同样可以利用auditd来实现,即监控所有和组添加、删除、修改相关的命令,如下所示。