#! /bin/bash # # Unfortunately, macOS's devfs is based on the old FreeBSD # one, not the current one, so there's no way to configure it # to create BPF devices with particular owners or groups. BPF # devices on macOS are also non-cloning, that is they can # be created on demand at any time. This startup item will # pre-create a number of BPF devices, then make them owned by # the access_bpf group, with permissions rw-rw----, so that # anybody in the access_bpf group can use programs that capture # or send raw packets. # # Change this as appropriate for your site, e.g. to make # it owned by a particular user without changing the permissions, # so only that user and the super-user can capture or send raw # packets, or give it the permissions rw-r-----, so that # only the super-user can send raw packets but anybody in the # admin group can capture packets. # # Pre-create BPF devices. Set to 0 to disable. FORCE_CREATE_BPF_MAX=256 SYSCTL_MAX=$( sysctl -n debug.bpf_maxdevices ) if [ "$FORCE_CREATE_BPF_MAX" -gt "$SYSCTL_MAX" ] ; then FORCE_CREATE_BPF_MAX=$SYSCTL_MAX fi syslog -s -l notice "ChmodBPF: Forcing creation and setting permissions for /dev/bpf*" CUR_DEV=0 while [ "$CUR_DEV" -lt "$FORCE_CREATE_BPF_MAX" ] ; do # Try to do the minimum necessary to trigger the next device. read -n 0 < /dev/bpf$CUR_DEV > /dev/null 2>&1 CUR_DEV=$(( $CUR_DEV + 1 )) done chgrp access_bpf /dev/bpf* chmod g+rw /dev/bpf*