LinuxFan98 Asked: 2018-03-03 15:46:31 +0800 CST2018-03-03 15:46:31 +0800 CST 2018-03-03 15:46:31 +0800 CST 用户账户类型、账户安全 772 我是 GNU/Linux 帐户管理领域的新手。我被告知要建立一个帐户安全系统,是否有人可以让我走上正确的轨道? security accounts 1 个回答 Voted Best Answer Connor Payne 2018-03-03T15:57:16+08:002018-03-03T15:57:16+08:00 嗨,这很长,我相信社区的其他成员会帮助它,但我希望它能给你一个好的起点。 账户安全 攻击系统的最简单方法是从内部攻击它。一旦帐户被泄露,最常见的攻击就是权限提升攻击,这是获得提升的访问权限的地方,允许用户访问通常会被阻止的资源,发生这种情况的常见方式是软件或不正确的配置被利用。将这种风险降到最低的最佳方法是将不需要的用户排除在系统之外并保护帐户,只允许帐户执行该帐户角色所需的任务。保护帐户的第一步是使用可插入身份验证模块 (PAM) 设置身份验证模型。 帕姆 Pluggable Authentication Modules (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 模块的控制标志确定成功或失败对于向服务验证用户的总体目标的重要性。标志如下: requiredflag 表示模块必须成功才能继续。如果模块失败,则在该接口上的所有测试完成之前不会通知用户。 requisiteflag 与 required 类似,但是不会调用其他模块,并且如果他们立即未通过此检查,则会通知用户。 sufficient如果这成功并且没有所需的模块失败,则用户通过身份验证并且不会发生其他检查,否则它会继续。 optionalflag 被忽略,除非它是唯一引用接口的模块。 include标志包括来自另一个文件的配置。 这些是简单的控制标志,并且有许多使用属性等值控制对的复杂控制标志,完整的列表在 pam.d 手册页中。 账户类型 有三种主要类型的帐户:root、服务/系统和用户。root 帐户可以执行任何操作,例如卸载/安装软件或软件包、更改配置等。root 的用户 ID (UID) 始终为 0。系统不使用帐户名,而是使用 UID,帐户名是只为人类。从技术上讲,所有 UID 大于 0 的帐户都是普通帐户,但是管理 UID 在 0 到 1000 范围内的帐户是用于服务帐户的,并且可以在/etc/login.defs. 要创建服务帐户,请添加–r标志,useradd –r system_account_name, 否则它的 UID 将高于 1000。Linux 系统不会区分 UID 高于和低于 1 thound 的帐户,但是当 UID 等于 0 时会区分,因为 0 是针对 root 用户的,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位于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 模块中的参数。
嗨,这很长,我相信社区的其他成员会帮助它,但我希望它能给你一个好的起点。
账户安全
攻击系统的最简单方法是从内部攻击它。一旦帐户被泄露,最常见的攻击就是权限提升攻击,这是获得提升的访问权限的地方,允许用户访问通常会被阻止的资源,发生这种情况的常见方式是软件或不正确的配置被利用。将这种风险降到最低的最佳方法是将不需要的用户排除在系统之外并保护帐户,只允许帐户执行该帐户角色所需的任务。保护帐户的第一步是使用可插入身份验证模块 (PAM) 设置身份验证模型。
帕姆
Pluggable Authentication Modules (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
flag 表示模块必须成功才能继续。如果模块失败,则在该接口上的所有测试完成之前不会通知用户。requisite
flag 与 required 类似,但是不会调用其他模块,并且如果他们立即未通过此检查,则会通知用户。sufficient
如果这成功并且没有所需的模块失败,则用户通过身份验证并且不会发生其他检查,否则它会继续。optional
flag 被忽略,除非它是唯一引用接口的模块。include
标志包括来自另一个文件的配置。这些是简单的控制标志,并且有许多使用属性等值控制对的复杂控制标志,完整的列表在 pam.d 手册页中。
账户类型
有三种主要类型的帐户:root、服务/系统和用户。root 帐户可以执行任何操作,例如卸载/安装软件或软件包、更改配置等。root 的用户 ID (UID) 始终为 0。系统不使用帐户名,而是使用 UID,帐户名是只为人类。从技术上讲,所有 UID 大于 0 的帐户都是普通帐户,但是管理 UID 在 0 到 1000 范围内的帐户是用于服务帐户的,并且可以在
/etc/login.defs
. 要创建服务帐户,请添加–r
标志,useradd –r system_account_name
, 否则它的 UID 将高于 1000。Linux 系统不会区分 UID 高于和低于 1 thound 的帐户,但是当 UID 等于 0 时会区分,因为 0 是针对 root 用户的,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
位于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 模块中的参数。