Come smettere di InternetSharing sovrascrivendo /etc/bootpd.plist

6

Ho impostato un /etc/bootpd.plist in modo da proteggere la mia rete wireless, e per gestire gli indirizzi IP attribuiti staticamente.

Sfortunatamente, quando inizio InternetSharing , questo file viene sovrascritto da un plist che non ho trovato la fonte di.

Come posso evitare InternetSharing di sovrascrivere questo file?

Dove si trova la fonte di questo file che sovrascrive /etc/bootpd.plist ?

    
posta daniel Azuelos 26.03.2012 - 00:32
fonte

2 risposte

9

Origine del problema

Studiando i processi generati da InternetSharing (con l'aiuto di opensnoop e eseguendo il debug degli script di shell) ho finalmente costruito un modo per aggirare questa sovrascrittura sistematica e stupida di /etc/bootpd.plist .

InternetSharing crea un /etc/bootpd.plist minimo e poi genera 2 processi:

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

Soluzione

Ho sostituito il bootpd originale con un semplice script di shell mettere la mia fonte di /etc/bootpd.plist sul posto prima di sparare al codice originale bootpd . Naturalmente la maggior parte di questi comandi deve essere eseguito come 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

Le 2 matrici allow e deny consentono di definire esattamente quale MAC indirizzi accetterò all'interno della mia rete condivisa e quale io banish.

Questa protezione è tutt'altro che a prova di proiettile, ma è migliore della totale mancanza di protezione fornita da InternetSharing su un WEP Fi-fi rete:).

Compatibilità con gli aggiornamenti del sistema operativo

Per evitare problemi con qualsiasi aggiornamento del sistema operativo che potrebbe correggere /usr/libexec/bootpd , ecco lo script della shell che eseguo prima di qualsiasi aggiornamento 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

Compatibilità con le versioni del sistema operativo

Questo script di shell sta funzionando su:

  • Lion
  • Mountain Lion
  • Mavericks
  • Yosemite

Sondaggio di attacco

Con l'opzione -v passata a bootpd , ho una registrazione degli indirizzi MAC che ha tentato di richiedere un indirizzo IP ma sono stati respinti.

Per passare questa opzione -v a bootpd l'ho inserita nel mio wrapper bootpd :

#!/bin/sh
cp /etc/bootpd.plist.src /etc/bootpd.plist
exec /usr/libexec/bootpd.orig -v "$@"
    
risposta data 24.04.2012 - 00:45
fonte
1

Ho provato il trucco di sostituzione della sceneggiatura sopra e l'ho trovato molto utile! Mille grazie!

Nella mia configurazione l'unico requisito aggiuntivo era cambiare il bootpd.plist da:

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

a:

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

ciò che apre immediatamente il supporto DNS ai miei client DHCP.

Suppongo che uno dovrebbe notare che qualsiasi modifica successiva della configurazione di Condivisione Internet richiederà una modifica aggiuntiva di "/etc/bootpd.plist.src" copiando dall'attuale "/etc/bootpd.plist".

In qualsiasi modo il conflitto esistente più lungo tra Condivisione Internet e Server.app relativo al servizio DHCP deve essere risolto urgentemente nelle versioni successive di Mountain Lion Server!

    
risposta data 29.12.2012 - 15:36
fonte

Leggi altre domande sui tag