APP下载

浅谈Linux的密码安全策略

2020-12-31

网络安全和信息化 2020年9期
关键词:帐号命令语句

编者按: 本文围绕Linux 系统密码问题,讲解了其安全管理策略的实施,并以一些实例配置进行说明。

在早期Linux版本中,账户密码信息是保存在“/etc/passwd”文件中的。为了更好的保护密码的安全,在之后的版本中,将上述密码文件的第二列密码串保存在了“/etc/shadow”文件中,同时定义了和密码有效性相关的策略。

在“/etc/shadow”中,每行账户信息包含8 列,前两个为用户名和密码哈希串,之后的信息表示密码的有效性信息,即密码的时效设置。依次包括最后一次密码修改时间(距离1970年1月1 号的天数),密码每两次修改的间隔时间(默认为0,表示可以随时修改密码),用户多长时间可以不更改密码,密码过期前警告,距离密码锁定时间以及帐号有效期等。

使用Chage 命令可以调整密码有效性参数。例如,执行“chage-m3-M60-W7-I 10 user1”命令,针对User1 账户规定每隔60 天密码必须修改一次,两次密码修改之间至少间隔3 天,密码过期前7 天发出警告,之后经过10 天账户被锁定。执行“chage-l user1”命令,可以查看User1 账户的密码有效性信息。执行“chage-d 0 user1”命令,表示当User1 用户登录后,必须立即修改密码。

在“/etc”目录下存在名为“login.defs”的文件,在其中存储有默认的密码有效性策略。当使用Useradd 等命令创建用户帐号时,会参考该文件,直接将密码有效性信息写入到“/etc/shadow”文件中。

对于“login.defs”文件进行合适的修改,那么只要创建新的账户,其密码策略就必须符合默认条件。执行“vim/etc/login.defs”命令,可以查看其默认的策略值。例如,对于“PASS_MAX_DAYS”来说,可以将其设置为60,表示每隔60 天必须修改密码。对于“PASS_MIN_DAYS”来说,可以将其值修改为3,表示每次密码修改的间隔为3 天,对于“PASS_MIN_LEN”来说,可以将其值修改为7,表示密码必须为7 位,对于“PASS_WARN_AGE”来说,将其值修改为7,可以提前7天提示用户修改密码。这样,当之后创建账户时,必须使用上述策略。

为了进一步提高密码的安全性,可以使用PAM(Plugable Authentication Modules,可插入认证模式)对用户登录进行监控。利用PAM 机制,可以将各种认证手段转变成可任意转换的模块,使您可以自由使用合适的认证方法。

PAM 是为了实现第三方的认证而开发的一套认证体系。PAM 可以实现动态控制,只需安装一个新的模块,就可以增加新的认证方法,对目标程序的PAM 认证参数进行修改,就可以立即生效。PAM的认证通过一系列的动态库,这些动态库提供在用户登录时的一些会话函数,提供密码输入界面,执行具体的认证操作,并通知用户登录成功与否。自从PAM 支持第三方认证后,顺便也将标准的Linux 认证也嵌入了进去。因此,PAM 已经和系统实现了高度集成。

通过执行“ls/lib64/security”命令,可以查看所有的PAM 动态库。执行“ls/etc/pam.d”命令,可以查看与PAM 动态相关的配置文件。在每个PAM 模块的配置文件中均包含以下四个部分或者某几个部分,其中的“auth”部分用来进行账户认证,即确认用户是否是其本身,应用程序是依靠正确的账户名和密码进行判断的。“account”部分用来判断帐号的有效性,在有些情况下,即使输入了正确的密码也未必可以登录系统,因为对应的帐号可能已经被管理员锁定,或者已经过期等。即帐号处于正常健康的状态,才可以通过该部分的认证。“password”部分转用于修改密码之用,其主要用途是如何让用户将密码修改的符合管理员要求。“session”部分用来管理会话控制,利用Session 控制,可以在用户登录系统的时刻,限制其可以使用的资源。例如,控制其CPU、内存使用量及最大文件打开数量等。

