簡単に言うと、特権的なアクセス権がないため、~/hosts
ファイルを上書きできる/etc/hosts
ファイルを取得できるかどうかを知りたいのです。
私が作業しているマシンは、正しいDNSサーバーで正しく構成されているようです。通常のマシンnameにpingを実行しようとすると、失敗します。しかし、IPアドレスでpingしようとすると、期待どおりに動作します。
1台の不適切に構成されたマシンのために作成した、スクリプトやその他の筋肉に記憶された手作りのコマンドライン™の変更を避けたいです。私はシステム管理者に連絡しましたが、彼らには他に揚げる魚がいます。
どうすれば実装できますか?
LD_PRELOADトリックの横。 nscd
を使用していない場合の簡単な代替策は、libnss_files.so
を次のような独自の場所にコピーすることです。
mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
コピーをバイナリ編集して、そこの/etc/hosts
を/tmp/hosts
のような同じ長さに置き換えます。
Perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2
/tmp/hosts
を編集して、必要なエントリを追加します。そして使う
export LD_LIBRARY_PATH=~/lib
nss_files
が/tmp/hosts
ではなく/etc/hosts
を検索するため。
/tmp/hosts
の代わりに、/dev/fd//3
にして、
exec 3< ~/hosts
たとえば、異なるコマンドが異なるhosts
ファイルを使用できるようにします。
$ cat hosts
1.2.3.4 asdasd
$ LD_LIBRARY_PATH=~/lib getent hosts asdasd 3< ~/hosts
1.2.3.4 asdasd
nscd
がインストールされて実行されている場合は、同じトリックを実行してバイパスできますが、今回はlibc.so.6
を使用し、nscdソケットへのパス(/var/run/nscd/socket
など)を存在しないパス。