安全资讯

等保测评:CentOS登录失败参数说明和双因素认证

本文上半部和等保联络不是很密切,还是说一了些linux里细节一些的东西,所以有可能会糟蹋你生命中的好几分钟,一起我运用的是centos6。

一、登录失利处理功用参数详解

等保测评主机安全:CentOS暗码修正周期与登录失利处理,登录失利处理功用的上半段内容在这篇文章的下半部分,本篇文章主要说pam_tally2的参数所代表的的意思。

在测评时,设计登录失利处理功用,就少不了要运用pam_tally2(centos6和之后的版别),那么就有必要理解这个模块各个参数(选项)的含义。

而网上关于pam_tally2参数材料,不能说不对,可是总觉得不够详细和全面,所以写了这篇文章阐明阐明。

首要,先贴上常用的参数解说,保证来源部分不会出错,一起给出中文解说,我们能够对照着看:

1.1. deny

这个就不用多说了,登录失利次数一旦大于等于该数值,所登录的账号就会被确定。

1.2. lock_time

这个比较不常见,如同一般都不怎么说这个参数,这个参数的意思便是你每一次登录失利后,在尚未到达deny所设置的次数时,会约束你登录的时刻。

举个例子,假如你设置deny是3,lock_time为10。那么你第1次和第2次登录失利时,在10s内的登录是无效的,输入啥都不会让你登进去的。

另外当你到达了第3次登录失利后,该参数失效,由unlock_time来接收。

1.3. unlock_time

这个就很常见了,意思便是当你登录失利的次数大于等于deny所设置的数值时,账号确定的时刻,就不必多解说了吧?

1.4. magic_root

这个的意思也很简略,假如不包括这个参数,则哪怕是root也会添加失利计数,但留意,添加失利计数不代表root就会被确定,这是两码事。

在tally2的源代码中表示如下(c言语):

if (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid) { /* magic_root doesn't change tally */ tally.fail_cnt += inc; if (tally.fail_cnt == TALLY_HI) { /* Overflow *and* underflow. */ tally.fail_cnt -= inc; pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s", (inc<0)?"under":"over",user); } }

if (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid)很好解说,便是当你传入的参数中有magic_root选项且为root用户时,整个表达式的值才为false,才不会去履行if内的句子,也便是添加失利计数:tally.fail_cnt += inc。

传入的参数中有magic_root选项,则!(opts->ctrl & OPT_MAGIC_ROOT)部分的bool值为false是root用户,而getuid的返回值是当时用户的uid,所以该部分为0,转为bool类型则为false,则此时||运算符两边皆为false,所以不会履行。

而在源代码的另外一处,tally_check函数中,有这样的代码:

if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid == 0) { return PAM_SUCCESS; } /* magic_root skips tally check */

这个就更好解说了,假如存在magic_root参数,且是root账号,就不经过履行下面的代码,直接返回成功了。

那么假如是root账号,但没有设置magic_root参数呢?其实也不一定会对root账号进行确定设置,请看下一个参数。

1.5. even_deny_root

意思便是说,有这个参数,只需到达了deny设定的值,root账号照样也会被确定。

在tally_check函数中,假如是root账号,但没有设置magic_root参数,则代码会往下履行,其中有一个if判断如下:

if (opts->deny != 0 && /* deny==0 means no deny */ tally->fail_cnt > opts->deny && /* tally>deny means exceeded */ ((opts->ctrl & OPT_DENY_ROOT) || uid)) { /* even_deny stops uid check */

留意看((opts->ctrl & OPT_DENY_ROOT) || uid)),意思假如没有设置even_deny_root选项,且uid为0也便是root账号的情况下,if句子块的代码就不会履行。

同样反过来,只需设置even_deny_root选项,不管啥账号,都会履行if句子块的代码。 或许没有设置even_deny_root选项,但不是root账号,也会履行if句子块的代码。

插一句,在tally2源代码中,对传入选项的解析阶段,有这么一段:

else if ( ! strcmp( *argv, "even_deny_root_account" ) || ! strcmp( *argv, "even_deny_root" ) ) { log_phase_no_auth(pamh, phase, *argv); opts->ctrl |= OPT_DENY_ROOT; }

也便是说传入even_deny_root_account如同也是能够的,可能是为了兼容曾经的版别什么的?

1.6. root_unlock_time

这个便是和even_deny_root合作运用的,假如root账号被确定,则它所确定的时刻。

这儿就有一个问题,假如只有even_deny_root选项,没有设置root_unlock_time选项,root账号会被确定多久?

解说中如同没说,直接看tally2解析传入选项的源代码的倒数第二句:

if (opts->root_unlock_time == -1) opts->root_unlock_time = opts->unlock_time;

root_unlock_time的默认值是-1,所以假如发现你没有给它进行设置,在最终,它就会等于unlock_time。

反过来,假如只有root_unlock_time而没有even_deny_root,又会怎么样?

能够看tally2解析传入选项的源代码:

else if ( ! strncmp( *argv, "root_unlock_time=", 17 ) ) { log_phase_no_auth(pamh, phase, *argv); if ( sscanf((*argv)+17,"%ld",&opts->root_unlock_time) != 1 ) { pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); return PAM_AUTH_ERR; } opts->ctrl |= OPT_DENY_ROOT; /* even_deny_root implied */ }