例如,在“/etc/pam.d”目录下执行“vim login”命令,可以查看和系统登录相关的配置信息。在不同的检查部分中对应有不同的行为。比如“required”项表示对应的检查部分必须符合PAM的要求,如果检测失败,则整体处于失败状态,但并不立即退出PAM 检查,会依次往后检测其他模块。如果设置为“requisite”,表示若该项检测失败,则立即退出。如果设置为“sufficient”,则表示直到检测到本环节,之前的检测部分全部通过,如果满足当前的检测项目,则立即成功完成整个PAM 检测。如果本检测项目不通过,则对整个检测没有任何影响。如果设置为“optional”,则表示当前的检测对整体没有任何影响,仅仅执行本环节的检测而已。如果要想实现不同PAM 模块之间的嵌套,需要使用“Include”关键字。例如,“auth include system-auth”语句就调用了名为“system-auth”认证档案规范文件,并依次执行该文件中包含的检测项目。

其实,在Linux中存在system-auth 和passwordauth 这两个最常用的认证档案规范文件。前者主要用来执行本地认证,后者主要用来控制远程认证。

例如,对于SSHD、Login和GDM 等登录方式来说,都会使用到上述两种认证档案规范文件。检测账户密码强壮性一般使用的是“pam_cracklib.so”的PAM 模 块文件,用来提示用户输入密码和检测密码是否符合要求等。比如“password requi site pam_cracklib.so try_first_pass retry=3 type=welcome”就是堪称经典常用的Linux 密码强壮度检测语句,其只允许尝试3 次密码,并显示提示信息“welcome”。在“pam_cracklib.so”模 块中有些选择可以灵活设置,比如“minlen”项可以设置密码最小长度,注意其长度值从0 算起。

“lcredit” “ucredit”“dcredit” “ocredit”等 项分别表示小写、大写、数字和其他特殊字符等密码组成格式。“minclass”项表示使用上述哪些类别组成密码。

例如,对于“password requisite pam_cracklib.so try_first_pass retry=3 type=ocredit=-1 dvredit=-2 minlen=10”语句来说,说明密码必须包含至少一个其他字符,至少包含两个数字,总长度为10 位。“password requisite pam_cracklib.so try_first_pass retry=3 type=ocredit=2 dvredit=2 minlen=12”语句说明只要属于一个特殊字符,就当作两个字符处理,输入一个数字字符,就当作两个字符处理,而且密码长度为12 位。也就是说,如果输入的全是特殊字符和数字的话,仅仅需要输入6 个字符就可以满足要求。为了防止别人不断地尝试密码来入侵系统,就需要对登录进行监控和审计。使 用“pam_tally2.so”的PAM 模块,可以有效抗击密码的暴力破解,当使用者连续输错密码后就将其锁定一段时间。

使用VIM 命令,对“/etc/pam.d”目录下的“systemauth”和“password-auth”文件进行修改,在其中“auth required pam_env.so”语句后添加“auth required pam_tally2.so deny=3 unlock_time=120”语句,在“account required pam_unix.so”语句上面添加“account required pam_tally2.so”语句,那么如果使用者连续3 次输错密码,则将其锁定120 s,即使之后输入了正确密码,或者进行了账户转换,可以对其进行有效性检测。在命令行中执行“pam_tally2”命令,可以查看记录的失败登录的日志信息。如果想解除某账户的锁定状态,可以执行“pam_tally2–reset–u user1”命令,将User1 账户解锁,使其可以再次登录系统。

对于Session 会话控制来 说,在“/etc/security”目录中存放这与其相关的PAM 控制文件。打开其中的“limits.conf”文件,可以看到很多配置信息,用来限制用户在登录时可以使用的系统资源。例如,“fsize”项表示最大建立的文件尺寸,“nofile”项表示最多打开的文件数量,“rss”项表示占用的物理内存大小,“as”项表示虚拟内存地址,“cpu”项表示用户发起一个进程允许使用CPU的最长时间,“nproc”项表示最多启用的进程数量,“maxlogins”项表示在系统中允许登录相同账户的数量等。当然,用户可以执行“ulimit-a”命令,来查看自己的资源限制情况。

猜你喜欢

帐号命令语句
只听主人的命令
重点:语句衔接
安装和启动Docker
移防命令下达后
解析Windows10的内部命令
我喜欢
作文语句实录