我是 GNU/Linux 帐户管理领域的新手。有人告诉我要设置一个帐户安全系统,有人能帮我指点一下吗?
答案1
嗨,这篇文章很长,我相信社区的其他成员会提供帮助,但我希望它能给你一个良好的起点。
账户安全
攻击系统最简单的方法是从内部攻击。一旦帐户被攻破,最常见的攻击就是特权升级攻击,即获得提升的访问权限,允许用户访问通常被阻止的资源,发生这种情况的常见方式是利用软件中的错误或不正确的配置。将这种风险降至最低的最佳方法是将不受欢迎的用户拒之门外,并保护帐户,只允许帐户执行该帐户角色所需的任务。保护帐户的第一步是使用可插入身份验证模块 (PAM) 设置身份验证模型。
聚丙烯酰胺
可插入式身份验证模块 (PAM) 是 Linux 系统上使用的集中式身份验证系统。PAM 允许应用程序将身份验证转移到 PAM 而不是保存信息的文件。PAM 身份验证文件位于/etc/pam.d/
每个 PAM 感知配置文件中,这些配置文件位于pam.d
目录中,例如 ssh pam 指令位于/etc/pam.d/sshd
。配置包含一系列指令,格式如下:module_interface control_flag module_name module_args
。PAM 使用四种不同类型的模块接口,每种模块接口处理身份验证过程的不同部分,即:
auth
模块接口对用户进行验证的最基本流程就是检查密码的有效性。Account
模块验证访问权限以及是否允许访问(例如密码过期、锁定、帐户登录时间)。Password
模块更改用户密码。Session
模块处理用户会话并处理诸如挂载用户主目录之类的任务。
一个模块可以使用多个接口。所有 PAM 模块都会返回成功或失败的结果。PAM 模块的控制标志决定了成功或失败对于向服务验证用户的总体目标有多重要。标志如下:
required
标志表示模块必须成功才能继续。如果模块失败,则不会通知用户,直到该接口上的所有测试都完成。requisite
标志与必需的类似,但是不会调用其他模块,并且如果用户未通过此检查,则会立即通知用户。sufficient
如果成功并且所有必需模块均未失败,则用户已通过身份验证并且不会进行其他检查,否则将继续。optional
除非它是引用接口的唯一模块,否则标志将被忽略。include
标志包括来自另一个文件的配置。
这些是简单的控制标志,还有许多使用属性等值控制对的复杂控制标志,完整的列表位于 pam.d 手册页中。
账户类型
主要有三种类型的帐户:根帐户、服务/系统帐户和用户。根帐户可以执行任何操作,如卸载/安装软件或软件包、修改配置等。根帐户的用户 ID (UID) 始终为 0。系统不使用帐户名,而是使用 UID,帐户名仅供人类使用。从技术上讲,所有 UID 大于 0 的帐户都是普通帐户,但是对于管理,0 到 1000 范围内的 UID 是服务帐户,可在 中配置/etc/login.defs
。要创建服务帐户,请添加标志–r
,useradd –r system_account_name
否则它的 UID 将大于 1000。Linux 系统不区分 UID 大于和小于 1 的帐户,但当 UID 等于零时会进行区分,因为零是根用户的,UID 是供人类使用的,以确定它是供人使用、服务还是应用程序使用。
控制账户
要检查是否只有一个用户的 UID 为零,请运行该命令awk –F: ‘($3 == “0”) {print}’ /etc/passwd’
要锁定帐户,请运行该命令passwd –l account_name
要解锁帐户,请运行该命令passwd –u account_name
要停止帐户登录,您可以简单地在中设置他们的 shell 参数,/etc/passwd
以/sbin/nologin
阻止他们拥有 shell,从而阻止他们进行任何交互式访问。最好通过命令而不是编辑文件来执行此操作。命令是chsh –s SHELL account_name e.g. chsh –s /sbin/nolong /john
要停止所有用户登录系统,您可以利用pam_nologin
位于的模块文件/etc/nologin
,或者/var/run/noloing
如果此文件存在,则登录将被拒绝并且内容将显示给用户。删除该文件,人们将能够重新登录。您还应该为服务设置不同的帐户,例如,Web 服务应该在其自己的帐户而不是用户的帐户上运行
密码安全
未能强制执行强密码策略可能会导致用户使用弱密码(如 password123),弱密码很容易受到暴力攻击。要强制执行强密码,请使用pam_pwquality
。您可以将此 PAM 模块用作位于的 pam 配置文件中的指令的一部分,/etc/security/pwquality.conf
并将 PAM 使用设置为password requisite pam_pwquality.so.
密码最初以加密或散列格式存储/etc/passwd
。文件以冒号分隔,包含用户名、散列密码、UID、用户组 ID 号 (GID)、全名、用户主目录、登录 shell。几乎每个应用程序都使用此文件将 UID 转换为用户名,但这也意味着任何人都可以看到加密的密码,这使得它们容易受到字典攻击或暴力攻击,因为它们可以被复制到另一个系统并被破解。如果密码字段显示 x,则表示密码存储在文件中/etc/shadow
。将密码存储在单独的文件中意味着只有 root 用户才能读取这个影子文件,从而最大限度地降低密码被泄露的风险。要转换不使用影子密码的系统,则需要运行该命令pwconv
,但如果您需要禁用影子密码,则以pwunconv
root 身份运行。该/etc/shadow
文件再次包含冒号分隔的字段;用户名、散列密码、自上次更改密码以来的天数、允许下次更改密码的天数、需要更改密码之前的天数、密码到期通知之前的天数、帐户变为非活动状态之前的天数、帐户到期以来的天数、保留以备将来使用。这些附加字段允许/etc/shadow
对 Linux 系统上的帐户进行更好的控制。通过运行该命令chage –l account_name
将显示帐户老化信息。chage –M MAX_DAYS
将设置密码有效的最大天数如果您将帐户名附加到该命令的末尾,则它将仅为该帐户设置密码,而不是系统范围的密码。chage –E EXPIRE_DATE account_name
命令将设置用户帐户不再可访问的日期该日期应为 YYYY-MM-DD 格式,要解锁或设置帐户不过期,请将过期标志设置为负 1。要强制更改密码,运行命令 chage –d 0 account_name。有关完整列表,请查看 chage 的手册页。
要设置默认值,请编辑文件,/etc/login.defs
这是所有默认值(如最小长度、密码最大使用期限、密码最小使用期限、密码过期前的密码警告等)的所在。要阻止用户重复使用以前的密码,请使用 pam_pwhistory 模块的密码界面,默认情况下,它会将用户帐户的最后十个密码存储在 中/etc/securityopassword
。要更改记住的密码数量,请更改记住变量并将其设置为等于 pam_pwhistory 模块中的参数的密码数量。