He estado intentando configurar launchd para bloquear varios sitios web en OS X 10.11.6
los /etc/hosts
la lista se cambia según lo programado, pero un navegador todavía puede acceder a los sitios bloqueados.
Otro comportamiento extraño es que launchd parece ejecutar los comandos cuando carga el plist, pero no ejecuta los comandos durante el tiempo programado.
Algunos usuarios de Google sugirieron que podría necesitar restablecer el caché de DNS:
sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder
Cuando lo ejecuto desde la línea de comandos, todavía puedo acceder a los sitios que deberían estar bloqueados. Tampoco sé cómo agregar esto a los argumentos del programa launchd plist si funcionara.
$ cat /Library/LaunchDaemons/local.hosts.blockingAM.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.hosts.blockingAM</string>
<key>ProgramArguments</key>
<array>
<string>cp</string>
<string>/etc/hosts_BLOCKED_sites.txt</string>
<string>/etc/hosts</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>1</integer>
</dict>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>2</integer>
</dict>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute</key>
<integer>35</integer>
<key>Weekday</key>
<integer>3</integer>
</dict>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>4</integer>
</dict>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>5</integer>
</dict>
</array>
<key>StandardErrorPath</key>
<string>/tmp/local.hosts.blocking.err</string>
<key>StandardOutPath</key>
<string>/tmp/local.hosts.blocking.out</string>
</dict>
</plist>
Aquí están los permisos:
$ ls -la /Library/LaunchDaemons/local.hosts.blockingAM.plist
-rw-r--r--@ 1 root wheel 1474 Sep 8 09:33 /Library/LaunchDaemons/local.hosts.blockingAM.plist
Carga la lista con:
$ sudo launchctl load /Library/LaunchDaemons/local.hosts.blockingAM.plist
No hay errores registrados:
$ cat /tmp/local.hosts.blocking.err
Aquí está el archivo que contiene los sitios bloqueados:
$ cat /etc/hosts_BLOCKED_sites.txt
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
# Blocked sites redirected to 0.0.0.0
0.0.0.0 reddit.com www.reddit.com
0.0.0.0 facebook.com www.facebook.com
¿Qué estoy haciendo mal?
dnsmasq
Es impresionante para la prohibición de dominio, incluso la prohibición de comodines.Respuestas:
¿Has revisado tu
/etc/hosts
¿Para estar seguro de que está siendo modificado? Como prueba, dejé caer127.0.0.1 foo.com www.foo.com
en mi/etc/hosts
y trató de cargar el sitio; Inmediatamente fue a localhost como se esperaba. Puede que no estés haciendo nada malo con el/etc/hosts
código en absoluto; sin embargo, hay una buena posibilidad de que los cambios que solicita nunca lleguen al archivo en primer lugar.Yo tambien lo intentaria
mv
en lugar decp
.mv
no cambiará los permisos de los archivos, simplemente desvincula el destino y cambia el nombre de la fuente: por lo tanto, deberá recordar intercambiar primero (por ejemplo,mv /etc/hosts /etc/hosts_default && mv /etc/hosts_BLOCKED_sites.txt /etc/hosts
, invierta el orden cuando desee desbloquear, recuerde vaciar la caché de DNS después de cada cambio y asegúrese de que/etc/hosts_BLOCKED_sites.txt
tiene los mismos permisos / propiedad que/etc/hosts
antes de empezar)fuente