1

偽のユーザー名を必要とする新しいwhoamiコマンドを作成し、 ~/.profile に追加して PATH に入れました。whoamiLinux から実際の whoami の前に呼び出される方法で作成されます。

これを行う主な理由は、私がリモートで Hadoop クラスターにアクセスしていて、コピーされたファイルを偽のユーザー名の下に置きたいからです。

これwhoamiは、シェルで呼び出すと正常に機能し、 $PATH を呼び出すと、作成した whoami へのパスが他の何よりも先に表示されます。しかし、何らかの理由で、Hadoop が呼び出されたときに、作成された「whoami」が選択されません。

誰かがこれを修正する方法を手伝ってくれますか?

ありがとう

4

2 に答える 2

3

whoamiほとんどのアプリケーションは、ユーザーのユーザー名またはグループを決定するために を使用しません。たとえば、bash では、コマンドidを使用して、自分自身に関するより詳細な情報を検索したりid [username]( などid root)、他のユーザーに関するより詳細な情報を検索したりできます。groupsグループも同様に見つけることができます。また、C などのさまざまなプログラミング言語には、コマンドなどのユーザー ID を判別する独自の方法がありますgetuid()

ユーザー アカウントを偽造するまでが本当に「必要」な場合は、OS レベルまで下がって、それらのメソッドを処理するカーネル/API にフックを作成する必要があります。

chown代わりに、コピー後にファイルを単純にすることは可能ですか?

アップデート:

Hadoop の一部のリリースでは実際に使用されているようですwhoami(クラスタリングを使用した私の実装では使用されていません)。

この場合、最善の (大まかに使用される用語) 提案は、正当なwhoami実行可能ファイルを移動し、whoamiその場所に配置されるシェル スクリプトを作成することです。カスタムスクリプトは現在のユーザーを検証し、それが「hadoop」の場合は、必要な偽のユーザー名を返します。それ以外の場合は、有効な出力を返します。この場合、イゴールの答えは機能します。

于 2012-07-12T02:05:10.520 に答える
2

Hadoop はPATH、シェルにある変数とは別の変数を使用していると思います。その PATH を調整し、whoamiその先頭に偽のディレクトリを追加できます。

それが不可能な場合は、スクリプトが Hadoop によって実行される場合を除いてオリジナルで実行される小さなラッパーを作成できますwhoami(それが良いアイデアかどうかはわかりませんが、必要に応じてこれを実行できます) 。whoami

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