В качестве инструмента, который поможет вам найти виновника, вот 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
Надеюсь, это скажет вам, какой процесс перезаписывает файл. Просто позвольте ему работать в окне терминала, пока не сработает.
</speculation>