系统安全总结(2)用户与验证机制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在上一部分内容中,我们总结了系统在开机启动流程中所应考虑的安全内容。那么当系统启动完毕后,我们需要做的第一件事情是什么呢?答案很明显,登录系统!

登录系统就需要使用用户和密码,那么我们就要考虑用户究竟是什么?为什么需要用户?用户具有哪些特性?用户是怎么使用密码登录到系统的?这些问题的答案将在本部分中给出。

谈到用户,很容易明白,用户就是计算机的使用者。但是出于安全的角度的考虑,一个用户究会使用什么系统资源,又会怎样使用系统资源,这是系统管理员需要了解的事情。

那么好吧,从头开始,我们还是从用户登录到系统这个过程说起吧。

第六章用户登录流程

系统完成启动后,会给出一个“login:”的提示符,来等待用户的登录。用户通过输入用户名与密码进行验证以登录到操作系统上。

这个验证的动作其实是由第三方软件PAM的一个login模块所实现的,login模块根据PAM的配置文件以及模块的设置,通过检查是否存在/etc/nologin文件,比对/etc/passwd用户名与/etc/shadow文件中的密码信息,检验用户是是否存在并可登录,用户的密码是否有效并且未过期。若通过这些验证,则用户就可以登录到系统中了用户通过验证后,可以看到提示符变为~,表示用户进入了家目录,这是我们所看到的事情。那么用户进入家目录后又做了什么呢?

当用户成功通过验证并进入到用户家目录后,会首先运行家目录中的.bash_profile

脚本。在这个脚本中可以看到以下内容:

可以看到,在这个脚本中又执行了~/.bashrc文件,打开~/.bashrc

好吧,打开/etc/bashrc看一看里面的内容。

99002

022

现在我们知道了,用户登录后所执行的有这些:

首先用户登录家目录,运行.bash_profile,之后跳转到.bashrc,再跳转到/etc/bashrc脚本,再跳到/etc/profile.d/目录中运行所有脚本,最后回到.bash_profile运行该脚本下面的内容。

章节总结:

可以看到,这些脚本都是先于用户操作的操作,是用以生成用户的系统环境的。所以在登录系统后,首先要关注这些文件是否嵌入了恶意的代码。但是为什么需要使用用户,我们将在下一章的内容中进行介绍。

第七章用户和组

首先,我们来回答在这部分开头提出的一个问题,也就是为什么需要用户的存在。其实这个问题的答案很简单,用户的存在,其实就是为了控制程序运行的权限范围的需要!

用户

那么对于系统来讲,用户究竟在怎么其着他的作用呢?

在系统中识别用户,以uid为识别标识。每个用户和唯一的正整数关联叫做用户的ID(uid)。每一个进程与一个用户ID关联,用来识别运行这个进程的用户。运行程序的用户,其程序的权限为其用户的权限。可以查看/etc/login.defs文件,其中指定了生成用户的相关设置信息。

进程中用户的属性

我们知道,系统中每个进程都有着自己的用户。其实每一个进程都具有四个用户属性,分别为:

真实UID(real uid):

启动进程的用户

有效UID(effective uid):

用fork()函数指定的进程运行用户 ps –ef 查看的结果是显示有效uid。当使用apache时,是使用root权限启动的,但其fork()出普通权限的用户,创建子进程,赋值相应关系给apache用户。fork()只能由高权限派生低权限。

保留UID:

在进程运行时保存原有效UID,用以在多个有效UID间切换

文件系统UID :

相应进程在对文件操作时所使用的用户

知道了用户的作用,那么我们再来看一看与用户息息相关的内容:组!

一个用户可以属于多个组,其中分为基本组(默认组、登录组),写作g;候选组(其他组),写作G。组可以给多个用户赋予相同的权限,用户可以在自己的默认组(gid)和候选组(groups)中进行切换。

当用户对文件进行操作时,首先比对用户的uid是否为该文件的uid,然后再比对用户的默认组(gid)是否为文件的gid(若为非,则将候选组依次调出逐一比对),在程序运行过程中,进程中的组为替换的默认组。

所以说,组所扮演的角色与用户大同小异,本质上也是为了限制对系统操作权限的。只不过一个组中可以具有多个用户,这些用户继承了该组所有的权限。

用户在系统中的应用

其实用户的生效并非在login提示符出现的时候才开始的,而是在加载initrd之后,由rc.sysinit就开始应用用户的设定了。

所以说,用户依操作范围不同,可以分为用系统用户、服务进程用户与服务内建用户。

章节总结:

知道了什么是用户,并且也知道了用户的分类,那么如何设定一个程序的验证机制呢?如果想让一个程序的用户验证由系统用户改变为服务内建用户,又如何实现呢?这些内容可以通过一个强大的第三方程序PAM来实现。

第八章 PAM的结构与应用

之前提到了Linux系统在用户登录时需要进行验证,而验证时使用的程序就是PAM,那么PAM究竟是个什么东西呢?

pam的全名为“可插入式安全验证模块”,作为第三方软件来判断用户与密码。

PAM的结构

了解一个程序的最简单方法就是分析法,这里根据PAM的结构,将其分为了三个部分进行了解。

最底层:

pam的应用程序,支持pam的应用程序,看软件的程序链接,是否调用libpass_pam 第二层:

pam的api,由pam的api接口和pam的配置文件(/etc/pam.d/中,UNIX中为4列,描述所使用的程序;LINUX中为三列,每个程序单独一个配置文件)所组成。可以使用ldd /bin/xx来查看应用程序所调用的动态链接库(程序是否调用libpam.so),

相关文档
最新文档