/ etc / hosts перезаписывается

14

Как правильно редактировать /etc/hosts? Я хочу добавить к нему несколько IP-адресов и имен хостов. Он работает некоторое время (несколько часов), а затем возвращается к исходной версии. Есть ли какой-нибудь процесс, проверяющий состояние /etc/hostsи возвращающий его обратно?

Я учусь на MBA с Mountain Lion.

Мохаммад Могими
источник
FWIW, это не происходит со мной. У меня есть запись в / etc / hosts на компьютере в моей частной сети (адрес 10.0.0.2), который никогда не удалялся системой. Но, возможно, он оставляет адреса в локальных сетях (10/8, 172.16 / 12 и 192.168 / 16 - см. RFC 1918 ) в одиночку и удаляет адреса, указывающие на глобальные адреса IPv4? </speculation>
Харальд Ханче-Олсен
На самом деле, я добавил некоторые записи некоторое время назад, и они остались. Новые удаляются. Оба находятся в похожих подсетях.
Мохаммад Могими
Удалось ли вам определить, какой процесс изменяет файл? Такой инструмент, как fseventer, может помочь вам понять, что редактирует файл. Так как он обычно принадлежит root: wheel - список программ, которые могут редактировать файл, должен быть довольно маленьким. Вы также можете просто установить флаг неизменяемости в файле и избежать необходимости отмены изменений.
bmike

Ответы:

10

В качестве инструмента, который поможет вам найти виновника, вот dtrace oneliner, который печатает pid и имя любого процесса, открывающего файл для записи, вместе с именем файла:

dtrace -qn 'syscall::open*:entry /arg1&3/ { printf("%d %s %s\n", pid, execname, copyinstr(arg0)); }'

Он должен быть запущен от имени пользователя root (например, с помощью sudo). Пропустите это, grep hostsчтобы не утонуть в выходных данных и не пропустить то, что вы ищете:

sudo dtrace -qn 'syscall::open*:entry /arg1&3/ { printf("%d %s %s\n", pid, execname, copyinstr(arg0)); }' | grep hosts

Надеюсь, это скажет вам, какой процесс перезаписывает файл. Просто позвольте ему работать в окне терминала, пока не сработает.

Харальд Ханче-Олсен
источник
12

Если вы используете Juno Pulse VPN - клиент, /etc/hostsполучает перезаписан/etc/jnpr-pulse-hosts.bak

SKP
источник
8

Используете ли вы Cisco AnyConnect VPN-клиент? Если это так, вам нужно отредактировать файл /etc/hosts.ac и позволить ему скопировать его в оперативный файл. См. Эту статью MacOSXHints и эти предыдущие вопросы .

РЕДАКТИРОВАТЬ: Я не могу найти что-то конкретно о Janos Pulse, но Сетевой Коннектор Juniper's портит / etc / hosts, и я подозреваю, что Pulse может сделать то же самое. Согласно этому сообщению в блоге , если вы вносите изменения во время подключения, они будут отменены при отключении, но изменения, сделанные во время отключения, сохранятся.

Гордон Дэвиссон
источник
Нет, я не использую AnyConnect, также нет /etc/hosts.ac. Тем не менее, я использую другое прокси-программное обеспечение: Junos Pulse
Mohammad Moghimi
1
Я могу подтвердить это с помощью Junos Pulse 5.1.8. Изменения /etc/hostsдолжны быть сделаны при отключении, иначе вы потеряете их.
MisterEd
8

Для меня это в файле

/etc/pulse-hosts.bak

Вы должны отредактировать этот файл, чтобы настроить ваши директивы hosts

Когда вы собираетесь повторно подключиться / подключиться с помощью Pulse Secure VPN, он объединит директивы из

/etc/pulse-hosts.bak

с содержанием из директив Pulse и создает

/etc/hosts

2018 Обновление

С более новой версией Pulse Secure вы должны сначала выйти из программы (проверьте ваш активный процесс).

Измените ваш хост (/ etc / hosts) и затем перезапустите Pulse Secure.

Станислав Ничини
источник
-1

Я не смог использовать быстрый запуск cloudera VM после входа в VPN. Чтобы решить эту проблему, я следовал ниже шагов.

Шаг 1: Добавьте запись, /private/etc/hostsнапример, для

127.0.0.1 quickstart.cloudera

Шаг 2: Войдите в VPN, например, если я использую F5 VPN

Шаг 3: Проверьте вышеупомянутую запись, /etc/hostsиспользуя команду ниже

кошка / etc / hosts

Я надеюсь, что это будет полезно.

Шреяш Лимбетвала
источник
Как это решает проблему, описанную в вопросе, а именно «что-то» перезаписывая /etc/hosts?
холме
Привет @nohillside, я добавил 127.0.0.1 quickstart.clouderaзапись в свой /etc/hostsфайл, но он был удален / переопределен, когда я подключался к VPN. Чтобы добавить 127.0.0.1 quickstart.clouderaзапись навсегда, я добавил ее в /private/etc/hostsфайл. Внутренне, когда вы пытаетесь подключиться к VPN, он копирует все записи из /private/etc/hostsв /etc/hosts. Я надеюсь, что это имеет смысл сейчас.
Шреяш Лимбетвала
Привет @nohillside, Просто к вашему сведению ... Я использую клиент F5 Big-IP Edge и у меня Mac OS.
Shreyash Limbhetwala
На macOS /etcесть символическая ссылка на private/etcso /etc/hostsи /private/etc/hostsфактически один и тот же файл (запустить ls -li /etc/hosts /private/etc/hostsдля проверки).
холме
1
Вы правы @nohillside, но после добавления записи /private/etc/hostsмоя проблема была решена, а также после подключения к VPN моя запись не стирается / переопределяется.
Шреяш Лимбетвала
-1

При изменении файла / etc / hosts убедитесь, что вы НЕ подключены к VPN (по крайней мере, если вы используете Network Connect by Juniper Networks.)

Как описано в https://mcphersonz.wordpress.com/2009/11/12/etchosts-file-is-reverting-to-a-previous-state-in-os-x/

Мишель
источник
1
На этот вопрос есть принятый ответ шесть лет назад. Оригинальный пост не упоминает VPN в использовании. Хотя ваш вопрос может быть полезен для других пользователей, которые сталкиваются с этой проблемой при использовании VPN (особенно из сети Jupiter Networks), он не имеет отношения к оригинальному сообщению.
IconDaemon
@IconDaemon Спасибо за теплый прием. То, что это было 6 лет назад, не имеет значения, потому что страница все еще является первым хитом в поисковой системе. Кроме того, в 4 других ответах уже упоминалось, что VPN может вызвать точно такую ​​же проблему (как в моем собственном случае), даже если принятый ответ, казалось, решил проблему для OP. Тем не менее, даже он признает в комментарии к Гордону, что он использовал VPN (Junos Pulse). Может быть, вы были правы, чтобы отклонить мой ответ, потому что отключение VPN уже упоминалось в обновлении ответа Станислава (но это не то, что вы говорите).
Мишель