Claro. Você pode simplesmente descartar arquivos em /etc/sudoers.d em vez de editar o próprio arquivo sudoers:
cat > /etc/sudoers.d/apache <<EOF
User_Alias APACHE = www-data
Cmnd_Alias FIREWALL = /sbin/iptables, /sbin/ifconfig, /sbin/route
APACHE ALL = (ALL) NOPASSWD: FIREWALL
EOF
chmod 440 /etc/sudoers.d/apache
E eu acho que se você estivesse preso a um sudo realmente antigo sem suporte para o diretório sudoers.d , poderia concatenar isso para /etc/sudoers :
if ! grep -q APACHE /etc/sudoers; then
cat >> /etc/sudoers <<EOF
User_Alias APACHE = www-data
Cmnd_Alias FIREWALL = /sbin/iptables, /sbin/ifconfig, /sbin/route
APACHE ALL = (ALL) NOPASSWD: FIREWALL
EOF
fi
(O if ! grep -q ... está lá para evitar concatenar isso várias vezes se o script for executado mais de uma vez)