8 votos

Cómo evitar que InternetSharing sobrescriba /etc/bootpd.plist

He creado un /etc/bootpd.plist para proteger mi red inalámbrica y para gestionar las direcciones IP atribuidas estáticamente.

Desgraciadamente, cuando empiezo InternetSharing este archivo se sobrescribe por un plist del que no he encontrado la fuente.


¿Cómo puedo evitar InternetSharing ¿sobreescribir este archivo?

¿Dónde está la fuente de este archivo que sobrescribe /etc/bootpd.plist ?

13voto

Rich Puntos 2429

Origen del problema

Al estudiar los procesos generados por InternetSharing (con la ayuda de opensnoop y depuración de shell scripts) finalmente construyo un manera de evitar esta sistemática y estúpida sobreescritura de /etc/bootpd.plist .

InternetSharing crea un mínimo de /etc/bootpd.plist y luego genera 2 procesos:

/usr/libexec/bootpd
/usr/libexec/natpmpd

Solución

He sustituido el bootpd original por un simple shell script encargado de poner mi fuente de /etc/bootpd.plist en su lugar antes de disparar el original bootpd código. Por supuesto, la mayoría de estos comandos tienen que ser ejecutar como root .

/usr/bin/sudo -s    
cd /usr/libexec

# make a backup copy of the original binary bootpd
mv bootpd bootpd.orig

# create the shell script which will first install the wanted
# bootpd.plist and then fire the original bootpd with the
# correctly quoted original list of arguments "$@"
cat >bootpd <<eof
#!/bin/sh
cp /etc/bootpd.plist.src /etc/bootpd.plist
exec /usr/libexec/bootpd.orig "$@"
eof

# make this shell script executable
chmod 755 bootpd

cd /etc

# create the "source" bootpd.plist.src which will be copied every
# time by the above shell script and will cancel the copy made by
# "InternetSharing"
cat >bootpd.plist.src <<eof
<?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>allow</key>
    <array>
            <string>00:00:00:00:00:00</string>
            <string>...
    </array>
    <key>deny</key>
    <array>
            <string>...
    </array>
    <key>Subnets</key>
    <array>
            <dict>
                    <key>_creator</key>
                    <string>dan</string>
                    <key>allocate</key>
                    <true/>
                    <key>dhcp_router</key>
                    <string>10.0.2.1</string>
                    <key>lease_max</key>
                    <integer>86400</integer>
                    <key>lease_min</key>
                    <integer>86400</integer>
                    <key>name</key>
                    <string>10.0.2/24</string>
                    <key>net_address</key>
                    <string>10.0.2.0</string>
                    <key>net_mask</key>
                    <string>255.255.255.0</string>
                    <key>net_range</key>
                    <array>
                            <string>10.0.2.2</string>
                            <string>10.0.2.31</string>
                    </array>
            </dict>
    </array>
    <key>bootp_enabled</key>
    <false/>
    <key>detect_other_dhcp_server</key>
    <true/>
    <key>dhcp_enabled</key>
    <array>
            <string>en1</string>
    </array>
    <key>use_server_config_for_dhcp_options</key>
    <false/>
</dict>
</plist>
eof

Las 2 matrices allow y deny me permite definir exactamente qué direcciones MAC aceptaré dentro de mi red compartida y cuáles desterraré. desterraré.

Esta protección está lejos de ser a prueba de balas, pero es mejor que la total falta de protección proporcionada por InternetSharing en una red WEP Fi-fi :).


Compatibilidad con las actualizaciones del sistema operativo

Para evitar cualquier problema con cualquier actualización del sistema operativo que pueda arreglar /usr/libexec/bootpd Aquí está el shell script que ejecuto antes de cualquier actualización del sistema operativo:

/usr/bin/sudo -s    
cd /usr/libexec

# reset into place the backup copy of the original binary bootpd
mv bootpd.orig bootpd

# go back to a safe working uid
exit

Compatibilidad con las versiones del sistema operativo

Este shell script está trabajando:

  • Lion
  • Mountain Lion
  • Mavericks
  • Yosemite

Encuesta sobre ataques

Con la opción -v pasado a bootpd Tengo un registro de direcciones MAC que intentaron solicitar una dirección IP pero fueron rechazadas.

Para pasar esta opción -v a bootpd lo inserté en mi bootpd envoltura:

#!/bin/sh
cp /etc/bootpd.plist.src /etc/bootpd.plist
exec /usr/libexec/bootpd.orig -v "$@"

0 votos

Lo que hay que hacer es 1. crear un archivo con el contenido del post (scriptparte). 2. ejecutar como Root (su, se puede habilitar desde la utilidad de directorios en MacOS). 3. ejecutar el script.

0 votos

También tuve que desactivar la protección de la integridad del sistema stackoverflow.com/a/49584263/611055

2 votos

Por favor, añada una nota en negrita que script no se puede ejecutar dos veces.. Podría ahorrarle tiempo a alguien

1voto

Bakhtiyor Puntos 517

¡Probé el truco de reemplazo de script arriba y lo encontré muy útil! ¡Muchas gracias!

En mi configuración el único requisito adicional era cambiar el bootpd.plist de:

<key>use_server_config_for_dhcp_options</key>
<false/>

a:

<key>use_server_config_for_dhcp_options</key>
<true/>

lo que abre instantáneamente el soporte DNS a mis clientes DHCP.

Supongo que hay que tener en cuenta que cualquier cambio posterior de la configuración de la compartición de Internet requerirá un cambio adicional del "/etc/bootpd.plist.src" copiando del actual "/etc/bootpd.plist".

En cualquier caso, el conflicto existente desde hace tiempo entre Compartir Internet y Server.app relacionado con el servicio DHCP se resolverá urgentemente en las versiones posteriores de Mountain Lion Server.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X