1

我创建了一个whoami需要假用户名的新命令,并通过将其添加到 ~/.profile 将其放入 PATH 中。whoami它是以一种在实际来自 Linux 的实际 whoami 之前被调用的方式创建的。

这样做的主要原因是因为我正在远程访问 Hadoop 集群并希望复制的文件位于假用户名下。

当我whoami在 shell 中调用时,这工作正常,甚至调用 $PATH 会先显示我创建的 whoami 的路径。但是由于某种原因,当调用 Hadoop 时,它不会选择创建的“whoami”。

有人可以帮我解决这个问题吗?

谢谢

4

2 回答 2

3

大多数应用程序不使用whoami来确定用户的用户名或组。例如,在 bash 中,您可以使用命令id来查找有关您自己的更多详细信息,或者id [username](例如id root)查找有关其他用户的更多详细信息。组也可以找到groups。此外,不同的编程语言(例如 C)有自己的方法来确定用户身份,例如getuid()命令。

如果您真的“需要”伪造您的用户帐户,则需要深入到操作系统级别并在处理这些方法的内核/API 中创建挂钩。

您是否有可能只是chown复制文件后的文件?

更新:

似乎某些 Hadoop 版本确实使用whoami了(我自己的集群实现没有)。

在这种情况下,最好的(一个松散使用的术语)建议是移动合法的whoami可执行文件并创建一个whoamishell 脚本来代替它。自定义脚本应该验证当前用户,如果它是“hadoop”,则返回您想要的任何伪造用户名 - 否则返回有效输出。在这种情况下,伊戈尔的回答会起作用。

于 2012-07-12T02:05:10.520 回答
2

我想hadoop使用其他PATH变量然后你在你的shell中。您可以调整其 PATH 并将带有 fake 的目录添加whoami到其开头。

如果不可能,您可以为whoami(我不确定这是一个好主意,但如果您愿意,您可以这样做)编写一个小包装器,它将运行原始文件,whoami除非脚本由 hadoop 执行:

#!/bin/sh
WHOAMI=/bin/whoami.orig
if [ "$($WHOAMI)" = hadoop ]
then
  echo fake
else
  exec $WHOAMI "$@"
fi
于 2012-07-12T10:24:47.380 回答