8 votes

Comment empêcher InternetSharing d'écraser le fichier /etc/bootpd.plist ?

J'ai mis en place un /etc/bootpd.plist afin de protéger mon réseau sans fil, et pour gérer les adresses IP attribuées statiquement.

Malheureusement, quand je commence InternetSharing ce fichier est écrasé par un plist dont je n'ai pas trouvé la source.


Comment puis-je éviter InternetSharing en écrasant ce fichier ?

Où est la source de cet écrasement de fichier ? /etc/bootpd.plist ?

13voto

Rich Points 2429

Source du problème

En étudiant les processus engendrés par InternetSharing (avec l'aide de opensnoop et déboguer les scripts) J'ai finalement construit un moyen de contourner cette écrasement systématique et stupide de /etc/bootpd.plist .

InternetSharing crée une /etc/bootpd.plist et ensuite génère 2 processus :

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

Solution

J'ai remplacé le bootpd original par un simple shell script chargé de mettre ma source de /etc/bootpd.plist en place avant de tirer le original bootpd code. Bien sûr, la plupart de ces commandes doivent être exécutées en tant que 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

Les 2 tableaux allow y deny Laissez-moi définir exactement quel MAC je vais accepter dans mon réseau partagé et celles que je vais bannir. bannir.

Cette protection est loin d'être à l'épreuve des balles, mais elle est meilleure que la l'absence totale de protection fournie par InternetSharing sur un réseau Fi-fi WEP :). WEP :).


Compatibilité avec les mises à jour du système d'exploitation

Pour éviter tout problème avec une mise à jour de l'OS qui pourrait corriger /usr/libexec/bootpd Voici le shell script que j'exécute avant toute mise à jour du système d'exploitation :

/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é avec les versions du système d'exploitation

Ce shell script travaille sur :

  • Lion
  • Mountain Lion
  • Mavericks
  • Yosemite

Enquête sur les attaques

Avec l'option -v transmis à bootpd J'ai une liste d'adresses MAC qui ont tenté de demander une adresse IP mais ont été rejetées.

Pour passer cette option -v à bootpd, je l'ai inséré dans mon bootpd l'emballage :

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

0 votes

Ce qu'il faut faire, c'est : 1. créer un fichier avec le contenu du post (partie script). 2. exécuter en tant que Root (su, peut être activé à partir de Directory Utility dans MacOS). 3. exécuter le script.

0 votes

J'ai aussi dû désactiver la protection de l'intégrité du système stackoverflow.com/a/49584263/611055

2 votes

S'il vous plaît ajouter une note en gras que script ne peut pas être exécuté deux fois Cela pourrait faire gagner du temps à quelqu'un

1voto

Bakhtiyor Points 930

J'ai essayé l'astuce de remplacement de script ci-dessus et je l'ai trouvée très utile ! Merci beaucoup !

Dans ma configuration, la seule exigence supplémentaire était de changer le fichier bootpd.plist de :

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

à :

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

ce qui ouvre instantanément le support DNS à mes clients DHCP.

Je pense qu'il faut remarquer que toute modification ultérieure de la configuration du partage d'Internet nécessitera une modification supplémentaire du fichier "/etc/bootpd.plist.src" en le copiant à partir du fichier "/etc/bootpd.plist" actuel.

De toute façon, le conflit existant depuis longtemps entre le Partage d'Internet et Server.app concernant le service DHCP sera résolu de toute urgence dans les versions ultérieures de Mountain Lion Server !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X