基于 UNIX 应用程序的子系统 (SUA) 提供符合便携式操作系统界面(与 POSIX 兼容)的子系统,该子系统本身与 Microsoft(R) Windows(R) 应用程序一起运行 UNIX Shell、实用程序以及应用程序。本主题描述了针对需要使用符合 POSIX 操作系统的用户的工作注意事项。

POSIX Shell 兼容性

SUA Korn Shell 遵循传统的 Korn Shell 行为,几乎和 POSIX 行为一样。如果需要严格限定 POSIX 的一致性(因为某些工作环境要求这样),请在帮助文件的 ksh(1) 文档中找到 Korn Shell 与 POSIX 之间的不同,该帮助文件可在下载程序包 Utilities and Software Development Kit (SDK) for Subsystem for UNIX-based Applications 中找到。

若要实现 POSIX.2 与 Korn Shell 的完全一致性,必须在 POSIX 模式下运行 Korn Shell。若要在 POSIX 模式下运行 Korn Shell,请执行下列操作之一:

  • 使用 -o posix 选项打开 Korn Shell。

  • 在 Shell 中运行命令 set -o posix

  • 设置 POSIXLY_CORRECT shell 参数。

C Shell 中不支持 POSIX 一致性。与 Korn Shell 不同的是,C Shell 没有 POSIX 模式命令选项。

目录权限的遍历检查

默认状态下,Windows 用户有浏览目录树的权限,尽管他们可能没有访问路径中每个目录的权限。在 POSIX 系统中,除非用户有权访问通向该目录路径中的每个目录,否则不能访问该目录。该 POSIX 行为称为遍历检查。例如,如果您无权访问某个目录,则不能将当前目录更改为该目录的任一子目录,即使有权访问那些子目录也是如此。Windows 中默认状态下,可以将当前目录更改为有权访问的任何子目录。

Windows 中有种特殊的权限称为“遍历文件夹/执行文件”权限,可以将这种权限设置给用户或组。可以配置此权限以允许或拒绝浏览目录树。只有当组策略管理单元中没有授予组或用户绕过遍历检查用户权限时,遍历文件夹权限才起作用。在 Microsoft Windows 2000 中,默认情况下,授予 Everyone 绕过遍历检查用户权限。在 Windows Server(R) 2008 R2、Windows(R) 7、Windows Server(R) 2008、Windows Vista(R)、Windows Server 2003 和 Windows XP 操作系统中,Administrators、Backup Operators、Everyone、Power Users 和 Users 组都有这种权限。若要与 POSIX 标准严格一致,需要从除 Backup Operators 组以外的所有用户和组中删除绕过遍历检查用户权限。若要在许多其他 UNIX 实现方面与被授予根用户的权限一致,需要删除除 Administrators 和 Backup Operators 组以外所有用户的绕过遍历检查用户权限。

不遵循 su 和 setuid 的遍历检查行为

要使用 su 命令以其他用户身份运行的超级用户,以及要使用 setuid 进程(和那些包含与 setuid 相关调用的进程)的用户,可通过保留某些目录遍历权限而不遵循以上描述的默认行为。

从用户帐户删除“绕过遍历检查”权限将导致 POSIX 兼容行为。但是,当根用户试图在不提供密码的情况下对任何其他用户运行 su 时,产生的会话将没有以上描述的行为。根用户运行 su(不提供密码)后启动的进程可以访问和浏览目录树,虽然这些进程可能没有访问路径中每个目录的权限。

Setuid 进程以及调用 setuidseteuidsetreuid 的进程也具有相同的行为。从运行这些进程的用户帐户删除“绕过遍历检查”权限之后,这些进程将可以浏览目录树,虽然它们可能没有访问路径中每个目录的权限。

请参阅