5.PAM认证测试

PAM_securetty.so是一个认证模块文件,该认证模块只对root用户有效,当root登录系统时,会查看有没有安全终端,安全终端就是/etc/securetty文件里的东西,比如你运行“W”命令看到TTY下面的东西就是安全终端。如果有安全终端就通过认证,否则失败。有些管理员为了安全,不让root用户直接登录,他会把/etc/securetty文件清代空,这就保证了在有root密码时,也不能够在本地登录。

为了以下的实验方便,能看出效果来,我们把“auth required PAM_securetty.so”这条认证加入SSH服务的PAM模块谁文件里(/etc/PAM.d/sshd)的第一行,目的就是让SSH服务应用这条认证。大家可在控制台窗口中执行“vi etc/PAM.d/sshd”然后添加这条认证语句。同样的道理,如果把这条语句加到login文件(默认这条认证是被注销掉的,我们取消前面的#就可以了),控制的是从本地控制台登录,同样的话如果把这条语句加入到sshd文件内,那么它将控制的是从远程登录服务器22端口的过程。(图3)

下面我们试着SSH登录系统看看效果,在控制台中执行命令“ssh -l root localhost”,可以看到无论我们的root用户的密码正确与否都无法通过SSH远程登录到系统,可见上面的认证已经生效。在一般情况下,为了服务器的安全,大家通过PAM认证拒绝root远程登录系统。 (图4)

用PAM认证加强Linux服务器安全

6.PAM认证的处理方式

了解了认证类型的工作方式,我们还应该深入的理解认证的处理方式,在图2中看到,它的认证处理方式是required,表示这一模块的认证是必须成功的,但如果失败,认证过程不会即刻终止,PAM将继续下一个同类型认证。上面“PAM_securetty.so”认证失败了,但认证并没有结束,认证的“指针”还在向下走。如图4中所示,在root用户SSH登录认证失败的前提下还提示用户输入密码,虽然认证不可能成功。

处理过程中除了required,还有requisite、sufficient和optional,我们再来看看requisite的效果。还用SSH服务为例,把/etc/PAM.d/sshd文件第一行中的“auth required PAM_securetty.so”改成“auth requisite PAM_securetty.so”。再次尝试登录,发现和图4没有什么差别,也是输入3次密码后被拒绝了。但是细心的读者如果一边看文章一边尝试着实验的话,你会发现当你在输入密码时,用required反应的速度要慢一些,并且在系统日志中是没有记录的,认证同样是失败的。这说明required和requisite类似的地方是认证必须通过,而不同的是如果失败,认证过程将立即终止,不会去认证下面的条目。(图5) 

用PAM认证加强Linux服务器安全

7.限制root登录控制台

我们修改用/etc/PAM.d/login来限制root登录控制台,打开login文件删除第二行中的#,取消对“auth required PAM_securetty.so”的注销。然后我们本地登录服务器,通过测试我们发现当用required时,你在输入root及密码后,你得到了一个拒绝信息,用requisite时,当你输入root回车时同样会得到拒绝信息登录失败,这是由刚才的认证方式触发的。

8.PAM认证可选模块

在PAM认证中,sufficient表示如果认证成功,那么对这一类型的模块认证是充足的了,其他的同类模块将不会再检验,当认证失败,它会进行下一条认证,如果下面同类型的认证成功,结果依然成功。optional表示这一模块认证是可选的,也不会对认证成功或失败产生影响,这个就比较危险了。比如我们在/etc/PAM.d/sshd文件内加入“auth required/lib/security/PAM_listfile.so item=user sense=allow file=/etc/sshusers onerr=succeed”其含义是只允许出现在/etc/sshuser文件内的用户远程登录。然后我们执行命令“ssh -l root localhost”,当sshusers文件没有root用户时候,登录失败,很明显他被PAM模块拒绝了。那么我们改一下认证文件,将required改成sufficient,尝试再次登录,结果成功登录。

总结:PAM认证是Linux服务器系统最主要的安全认证模式,掌握PAM认证对于加强系统安全非常重要。本文结合理论与实践对PAM认证做了一定的分析,实际上关于PAM认证是一个大课题,希望以后有机会和大家进一步分享基于PAM认证的Linux系统安全技巧和经验。


相关内容