Eu sei que isso já foi respondido, mas encontrei essa pergunta ao pesquisar e a resposta proposta não era apropriada para o meu caso.
Eu consegui rodar o dhcpd como um usuário normal, atribuindo capacidades especiais ao binário do dhcpd:
sudo setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW=+ep $(which dhcpd)
Veja uma pequena descrição dos recursos atribuídos:
CAP_NET_BIND_SERVICE allows binding ports lower than 1024
CAP_NET_RAW allows using RAW and Packet sockets and address binding (for LPF socket).
veja man capabilities
para uma descrição estendida. Mais tarde consegui executar o dhcpd da seguinte forma:
Triglav-Control-Engine-1v1% sudo setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW=+ep $(which dhcpd)
Triglav-Control-Engine-1v1% dhcpd -4 -f -d -s 169.254.13.1 -cf dhcpd.conf -lf leases
Internet Systems Consortium DHCP Server 4.3.4
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: dhcpd.conf
Database file: /home/roosemberth/.config/dhcpd/leases
PID file: /var/run/dhcpd.pid
Source compiled to use binary-leases
Wrote 0 leases to leases file.
Listening on LPF/enp0s31f6/<MAC>/169.254.13.0/24
Sending on LPF/enp0s31f6/<MAC>/169.254.13.0/24
Sending on Socket/fallback/fallback-net
Can't create PID file /var/run/dhcpd.pid: Permission denied.
Server starting service.
DHCPDISCOVER from 50:7b:9d:af:e8:59 via enp0s31f6