如同是假如传入了root_unlock_time且能够转化为数字的话,就相当于传入了even_deny_root参数。

啰嗦了这么多,应该把常用参数解说清楚了。

关于这些参数,假如光看网上搜的材料,发现有不清楚的地方,就应该直接去看man里边的解说。 假如解说里边写得也不够理解,那么就直接看代码。

不管怎么说,代码总是功用的直接表现,是不会产生困惑的。

二、双要素认证

这一部分没有特别明确的标准,所以仅为个人经历,而我又没多少经历,所以假如有过错请见谅。

2.1. 堡垒机

其实常用的的做法便是,经过堡垒机来管理服务器。 一起,堡垒机运用双要素认证,从而直接的到达了服务器的双要素认证。

可是首要,这种方法如同不能被认为是认证:

不过假如就算被认为是双要素认证,也有两点值得留意。

第一点

堡垒机有必要强制运用双要素认证方法,而不是任选一种方法进行登录。

第二点

堡垒机所管理的服务器,有必要对衔接方法进行约束,经过防火墙或许网络设备什么的,保证只能经过堡垒机进行衔接。否则,就算堡垒机强制运用双要素认证,但服务器还是能经过长途桌面或许ssh连上去,那堡垒机的双要素认证就含义不大了。

2.2. VPN

VPN方法和堡垒机有点像,vpn本身也能够运用双要素进行身份鉴别,比方SANGFOR SSL VPN,就能够在控制台中进行设置(功用如同挺多的,能够做很多设置):

但要害的还是要看配置有没有做全面:

第一点

只能经过vpn衔接服务器,有些单位的内网直接能够用wifi连上,防火墙那也没对拜访服务器长途端口的ip做出约束,只需连上wifi就能连服务器,那这种vpn的双要素认证就不能认为是服务器的双要素认证。

或许假如对拜访长途端口的ip没有做出约束,可是没有内网wifi,要连内网就得拿网线跑去机房衔接的话,感觉也算是做了约束。

第二点

那天然便是登录vpn要强制运用双要素认证啦。

2.3. pam插件

另外一种比较双要素认证的方法,关于centos等linux体系,便是经过运用pam组件。

关于pam,请看等保测评主机安全:CentOS暗码修正周期与登录失利处理中的登录失利处理功用部分,里边对pam做了一个比较明晰的介绍。

不过这儿不妨能够再说下,pam全名是可插拔认证模块,比方登录linux体系时,验证用户名暗码其实便是经过调用pam的一个验证模块——pam_unix。

而这个模块干的事情,也便是提示你输入用户名和暗码,然后应该是别离和passwd以及shadow文件进行比照,最终返回成功或失利。

所以,想实现双要素认证,比方“用户名/口令”+“手机短信”的认证方法,完全能够直接修正pam_unix模块(c言语),添加“手机短信”验证功用。

又或许添加一个自定义验证模块,里边运用手机短信验证,然后经过配置文件中的控制符号,让这个自定义的模块和pam_unix模块都成功才验证成功,也能实现作用。

至于详细有没有这样的模块?我们百度查找centos 双要素认证即可,详细就不说了,网上的材料介绍得还是很明晰的。

2.4. ssh密钥方法登录

这个我也不知道是不是啊,可是我感觉如同能够算是?

简略来说便是关于centos等linux体系,在ssh的配置文件中,禁掉用户名、暗码登录方法,运用密钥(公钥/私钥)+私钥暗码的方法进行登录。

网上材料如下:

[root@host ~]$ ssh-keygen <== 树立密钥对 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空 Enter same passphrase again: <== 再输入一遍密钥锁码 Your identification has been saved in /root/.ssh/id_rsa. <== 私钥 Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥 The key fingerprint is: 0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

留意,在树立密钥对的时分是能够设置私钥的暗码的。

这样,你进行登录的时分,比方运用xshell进行长途衔接,用户名本来就需要输入,私钥也要供给,私钥的暗码也要供给。

服务热线

400-1021-996

产品和特性

价格和优惠

安徽灵狐网络公众号

微信公众号