Пользовательский хост-файл

Я хотел бы добавить пользовательский хост-файл на моем Mac (El Capitan 10.11.5) в домашний каталог пользователей и проверить это в дополнение к /etc/hostsразрешению доменных имен.

Я нашел аналогичный ответ здесь . Этот ответ был категорическим «нет», потому что у этого человека не было привилегий суперпользователя. Это не относится ко мне, потому что у меня действительно есть привилегии суперпользователя.

Я нашел здесь еще один ответ , но, похоже, он не работает на моей машине. Этот ответ включает в себя установку HOSTALIASESпеременной среды на ~/.hosts, но никакое добавление к ~/.hostsфайлу никогда не имело каких-либо последствий в моем веб-браузере, что является целью моего желания создать хост-файл для конкретного пользователя.

ПРИМЕЧАНИЕ. Прочитав немного справочных страниц bash, правильная переменная среды на Mac, которая нужна для второго ответа, — это HOSTFILE. Впрочем, это все равно ни на что не повлияло. Мысли по этому поводу?

РЕДАКТИРОВАТЬ: это для однопользовательской среды, как предложил MrWonderful. Тем не менее, я хотел бы, чтобы настройки хостов одного пользователя не затрагивались, а другой пользователь.

Мысли?

Мне все еще любопытно, какую пользу это может дать, что не может быть реализовано с помощью программных средств.
HOSTALIASES=$HOME/hosts sudo -E dtruss ping foobarпоказывает, что открыт только файл /etc/hosts. HOSTFILE=$HOME/hostsимеет тот же результат. На hosts(5)справочной странице указано только /etc/hostsчтение. На hostname(7)справочной странице указано, HOSTALIASESчто используется. Ох, еще сломанное программное обеспечение Apple.

Ответы (1)

Если вы управляете однопользовательской средой, такой как общий MacBook, вы потенциально можете сделать так, чтобы .bashrc каждого пользователя скопировал базовый файл hosts , а затем добавил его собственный файл в конец. Например:

sudo cp /etc/common_hosts /etc/hosts  
sudo cat ~/my_hosts >> /etc/hosts

Это фактически даст каждому пользователю свои собственные дополнения к файлу hosts . Вы можете сделать так, чтобы для этих команд sudo не требовался пароль, используя команду sudo visudo и добавив их в разрешенные команды. Вот несколько примеров из нижней части моего файла sudoers :

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now  

В OS X файл /etc/hosts, по-видимому, читается динамически, поэтому нет необходимости перезапускать сетевые службы.

mbp-c17189:~ root# ping goog
ping: cannot resolve goog: Unknown host
mbp-c17189:~ root# ping google.com
PING google.com (172.217.4.238): 56 data bytes
64 bytes from 172.217.4.238: icmp_seq=0 ttl=49 time=4306.507 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 1 packets received, 50.0% packet loss
round-trip min/avg/max/stddev = 4306.507/4306.507/4306.507/0.000 ms
mbp-c17189:~ root# echo 172.217.4.238     goog>>/etc/hosts
mbp-c17189:~ root# ping goog
PING goog (172.217.4.238): 56 data bytes
64 bytes from 172.217.4.238: icmp_seq=0 ttl=49 time=43.639 ms
^C
--- goog ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 43.639/43.914/44.189/0.275 ms
mbp-c17189:~ root# 
Итак, как вы справляетесь с этим, когда два человека входят в систему одновременно?
Мой ответ будет применяться только к сценарию с одним пользователем за раз, например, на Macbook. В общей среде это не сработало бы вообще.
@Allan - Какова твоя настоящая цель? Возможно, если бы вы привели более конкретный пример, это облегчило бы более глубокое понимание предметной области. В частности, почему для некоторых записей разным пользователям потребуются разные имена или IP-адреса.
Это близко к тому, что я преследовал. Я действительно хотел оставить основной файл hosts в покое, чтобы настройка hosts для каждого пользователя применялась только к ним, но тем не менее это полезно.
Не моя цель ... Я просто не вижу в этом жизнеспособного решения, учитывая, что вам придется предоставлять доступ sudo пользователям, возможно, без пароля. Что будет запрашивать у них пароль каждый раз при редактировании хост-файла?
@Allan - неправда, /etc/hosts читается динамически
@Allan - используя «visudo», вы можете перечислить обычные команды sudo, которые не требуют sudo или пароля. Пользователям вообще не потребуется пароль root.