20 道身份认证与系统加固练习题及答案
CompTIA Linux+ 认证考试练习的全部身份认证与系统加固练习题,附正确答案和简短解析。
开始练习测验 →1. 在 /etc/pam.d/login 的 auth 堆栈中,某个模块的控制标志是 requisite,并且排在其他几个 auth 模块之前。当该模块返回失败时会发生什么?
- A.堆栈会继续运行后面的 auth 模块,等全部执行完后整体结果才判为失败。
- B.失败会被记录但不予采纳,最终结果只取决于堆栈中其他模块的返回值。
- C.其余模块被跳过并判定认证成功,因为前面已有模块通过了验证。
- D.堆栈立即中止并判定认证失败,后面的 auth 模块根本不会被调用。✓ 答案
requisite 的失败是立即致命的:PAM 库会马上把失败结果返回给应用程序,同一管理组后面的模块不再执行。required 同样会导致整体失败,但要等其余模块全部执行完才返回,因此在不希望暴露具体失败环节时会优先使用它。
编号 QB-H5VM6R依据: Linux-PAM System Administrators' Guide — control flags (requisite, required, sufficient, optional) in /etc/pam.d configuration报告此题的问题
2. 安全策略要求新密码达到规定的最小长度、包含多种字符类别,并且不得重复使用该用户最近用过的密码。在 Linux 主机上,这三条规则由什么机制实施?
- A./etc/login.defs 中的 PASS_MIN_DAYS 与 PASS_MAX_DAYS,由 passwd 在每次改密时套用。
- B.chage 的 -m 与 -M 选项,因为 /etc/shadow 的时效字段中保存着密码强度规则。
- C.PAM 堆栈中的 password 管理组,通过 pam_pwquality 与 pam_pwhistory 两个模块实施。✓ 答案
- D.passwd 命令自带的检查逻辑,按账户用 passwd -n 和 -x 两个选项分别配置。
长度、字符类别和是否重复使用都是在设置密码时进行的质量检查,因此属于可插拔堆栈的 password 管理组:pam_pwquality 校验候选密码,pam_pwhistory 则与保存的历史记录比对。chage 和 login.defs 只管时效(最短/最长天数、警告和闲置期),根本无法表达复杂度要求。
编号 QB-YMB5EP依据: pam_pwquality(8) and pam_pwhistory(8) manual pages; chage(1) and login.defs(5) for aging fields报告此题的问题
3. 一台主机已加入中央目录服务。执行 grep alice /etc/passwd 没有任何输出,但 getent passwd alice 却打印出完整的账户条目。是哪个文件决定账户查询可以超出本地文件的范围?
- A./etc/pam.d/system-auth,其中的 auth 行决定由哪个后端来校验传入的登录请求。
- B./etc/security/access.conf,其中的规则决定哪些账户可以从哪些主机或终端登录。
- C./etc/resolv.conf,其中的 nameserver 行决定由哪些服务器代替库函数完成名称解析。
- D./etc/nsswitch.conf,其中 passwd 与 group 行按顺序列出账户数据来源。✓ 答案
名称服务开关(name service switch)是一张表,把 passwd、group、shadow、hosts 等每个数据库映射到一组有顺序的来源;在其中加入目录来源,远程账户才会对所有库调用可见。这也是为什么测试账户解析应当使用 getent:grep 只会读取平面文件,而 getent 走的是与登录路径相同的那张开关表。
编号 QB-G5HAZP依据: nsswitch.conf(5) and getent(1) manual pages报告此题的问题
4. 某环境同时为 Linux 客户端部署了中央目录服务和基于票据的认证服务。下列哪项正确划分了两者的职责?
- A.目录服务提供 UID、组和主目录等属性,而票据用于证明身份,无需向每个服务发送密码。✓ 答案
- B.目录服务向各客户端签发有时限的票据,而票据服务负责保存 UID、组和登录 shell 等属性。
- C.目录服务在每台客户端上完全取代 /etc/shadow,而票据服务只是为目录查询加密的传输层。
- D.目录服务决定用户可以运行哪些命令,而票据服务保存网络中断时使用的离线凭据缓存。
目录是身份数据存储,用于查询账户属性和组成员关系;而基于票据的协议是认证机制:客户端只向密钥分发中心证明一次身份,随后出示票据,因此任何服务都不会接触用户密码。由于票据带时间戳且有效期很短,客户端与密钥分发中心的时钟必须保持一致,所以时间同步服务是这种架构的硬性依赖。
编号 QB-XMYS8N依据: CompTIA Linux+ Security content domain — authentication, authorization and accounting methods (directory services versus ticket-based authentication); krb5.conf(5) and kinit(1)报告此题的问题
5. 管理员执行了 auditctl -w /etc/shadow -p wa -k shadow_changes。该规则出现在 auditctl -l 的输出中,事件也被记录下来,但重启后规则消失了。怎样才能让这条监视规则持久生效?
- A.把该规则追加到 /etc/rsyslog.d 下的文件中并重启日志服务,由它在启动时重新加载规则。
- B.把该规则写入 /etc/audit/rules.d 下的文件,再用 augenrules --load 加载。✓ 答案
- C.在 /etc/systemd/journald.conf 中启用持久化日志存储,因为审计监视规则随日志一起保存。
- D.用 auditctl -e 2 添加规则,该选项会锁定运行配置并在关机时把规则写回磁盘。
auditctl 只把规则加载到运行中的内核,因此这样添加的规则在下次启动时全部丢失。持久化的做法是把规则写进 /etc/audit/rules.d 下的规则文件,由 augenrules 汇编成审计守护进程启动时加载的规则集;-e 2 的作用完全不同,它会锁定配置,使重启前不再接受任何规则变更。
编号 QB-F56YTN依据: auditctl(8) and augenrules(8) manual pages报告此题的问题
6. 某 Web 进程被拒绝访问一个文件,尽管权限位是允许的,而该服务的 journal 中也没有任何记录。这次拒绝被记在哪里,该子系统与系统日志的区别又是什么?
- A.在 /var/log/messages 中:日志守护进程以 authpriv 设施收集内核产生的访问控制事件。
- B.在 /var/log/audit/audit.log 中:内核审计子系统记录系统调用和访问控制事件,供事后审阅。✓ 答案
- C.在该单元自身的 journal 中:访问控制拒绝由被拒绝的那个进程作为消息输出。
- D.在 /var/log/btmp 中:被拒绝的访问尝试会追加到该文件,可用 lastb 工具读取出来。
系统日志收集的是应用程序主动输出的消息,而审计子系统是内核层面的设施,它把内核自己观察到的事件——系统调用、被监视文件的访问以及强制访问控制的拒绝——记录到独立的审计日志中,与 journal 和日志守护进程互不相干。正因如此,一次访问控制拒绝可能在服务的 journal 中完全看不到,却在审计日志里有完整记录。
编号 QB-WMMF3M依据: auditd(8) and ausearch(8) manual pages; CompTIA Linux+ Security content domain — accounting and audit procedures报告此题的问题
7. 与让操作员用 su - 切换为 root 相比,为什么通常更倾向于通过 sudo 来委派任务?
- A.sudo 用 root 密码进行认证,但每条命令执行完即释放特权,因此不会留下打开的 root shell。
- B.sudo 用调用者本人的密码认证,并逐条记录所执行的命令,使操作始终可追溯到具体的人。✓ 答案
- C.su - 会查阅 /etc/sudoers 中针对调用者的规则,未列出的命令在开启 shell 之前就被拒绝。
- D.su - 用调用者本人的密码认证并逐条记录命令,但无法限制可以运行哪些命令。
sudo 用调用者本人的凭据重新认证,查阅可以精确指定命令和目标身份的策略,并为每次调用写入日志,因此审计线索能说明是哪个人执行了哪条命令。su - 需要的是目标账户的密码,这意味着该密码必须被共享才能使用,而且它返回的是一个交互式 shell,之后的所有操作都只能归到 root 名下。
编号 QB-E5TMNM依据: sudo(8) and su(1) manual pages; sudoers(5) on logging and command specifications报告此题的问题
8. 管理员准备添加一条委派规则。为什么应当用 visudo 编辑该策略,而不是直接用文本编辑器打开 /etc/sudoers?
- A.visudo 会在保存后加密该文件,使尚未获得委派的用户无法读取其中的规则。
- B.visudo 会加锁防止同时编辑,并在保存时解析文件,若存在语法错误则拒绝安装该文件。✓ 答案
- C.visudo 会在保存后重新加载相关服务,而这一步是新增规则生效的必要前提。
- D.visudo 会把新规则应用到当前 shell 会话,因此无需注销再登录即可测试该变更。
visudo 会加锁,避免两名管理员互相覆盖,并在替换生效文件之前运行策略解析器,语法有误时会提示重新编辑。这一点很关键,因为策略文件格式损坏会导致整个委派机制拒绝运行,主机可能完全失去提升权限的途径;同样的检查也可以非交互地运行,在文件投入使用前先行校验。
编号 QB-5N4T9V依据: visudo(8) manual page — file locking and syntax checking of the sudoers policy报告此题的问题
9. dba 组的成员必须能够在所有主机上以 root 身份仅重启数据库服务。在 /etc/sudoers.d 下的独立文件中放入哪一条条目才能准确表达这一要求?
- A.%dba ALL=(root) /usr/bin/systemctl restart postgresql✓ 答案
- B.%dba ALL=(root) NOPASSWD: ALL, restart postgresql only
- C.dba ALL=(ALL:ALL) /usr/bin/systemctl restart postgresql
- D.%dba postgresql=(root) /usr/bin/systemctl restart ALL
规则的格式是 user host=(runas) commands,% 前缀表示第一个字段是组,而 host 字段指规则适用的主机——应为 ALL,绝不是服务名。写出完整命令路径及其参数才能限定委派范围;授予 ALL(尤其再加上免密标签)等于把不受限制的 root 权限交给该组并取消了重新认证这一环,完全背离了只委派单项任务的初衷。漏掉 % 则会悄悄变成为名为 dba 的用户账户创建规则,而不是该组。
编号 QB-N5AYUV依据: sudoers(5) manual page — user specifications, group prefix, host and runas fields, and #includedir drop-in files报告此题的问题
10. 某规则允许操作员以 root 身份运行文本编辑器,以便修改一个配置文件。审计人员指出该编辑器可以用 :!sh 启动一个 shell。哪个 sudoers 标签能解决这个问题?
- A.NOPASSWD:,它让编辑器不再弹出提示,因而也无法进入 shell。
- B.NOEXEC:,它阻止被委派的程序再去执行任何属于它自己的其他程序。✓ 答案
- C.PASSWD:,它在编辑器试图启动另一个程序时强制重新认证。
- D.SETENV:,它清空环境变量,使编辑器无法在搜索路径中找到 shell。
编辑器、分页器、解释器以及带有 exec 类选项的工具都能启动子进程,而子进程会继承提升后的权限,于是一条范围很窄的委派就变成了完整的 root shell。NOEXEC 标签会阻止这类子进程执行,使被委派的程序只能完成自己的本职工作;密码相关标签只影响调用者是否以及何时需要重新认证,对 shell 逃逸毫无作用。
编号 QB-ZSVGTY依据: sudoers(5) manual page — NOEXEC and EXEC tags, preventing shell escapes报告此题的问题
11. 用公钥登录服务器失败,回退到密码提示。在服务器上,ls -ld 显示 /home/bob/.ssh 为 drwxrwxrwx,其中的 authorized_keys 为 -rw-rw-r--,日志写着 "Authentication refused: bad ownership or modes"。应如何修复?
- A.对 /home/bob/.ssh 执行 chmod 777、对 authorized_keys 执行 666,让以 root 运行的守护进程能读取密钥。
- B.设置 PubkeyAuthentication yes 并重新加载守护进程,因为这条拒绝信息说明公钥认证被关闭了。
- C.把私钥复制到 /home/bob/.ssh/authorized_keys,因为服务器是用这一半来比对客户端出示的密钥的。
- D.对 /home/bob/.ssh 执行 chmod 700、对 authorized_keys 执行 600,因为服务器会忽略组或其他人可写的密钥文件。✓ 答案
如果 authorized_keys 文件可以被属主所在组或其他人修改,服务器就会拒绝采信它,因为可写文件意味着第三方能往里添加自己的公钥;因此严格模式检查要求目录为 700、文件为 600,且都归该用户所有。服务器上安装的永远只是密钥对的公开一半(ssh-copy-id 就是把它追加到 authorized_keys),私钥留在客户端,并且只有属主可读。
编号 QB-GAQB8Y依据: sshd(8) manual page — AuthorizedKeysFile and StrictModes; ssh-copy-id(1)报告此题的问题
12. 某服务器的 sshd_config 中同时写有 PermitRootLogin prohibit-password 和 PasswordAuthentication yes。这两项组合的实际效果是什么,如何进一步加固?
- A.root 仍可用密钥登录,只有 PermitRootLogin no 才会拒绝 root 以任何认证方式登录。✓ 答案
- B.root 现在已无法以任何方式登录,剩下要做的只是为普通用户设置 PasswordAuthentication no。
- C.root 可以用密码登录但不能用密钥,而 PermitRootLogin no 只会阻断基于密钥的那条路径。
- D.root 只能从控制台登录,而 PermitRootLogin forced-commands-only 仍会允许交互式的密钥登录。
prohibit-password 只封堵 root 的密码和键盘交互认证方式,公钥与证书认证依然可以成功,因此远程 root 会话仍然存在。把该指令设为 no 才是彻底拒绝 root 登录,而单独关闭密码认证则是把其余所有账户都推向密钥认证。
编号 QB-2T8UYZ依据: sshd_config(5) manual page — PermitRootLogin and PasswordAuthentication报告此题的问题
13. 连接一台已经正常访问数月的服务器时,ssh 打印出 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 并拒绝继续。这说明了什么?
- A.服务器上该账户的密码被改过,因此代理为这台主机缓存的凭据已不再被接受。
- B.用户的私钥已与 authorized_keys 中的公钥不匹配,因此服务器拒绝了客户端出示的那把密钥。
- C.服务器的主机密钥已到有效期终点,必须在客户端重新生成一对新密钥才能再次连接。
- D.服务器的主机密钥已与 known_hosts 中记录的不一致,重装系统或遭到中间人截获都会出现这种情况。✓ 答案
首次连接时客户端会保存服务器的主机密钥,之后每次连接都拿对方出示的密钥与该记录比对;不一致意味着服务器身份确实变了(重装、恢复镜像、重新生成密钥),或者有别的东西在冒名应答。客户端选择直接中止而不是提示继续,因为继续下去会让截获者拿到整个会话;正确做法是通过其他渠道核实新的指纹,再删除过期的记录条目。
编号 QB-HA3PDZ依据: ssh(1) manual page — host key verification and the known_hosts file报告此题的问题
14. 一名工程师使用 ssh -A,经由多个团队共用的跳板机访问内部服务器。为什么不建议在这类主机上转发认证代理?
- A.私钥文件会在会话期间被复制到跳板机上,并且在注销之后仍然可以在那里被读取。
- B.口令短语会以明文传送到跳板机,以便远端在需要时随时解密那把私钥。
- C.跳板机会被作为可信主机写入 known_hosts,于是它的主机密钥日后发生变化也会被静默接受。
- D.任何在跳板机上拥有 root 权限的人都能借用被转发的代理套接字,在其他服务器上冒充该工程师认证。✓ 答案
代理转发并不复制密钥,而是在中间主机上暴露一个套接字,可通过它请求使用工作站上那把密钥执行签名操作。能访问该套接字的用户(root 或任何可读取它的人)因此能在密钥受信任的任何地方完成认证,只要会话还在持续;所以转发只应用于与自己工作站同等可信的主机,更好的做法是改用不暴露代理的跳板选项。
编号 QB-XS6UFW依据: ssh(1) manual page — ForwardAgent and the -A option security caveat; ssh_config(5) ProxyJump报告此题的问题
15. 在一台 RHEL 系主机上,getenforce 报告 Enforcing。管理员想先确认是策略在阻止某个服务,然后再把该机制完全关闭。关于这两步,下列哪项说法正确?
- A.setenforce 0 会把主机直接切到 Disabled,而 Permissive 只能通过编辑 /etc/selinux/config 来选择。
- B.Permissive 和 Disabled 都用 setenforce 选择,/etc/selinux/config 中的值只用于控制文件系统的标签。
- C.setenforce 0 切到 Permissive,拒绝只记录不阻断;Disabled 需改 /etc/selinux/config 并重启。✓ 答案
- D.Permissive 仍会阻止访问但会记录下来,因此只有 /etc/selinux/config 中的 Disabled 才能证明是策略所致。
setenforce 只能在 Enforcing 与 Permissive 之间切换,且更改在下次启动前有效;在 Permissive 下策略仍会评估并把拒绝写入审计日志,但不再阻断,因此它是用来确认原因的诊断手段。进入或离开 Disabled 意味着根本不加载策略,所以必须修改 /etc/selinux/config 中的 SELINUX 设置并重启——而让主机长期处于关闭状态并不是修复,正确的解决办法通常是调整标签或布尔值。
编号 QB-EAZNVV依据: setenforce(8), getenforce(8) and selinux(8) manual pages; /etc/selinux/config on RHEL-family systems报告此题的问题
16. 在一台 RHEL 系 Web 服务器上,用 mv 移入被发布目录的一个文件返回权限错误,审计日志显示上下文类型不匹配。哪项操作能持久地纠正该标签?
- A.用 chcon -t 手工设置类型,该命令会把新标签写入策略,使日后重新打标签时仍然保留。
- B.再用 cp --preserve=context 复制一次该文件,这会给它打上目标目录的默认标签。
- C.用 semanage fcontext 加上下文规则,再 restorecon -Rv 套用。✓ 答案
- D.执行 setenforce 0 让主机保持宽容模式,因为标签会在下次启动时自动被纠正过来。
mv 会保留文件原有的安全上下文,而 cp 创建的是新文件并继承目标目录的默认上下文,这正是把内容移入被发布目录后出现类型不匹配的典型原因。持久的修复方式是把该路径应有的上下文记入文件上下文规则,然后重新打标签,这样标签在以后任何一次重新打标签后依然正确;chcon 能立刻改标签,但不会被记入规则,一次重新打标签或文件系统恢复就会悄悄把它还原。
编号 QB-YSH6NX依据: semanage-fcontext(8), restorecon(8) and chcon(1) manual pages报告此题的问题
17. 在一台 RHEL 系主机上,setsebool httpd_can_network_connect on 让 Web 应用能够访问后端服务,但重启之后外发连接又被拒绝了。这是为什么?
- A.重启时恢复了该目录树的文件上下文,而布尔值是作为那个目录的扩展属性保存的。
- B.所选的布尔值不对,只有自定义策略模块才能允许某个服务发起外发网络连接。
- C.该更改只写入了运行中的策略;需要加上 -P 选项,才能把它保存为该布尔值的默认值。✓ 答案
- D.布尔值在启动时从 /etc/selinux/config 读取,因此必须在该文件中加一行才能让设置存续。
布尔值是一个开关,用来在不编写任何新规则的前提下启用或禁用策略中的可选部分,而 setsebool 默认只修改运行中的内核。加上 -P 会同时把该值写入持久化的策略存储,从而在启动时恢复;可以列出所有布尔值的当前状态,确认哪些已启用,以及存储的默认值与当前生效值是否一致。
编号 QB-FACZ2X依据: setsebool(8) and getsebool(8) manual pages — the -P option and persistent boolean values报告此题的问题
18. 某加固标准要求账户在连续若干次密码验证失败后自动被锁定,并在规定的时间间隔后自动解锁。这一要求在哪里、由什么来实施?
- A.在 PAM 堆栈中,由 faillock 模块实施,其 deny 与 unlock_time 设置按账户统计失败次数。✓ 答案
- B.在 sshd_config 中,由 MaxAuthTries 实施,单次连接内失败达到该次数就锁定该账户。
- C.在 /etc/shadow 中,由 inactive 字段实施,一旦记录的失败次数超过上限就锁定该账户。
- D.在 /etc/login.defs 中,由 PASS_MAX_DAYS 实施,在记录到反复失败的尝试时停用该账户。
锁定是在认证环节做出的决定,因此属于可插拔堆栈:faillock 模块按用户记录连续失败次数,达到配置的阈值即拒绝认证,并在解锁间隔后放开该账户,管理员也可以用 faillock 工具提前清零计数。早年承担这项工作的 tally 模块已从库中移除,所以 faillock 才是当前的实现;MaxAuthTries 只限制单次连接内的尝试次数,并不会锁定任何账户。
编号 QB-5TAUG5依据: pam_faillock(8) and faillock(8) manual pages; sshd_config(5) MaxAuthTries报告此题的问题
19. 某软件包创建了一个服务账户,它拥有文件并运行守护进程,但绝不能用来打开交互式会话。哪项设置能表达这一要求?
- A.把该账户的登录 shell 设为 nologin,这样交互式登录尝试会打印一行提示并立即退出。✓ 答案
- B.用 chage -E 把账户到期日设为过去的日期,这样守护进程照常运行而任何会话都被拒绝。
- C.把该账户的 UID 设在常规用户区间之下,登录程序会拒绝为这样的 UID 启动 shell。
- D.在 /etc/shadow 中把该账户的密码字段设为一个星号,这会取消它对主目录的访问权限。
把登录 shell 换成 nologin 是表达“该身份只用于拥有进程和文件,不供登录”的标准做法:该程序会打印一条拒绝信息并以失败状态退出,因此不会为该账户启动任何 shell。把 UID 放进系统区间只是惯例,并不能阻止启动 shell;而到期日期属于面向真实用户的账户生命周期控制,并不是关于能否交互使用的声明。
编号 QB-MA5PW4依据: nologin(8) manual page; useradd(8) -r and -s options for system accounts报告此题的问题
20. 对某服务器的 SSH 登录必须同时要求一把有效密钥和认证器应用提供的一次性验证码,且按此顺序。配合负责验证码的 PAM 模块,应使用哪项 sshd_config 设置来表达这一要求?
- A.PubkeyAuthentication yes 与 PasswordAuthentication yes 并用,使客户端可以任选这两种方式之一出示。
- B.AuthenticationMethods publickey keyboard-interactive,允许客户端使用它手上拥有的那一种方式。
- C.AuthenticationMethods publickey,keyboard-interactive,要求一次会话在开启前依次满足这两种方式。✓ 答案
- D.UsePAM yes 与 PermitEmptyPasswords no 并用,在客户端出示的密钥被接受之后再追加验证码提示。
AuthenticationMethods 列出一次会话必须完成的认证方式,而分隔符本身就承载含义:逗号连接的方式必须全部按给定顺序成功,空格分隔的则是若干可替代的列表,任选其一即可。因此只有逗号形式才真正构成双因素——密钥代表“你拥有的东西”,认证器生成的验证码经 keyboard-interactive 路径进入可插拔堆栈;而单纯把两种方式都启用,客户端仍可只用其中一种。
编号 QB-ABTMZN依据: sshd_config(5) manual page — AuthenticationMethods, comma-separated required methods versus space-separated alternatives报告此题的问题
本考试的其他主题
练习题依据 CompTIA 公布的 Linux+ 考试大纲及 Linux 系统管理的通行实践编写。CompTIA 和 Linux+ 是 CompTIA 的商标,Linux 是 Linus Torvalds 的注册商标;本网站与 CompTIA 无关联,也未获其认可。真实考试除选择题外还包含实操题(performance-based questions),要求在模拟环境中实际完成任务——四选一的题型无法复现这一部分,因此本题库覆盖的是知识部分,请同时在真实系统上动手练习。CompTIA 会定期修订大纲并为每个版本编号:报考前请向 CompTIA 确认现行大纲、考试代码与报考要求。 关于 CompTIA Linux+ 认证 →