PATH 环境变量

PATH 环境变量是一个重要的安全控制。 它指定要进行搜索以找到命令的目录。

缺省的系统范围 PATH 值在 /etc/profile 文件中指定,并且每个用户通常在用户的 $HOME/.profile 文件中具有 PATH 值。 .profile 文件中的 PATH 值将覆盖系统范围的 PATH 值或向其添加额外目录。

PATH 环境变量的未授权更改会使系统中的用户能够“欺骗”其他用户(包括 root 用户)。 电子欺骗程序(也称为特洛伊木马程序)更换了系统命令,然后捕获该命令可获取的信息,例如用户密码。

例如,假定用户更改 PATH 值,使系统在运行命令时首先搜索 /tmp 目录。 然后,用户在 /tmp 目录中放置一个名为 su 的程序,该程序会像 su 命令一样要求 root 用户密码。 接着,该 /tmp/su 程序将 root 用户密码通过邮件发送给该用户,并在退出前调用真正的 su 命令。 在这种情况下,任何使用 su 命令的 root 用户将暴露 root 密码,而且自己甚至还未意识到。

系统管理员和用户要防止关于 PATH 环境变量的任何问题,请执行以下操作:

  • 当感到怀疑时,请指定完整路径名。 如果指定了完整路径名,将忽略 PATH 环境变量。
  • 切勿将当前目录(由 . 指定 (句点))插入为 root 用户指定的 PATH 值中。 切勿允许在 /etc/profile 中指定当前目录。
  • root 用户应该在其专用 .profile 文件中具有其自己的 PATH 规范。 通常,/etc/profile 中的规范列出了对于所有用户的最少标准,然而 root 用户可能需要比缺省值更多或更少的目录。
  • 警告其他用户在没有咨询系统管理员的情况下,不要更改他们的 .profile 文件。 否则,可信的用户可能做出更改允许无意识的访问。 应将用户 .profile 文件的许可权设置为 740。
  • 系统管理员不应使用 su 命令从用户会话获取 root 用户特权,因为 .profile 文件中指定的用户的 PATH 值已生效。 用户可以设置他们自己的 .profile 文件。 系统管理员应当作为 root 用户或最好使用他们自己的标识登录到用户的机器,然后使用以下命令:
    /usr/bin/su - root

    这确保在会话过程中使用 root 环境。 如果系统管理员在另一个用户会话中以 root 用户身份操作,那么在整个会话中系统管理员应当指定完整路径名。

  • 保护输入字段分隔符(IFS)环境变量,以免在 /etc/profile 文件中被更改。 .profile 文件中的 IFS 环境变量可用于更改 PATH 值。