3 votos

Eliminar a los sudocentes usando script

En este momento estoy trabajando en una solución para evitar que todos los usuarios de administración (excepto uno en particular) se ejecuten sudo . Puedo añadir un usuario específico a los sudocentes corriendo:

sudo -i
echo '$username  ALL=(ALL:ALL) ALL' >> /etc/sudoers

Entonces me gustaría quitar %admin ALL = (ALL) ALL dentro del archivo de los sudoers, lo que dejaría al administrador anterior como el único administrador de sudo. Sin embargo, no puedo encontrar una manera de eliminar o reemplazar una cadena en particular dentro de los sudoers.

Me gustaría convertir esto en un script por lo que usar visudo y ajustar manualmente no me funcionará. Si hubiera una forma de ejecutar visudo desde script y ajustar una línea en particular dentro de los sudocentes sería ideal, pero no pude encontrar nada al investigar en la Web.

He visto una solución aquí:

que funciona en Linux. ¿Es posible hacer que funcione en MacOS?

3voto

Por si sirve de algo, puedes usar

printf '/^%%admin ALL = (ALL) ALL$/d\nw\nq\n' | ed -s sudoers

o, si quieres atrapar la línea independientemente del número de caracteres de espacio, tabuladores, etc. utilizados

printf '/^%%admin[[:blank:]]*ALL[[:blank:]]*=[[:blank:]]*(ALL)[[:blank:]]*ALL$/d\nw\nq\n' | ed sudoers 

en bash para eliminar la línea de administración (la doble %% se requieren para prevenir printf de interpretarlas como instrucciones de formato).

Las advertencias habituales sobre la edición sudoers sin depender de las comprobaciones de sintaxis realizadas por visudo aplicar. Así que podría ser más seguro ejecutar lo siguiente, o por lo menos tener otro Root Shell ejecutándose para poder arreglar cualquier problema sin ser bloqueado)

cp /etc/sudoers /tmp
chmod +w /tmp/sudoers
printf '/^%%admin[[:blank:]]*ALL[[:blank:]]*=[[:blank:]]*(ALL)[[:blank:]]*ALL$/d\nw\nq\n' \
    | ed /tmp/sudoers
if visudo -c -f /tmp/sudoers; then
    echo "All well"
    mv -f /tmp/sudoers /etc/sudoers
    chmod -w /etc/sudoers
else
    echo "Uups, something went wrong"
fi

(script sin ensayar, porque no quiero meterme con mi sudoers archivo)

2voto

Michael Zhou Puntos 167

Aquí hay un método alternativo. Las líneas no se añaden ni se borran del archivo de los sudoers. La línea que le da al administrador los derechos de root es comentada y creamos un archivo separado con los derechos de mac_admin en el directorio /etc/sudoers.d. Y como bonus, se hace una copia de seguridad del archivo sudoers original.

printf '%s\n' 'mac_admin  ALL=(ALL:ALL) ALL' > /tmp/99-macadmin

visudo -c -f /tmp/99-macadmin &&
install -o 0 -g 0 -m 440 /tmp/99-macadmin /etc/sudoers.d

sed $'s/%admin\t/# %admin/' /etc/sudoers > /tmp/sudoers

visudo -c -f /tmp/sudoers &&
install -B .orig -b -o 0 -g 0 -m 440 /tmp/sudoers /etc/sudoers

rm /tmp/sudoers /tmp/99-macadmin

1voto

merkeesox Puntos 36

¡Increíble! ¡Funcionó! ¡Muchas gracias! @nohillside

Añadiré una línea por encima de eso para añadir un usuario mac_admin antes de que se ejecute el script para que la versión final tenga este aspecto.

echo 'mac_admin  ALL=(ALL:ALL) ALL' >> /etc/sudoers

cp /etc/sudoers /tmp
chmod +w /tmp/sudoers
printf '/^%%admin.*ALL = (ALL) ALL$/d\nw\nq\n' | ed /tmp/sudoers
if visudo -c -f /tmp/sudoers; then
    echo "All well"
    mv -f /tmp/sudoers /etc/sudoers
    chmod -w /etc/sudoers
else
    echo "Uups, something went wrong"
fi

Para tu información, estoy ejecutando este script con el scoping a mi máquina en Jamf Pro para que se ejecute a través de una política de check-in recurrente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X