{ "topic": "os-security", "type": "single_choice", "schema_version": "1.0.0", "generated": "2026-09-17T00:00:00+08:00", "questions": [ { "id": "sc-001", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "权限模型" ], "question": "在 UNIX/Linux 权限模型中,文件权限 rwxr-xr-- 对应的八进制数值是:", "options": { "A": "744", "B": "754", "C": "644", "D": "755" }, "answer": "B", "explanation": "权限分为三组:所有者(rwx=4+2+1=7)、同组(r-x=4+0+1=5)、其他(r--=4+0+0=4),因此八进制为 754。A 选项 744 表示 rwxr-----,C 选项 644 表示 rw-r--r--,D 选项 755 表示 rwxr-xr-x,均不符合题意。", "source": null, "related": [] }, { "id": "sc-002", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "权限模型" ], "question": "以下哪个 Linux 命令可以将文件 /etc/passwd 的所有者修改为用户 alice?", "options": { "A": "chmod alice /etc/passwd", "B": "chown alice /etc/passwd", "C": "chgrp alice /etc/passwd", "D": "passwd alice /etc/passwd" }, "answer": "B", "explanation": "chown (change owner) 命令用于修改文件所有者。chmod 用于修改文件权限位,chgrp 用于修改文件所属组,passwd 用于修改用户密码。注意修改文件所有者通常需要 root 权限。", "source": null, "related": [] }, { "id": "sc-003", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "权限模型" ], "question": "Linux 中 SUID 位的作用是:", "options": { "A": "使文件只能被 root 用户读取", "B": "使程序在执行时以文件所有者的身份运行", "C": "使文件不可被删除", "D": "使目录下的文件自动继承目录的组" }, "answer": "B", "explanation": "SUID (Set User ID) 位使得任何用户执行该程序时,进程的有效用户 ID 变为文件所有者的 UID,而不是执行者的 UID。典型例子是 /usr/bin/passwd,它需要以 root 身份运行来修改 /etc/shadow。A 描述的是文件读权限限制,C 描述的是 sticky bit 在某些场景下的效果(实际 sticky bit 防止非所有者删除目录中的文件),D 描述的是 SGID 对目录的效果。", "source": null, "related": [] }, { "id": "sc-004", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "权限模型" ], "question": "在访问控制模型中,DAC(自主访问控制)与 MAC(强制访问控制)的核心区别是:", "options": { "A": "DAC 由系统管理员统一管理,MAC 由资源所有者决定", "B": "DAC 允许资源所有者自行设定访问权限,MAC 由系统安全策略统一强制执行", "C": "DAC 只用于文件系统,MAC 只用于网络", "D": "DAC 比 MAC 安全性更高" }, "answer": "B", "explanation": "DAC(Discretionary Access Control)允许资源的所有者自行决定谁可以访问该资源,灵活性高但可能因配置不当导致安全问题。MAC(Mandatory Access Control)由系统管理员预定义的安全策略强制执行,普通用户无法覆盖,安全性更高。Linux 的 SELinux 和 AppArmor 就是 MAC 实现。A 恰好说反了;C 不正确,两者都可用于多种资源;D 不正确,MAC 通常比 DAC 更安全。", "source": null, "related": [] }, { "id": "sc-005", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "权限模型" ], "question": "Linux 的 Capabilities 机制相比传统的 root/普通用户二分模型,其主要优势是:", "options": { "A": "完全取代了传统的 UID/GID 机制", "B": "可以将 root 的超级权限细分为多个独立的特权能力,按需授予", "C": "使普通用户自动获得所有系统特权", "D": "只适用于容器环境,不能用于普通进程" }, "answer": "B", "explanation": "Linux Capabilities 将传统的 root 全能权限拆分为多个独立的细粒度能力,如 CAP_NET_BIND_SERVICE(绑定低端口)、CAP_SYS_PTRACE(跟踪进程)等。这样非 root 进程也可以获得所需的特定特权,而无需拥有全部 root 权限,符合最小特权原则。A 错误,Capabilities 补充但未取代 UID/GID;C 错误,Capabilities 需显式授予;D 错误,Capabilities 普遍适用于 Linux 进程。", "source": null, "related": [] }, { "id": "sc-006", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "沙箱" ], "question": "沙箱(Sandbox)在操作系统安全中的主要作用是:", "options": { "A": "加速程序的运行速度", "B": "隔离程序的运行环境,限制其对系统资源的访问", "C": "为程序提供更大的内存空间", "D": "自动修复程序中的安全漏洞" }, "answer": "B", "explanation": "沙箱是一种安全机制,通过创建受限的隔离环境来运行不可信的程序,限制其对文件系统、网络、系统调用等资源的访问,从而保护宿主系统。典型应用包括浏览器沙箱、移动端应用沙箱、容器化等。A、C 均不是沙箱的功能,D 也不正确,沙箱不负责修复漏洞。", "source": null, "related": [] }, { "id": "sc-007", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "沙箱" ], "question": "seccomp(Secure Computing Mode)是 Linux 内核提供的一种安全机制,其工作原理是:", "options": { "A": "加密进程的内存空间", "B": "限制进程可以使用的系统调用,禁止不在白名单中的调用", "C": "将进程迁移到独立的网络命名空间", "D": "对进程的所有文件操作进行审计日志记录" }, "answer": "B", "explanation": "seccomp 是 Linux 内核提供的系统调用过滤机制。在 seccomp 模式下,进程只能使用有限的系统调用(如 read、write、exit、sigreturn)。seccomp-bpf 扩展允许通过 BPF 程序定义更灵活的过滤规则(白名单/黑名单)。Docker、Chrome 等都使用了 seccomp 来限制容器或子进程的系统调用。A 是加密概念,C 是 namespace 功能,D 是 auditd 的功能。", "source": null, "related": [] }, { "id": "sc-008", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "沙箱" ], "question": "Linux Namespace 技术可以隔离以下哪些系统资源?", "options": { "A": "仅进程 ID(PID)", "B": "进程 ID、网络、挂载点、用户 ID、主机名等多种资源", "C": "仅文件系统", "D": "仅网络和内存" }, "answer": "B", "explanation": "Linux Namespace 是容器技术的基础之一,提供了多种资源隔离类型:PID(进程号)、NET(网络栈)、MNT(挂载点)、UTS(主机名)、IPC(进程间通信)、USER(用户和组 ID)、Cgroup(cgroup 根目录)等。每种 namespace 负责隔离特定的系统资源,组合使用可以实现完整的环境隔离。因此 A、C、D 的描述都过于局限。", "source": null, "related": [] }, { "id": "sc-009", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "沙箱" ], "question": "以下哪种技术不属于操作系统级沙箱机制?", "options": { "A": "Linux seccomp", "B": "Windows AppContainer", "C": "Java 虚拟机(JVM)的字节码验证", "D": "FreeBSD Capsicum" }, "answer": "C", "explanation": "JVM 的字节码验证属于应用程序层面的安全机制(语言运行时沙箱),而非操作系统内核级沙箱。seccomp 是 Linux 内核的系统调用过滤,AppContainer 是 Windows 8+ 的应用隔离容器,Capsicum 是 FreeBSD 的能力(capability)和沙箱框架,三者都是操作系统内核提供的沙箱机制。", "source": null, "related": [] }, { "id": "sc-010", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "windows安全" ], "question": "Windows 操作系统中,用于标识安全主体(用户、组、计算机)的唯一标识符是:", "options": { "A": "PID(进程 ID)", "B": "SID(安全标识符)", "C": "GUID(全局唯一标识符)", "D": "MAC 地址" }, "answer": "B", "explanation": "SID (Security Identifier) 是 Windows 中用于唯一标识安全主体的字符串,格式如 S-1-5-21-xxx。每个用户、组和计算机都有一个唯一的 SID,它被广泛用于访问控制列表(ACL)中的权限判定。PID 是进程标识符,GUID 是通用唯一标识符,MAC 地址是网络硬件地址,均非 Windows 安全主体的标识。", "source": null, "related": [] }, { "id": "sc-011", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "在 Windows 安全模型中,Access Token(访问令牌)包含以下哪些信息?", "options": { "A": "仅用户的密码哈希", "B": "用户的 SID、所属组的 SID 列表、特权列表和默认 DACL", "C": "仅用户的登录时间和 IP 地址", "D": "用户的浏览器 Cookie 和浏览历史" }, "answer": "B", "explanation": "Access Token 是 Windows 安全子系统的核心数据结构,当用户登录时由系统创建。它包含:用户 SID、所属组 SID 列表、分配的特权(如 SeShutdownPrivilege)、默认所有者 SID、默认 DACL(自主访问控制列表)等。系统在每次访问安全对象时都会检查进程的 Access Token 来决定是否允许。A、C、D 的内容均不是 Access Token 的组成部分。", "source": null, "related": [] }, { "id": "sc-012", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "以下 Win32 API 函数中,哪个用于创建一个受限的令牌(Restricted Token)以实现最小特权运行?", "options": { "A": "OpenProcessToken()", "B": "CreateRestrictedToken()", "C": "AdjustTokenPrivileges()", "D": "DuplicateTokenEx()" }, "answer": "B", "explanation": "CreateRestrictedToken() 可以基于现有令牌创建一个新的受限令牌,能删除特权、将 SID 标记为仅拒绝(deny-only)、添加受限 SID 等,常用于实现最低权限运行。OpenProcessToken() 用于打开进程的令牌句柄,AdjustTokenPrivileges() 用于启用/禁用令牌中的特权,DuplicateTokenEx() 用于复制令牌(可改变模拟级别),但只有 CreateRestrictedToken() 专门用于创建受限令牌。", "source": null, "related": [] }, { "id": "sc-013", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "Windows 中的 UAC(User Account Control)机制的主要目的是:", "options": { "A": "加密用户的文件", "B": "即使用户是管理员组成员,默认也以标准用户权限运行程序,需显式提升才能获得管理员权限", "C": "自动更新操作系统补丁", "D": "防止用户安装任何软件" }, "answer": "B", "explanation": "UAC 是 Windows Vista 引入的安全特性。在 UAC 开启时,即使用户属于 Administrators 组,其进程默认也只获得标准用户令牌(filtered token),当操作需要管理员权限时,系统会弹出确认对话框(consent prompt)或要求输入管理员凭据(credential prompt)。这有效限制了恶意软件自动获取完全管理权限。A 是加密功能,C 是 Windows Update 功能,D 说法过于绝对。", "source": null, "related": [] }, { "id": "sc-014", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "在 Win32 API 中,使用以下哪个函数可以检查当前进程是否有权限访问一个安全对象?", "options": { "A": "CreateFile()", "B": "AccessCheck()", "C": "VirtualAlloc()", "D": "GetCurrentProcess()" }, "answer": "B", "explanation": "AccessCheck() 函数用于检查指定的访问令牌是否拥有对安全对象的特定访问权限。它接受安全描述符(SECURITY_DESCRIPTOR)、客户端令牌、请求的访问掩码等参数,返回是否允许访问以及授予的访问权限。CreateFile() 虽然在打开文件时会进行访问检查,但它不是专门的权限检查函数;VirtualAlloc() 用于内存分配;GetCurrentProcess() 获取当前进程句柄。", "source": null, "related": [] }, { "id": "sc-015", "type": "single_choice", "difficulty": 3, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "Windows 中安全描述符(SECURITY_DESCRIPTOR)的四个主要组成部分是:", "options": { "A": "SID、Token、Handle、Session", "B": "Owner SID、Group SID、DACL、SACL", "C": "用户名、密码、域、权限等级", "D": "进程 ID、线程 ID、句柄表、访问掩码" }, "answer": "B", "explanation": "SECURITY_DESCRIPTOR 是 Windows 中描述安全对象访问控制信息的结构体,包含四个核心组件:Owner SID(所有者安全标识符)、Group SID(主组安全标识符,主要用于 POSIX 子系统)、DACL(Discretionary ACL,自主访问控制列表,决定谁可以访问)、SACL(System ACL,系统访问控制列表,用于审计)。A、C、D 均不是安全描述符的组成部分。", "source": null, "related": [] }, { "id": "sc-016", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "权限模型" ], "question": "Linux 中 umask 的作用是:", "options": { "A": "设置用户的登录密码", "B": "设置新创建文件和目录的默认权限掩码,屏蔽不需要的权限位", "C": "查看当前系统的安全补丁状态", "D": "加密文件系统" }, "answer": "B", "explanation": "umask 是一个权限屏蔽码,用于确定新创建文件和目录的默认权限。例如 umask 为 022 时,新建文件权限为 644(rw-r--r--),新建目录权限为 755(rwxr-xr-x)。umask 屏蔽掉的权限位不会被赋予新文件。它不涉及密码设置、补丁查看或文件系统加密。", "source": null, "related": [] }, { "id": "sc-017", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "沙箱" ], "question": "Docker 容器在安全隔离方面与传统虚拟机的主要区别是:", "options": { "A": "Docker 容器比虚拟机隔离性更强", "B": "Docker 容器共享宿主机内核,通过 Namespace 和 Cgroup 实现隔离;虚拟机有独立的内核", "C": "虚拟机不支持网络隔离,Docker 支持", "D": "Docker 容器不需要任何安全配置" }, "answer": "B", "explanation": "Docker 容器与虚拟机的核心区别在于:容器直接运行在宿主机内核上,利用 Namespace 隔离系统资源、Cgroup 限制资源使用,因此共享内核;而虚拟机通过 Hypervisor 运行完整的操作系统,拥有独立的内核。由于共享内核,容器的隔离性理论上弱于虚拟机,容器逃逸可能直接影响宿主机。A 说反了;C 错误,虚拟机也支持网络隔离;D 错误,容器仍需安全配置(如 seccomp、AppArmor 等)。", "source": null, "related": [] }, { "id": "sc-018", "type": "single_choice", "difficulty": 1, "tags": [ "操作系统安全", "windows安全" ], "question": "Windows 的 NTFS 文件系统支持的安全特性是:", "options": { "A": "文件级权限控制(ACL)", "B": "仅支持文件加密,不支持权限控制", "C": "仅支持目录级别的权限控制", "D": "与 FAT32 的安全特性完全相同" }, "answer": "A", "explanation": "NTFS(New Technology File System)支持为每个文件和目录设置独立的 ACL(Access Control List),可以精确控制不同用户和组对该文件/目录的访问权限(读、写、执行等)。NTFS 还支持 EFS(Encrypting File System)加密和审计。FAT32 不支持文件级权限控制,因此 D 错误。B 和 C 的描述不准确。", "source": null, "related": [] }, { "id": "sc-019", "type": "single_choice", "difficulty": 3, "tags": [ "操作系统安全", "windows安全", "win32api" ], "question": "调用 Win32 API CreateProcessAsUser() 时,第一个参数 hToken 必须具有哪些访问权限才能成功创建进程?", "options": { "A": "TOKEN_QUERY", "B": "TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY", "C": "TOKEN_ALL_ACCESS", "D": "TOKEN_IMPERSONATE" }, "answer": "B", "explanation": "CreateProcessAsUser() 要求传入的令牌句柄至少具有 TOKEN_QUERY(查询令牌信息)、TOKEN_DUPLICATE(复制令牌)和 TOKEN_ASSIGN_PRIMARY(将令牌分配给主令牌)三种访问权限。其中 TOKEN_ASSIGN_PRIMARY 是关键权限,允许将令牌用作新进程的主令牌。仅 TOKEN_QUERY(A)不够,TOKEN_ALL_ACCESS(C)包含所需权限但不是最低要求,TOKEN_IMPERSONATE(D)用于模拟而非进程创建。", "source": null, "related": [] }, { "id": "sc-020", "type": "single_choice", "difficulty": 2, "tags": [ "操作系统安全", "权限模型" ], "question": "RBAC(基于角色的访问控制)相比直接为用户分配权限的主要优势是:", "options": { "A": "完全消除了安全漏洞", "B": "通过角色将用户和权限解耦,简化权限管理并支持职责分离", "C": "使每个用户都成为管理员", "D": "只适用于小型系统" }, "answer": "B", "explanation": "RBAC(Role-Based Access Control)引入角色作为用户和权限之间的中间层:管理员将权限分配给角色,再将角色分配给用户。这带来多个优势:1)用户变动时只需调整角色关联,无需逐一修改权限;2)支持职责分离(SoD),可约束某些角色不能同时被同一用户拥有;3)便于审计和合规。A 过于绝对,RBAC 不消除漏洞;C 与 RBAC 相悖;D 错误,RBAC 广泛用于大型企业系统。", "source": null, "related": [] } ] }