特定のユーザーにのみ該当するホストのリストを追加できますか?たぶんユーザー固有のホストファイルですか?
メカニズムは文書の項目も補完する必要があります/etc/hosts
。
答え1
あなたが探している機能はglibcに実装されています。環境変数を設定してカスタムホストファイルを定義できますHOSTALIASES
。このファイルの名前は次のように置き換えられますgethostbyname
(参照:文書)。
はい(Ubuntu 13.10でテスト済み):
$ echo 'g www.google.com' >> ~/.hosts
$ export HOSTALIASES=~/.hosts
$ wget g -O /dev/null
いくつかの制限事項:
HOSTALIASES
getaddrinfo(3)
またはを使用しているアプリケーションでのみ使用できます。gethostbyname(3)
- ~のため設定値/設定/セットキャップアプリケーション内では、libcは環境をクリーンアップするため、設定が
HOSTALIASES
失われます。平らなsetuid ルートであるか、net_raw
実行時にアクティブになるため (ICMP パケットを受信する必要があるため)HOSTALIASES
呼び出す前に既にルートでなければ動作しません。ping
ping
答え2
LD_PRELOAD
スキルを除いて。一部のシステムで機能する簡単な代替方法は、ホスト名解決を処理するシステムライブラリのコピーをバイナリ編集して/etc/hosts
自分のパスに置き換えることです。
たとえば、Linuxでは次のようになります。
使用しない場合は、次の場所にnscd
コピーしてください。libnss_files.so
mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
(共有ライブラリは他の場所にあります。たとえば/lib/libnss_files.so.2
)
コピーをバイナリ編集して/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
を除いて、(ここで2つのスラッシュを使用しての長さがの長さと等しくなるように)/tmp/hosts
作成することもできます。/dev/fd//3
/dev/fd//3
/etc/hosts
exec 3< ~/hosts
たとえば、これにより、異なるコマンドで異なるファイルを使用できますhosts
。
インストールして実行している場合は、nscd
同じ方法で問題を解決できますが、今回はlibc.so.6
nscdソケットへのパス(たとえば/var/run/nscd/socket
)を存在しないパスに置き換えます。
答え3
このコマンドで作成されたプライベートマウントスペースは、unshare
シェルプロセスとシェルで開始されたすべての後続のサブプロセスにプライベート/ etc / hostsファイルを提供するために使用できます。
# Start by creating your custom /etc/hosts file
[user] cd ~
[user] cat >my_hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
EOF
[user] sudo unshare --mount
# We're now running as root in a private mountspace.
# Any filesystem mounts performed in this private mountspace
# are private to this shell process and its children
# Use a bind mount to install our custom hosts file over /etc/hosts
[root] mount my_hosts /etc/hosts --bind
[root] cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
[root] exec su - appuser
[appuser] # Run your app here that needs a custom /etc/hosts file
[appuser] ping news.bbc.co.uk
PING news.bbc.co.uk (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.026 ms
^C
--- news.bbc.co.uk ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.044/0.062/0.018 ms
答え4
1つの解決策は、各ユーザーを別々のユーザーとして指定して、chroot
各ユーザーが独自の別々のユーザーを持つことを可能にすることです/etc/hosts
。