web-dev-qa-db-ja.com

ユーザーレベルで/ etc / hostsファイルを上書きするにはどうすればよいですか?

可能性のある複製:
/ etc/hostsを補完するためにユーザー固有のhostsファイルを作成できますか?

簡単に言うと、特権的なアクセス権がないため、~/hostsファイルを上書きできる/etc/hostsファイルを取得できるかどうかを知りたいのです。

私が作業しているマシンは、正しいDNSサーバーで正しく構成されているようです。通常のマシンnameにpingを実行しようとすると、失敗します。しかし、IPアドレスでpingしようとすると、期待どおりに動作します。

1台の不適切に構成されたマシンのために作成した、スクリプトやその他の筋肉に記憶された手作りのコマンドライン™の変更を避けたいです。私はシステム管理者に連絡しましたが、彼らには他に揚げる魚がいます。

どうすれば実装できますか?

14
yves Baumes

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など)を存在しないパス。

21