linux - usuario - ¿Cómo edito/etc/sudoers desde un script?
sudoers linux (11)
Necesito editar / etc / sudoers de una secuencia de comandos para agregar / eliminar cosas de las listas blancas.
Asumiendo que tengo un comando que funcionaría en un archivo normal, ¿cómo podría aplicarlo a .etc / sudoers?
¿Puedo copiarlo y modificarlo, y luego tener visudo reemplazar el original con la copia modificada? Al proporcionar mi propio script en EDITOR?
¿O puedo usar los mismos bloqueos y cp?
La pregunta es más sobre problemas potenciales que sobre simplemente encontrar algo que funcione.
Configure un editor personalizado. Básicamente será una secuencia de comandos que acepte el nombre de archivo (en este caso /etc/sudoers.tmp) y modifique y guarde eso en su lugar. Entonces podrías escribir en ese archivo. Cuando haya terminado, salga de la secuencia de comandos y visudo se encargará de modificar el archivo real sudoers por usted.
sudo EDITOR=/path/to/my_dummy_editor.sh visudo
Creo que la solución más directa es:
Crear una secuencia de comandos addsudoers.sh
#!/bin/bash
while [[ -n $1 ]]; do
echo "$1 ALL=(ALL:ALL) ALL" >> /etc/sudoers;
shift # shift all parameters;
done
y llámalo con los usuarios que quieras agregar como:
root prompt> ./addsudoers.sh user1 user2
Para la explicación completa, vea esta respuesta: Agregar usuarios a sudoers a través de script shell
¡Saludos!
Debe hacer sus ediciones en un archivo temporal, luego use visudo -c -f sudoers.temp para confirmar que los cambios son válidos y luego cópielo en la parte superior de / etc / sudoers
#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp
En Debian y sus derivados, puede insertar una secuencia de comandos personalizada en el directorio /etc/sudoers.d/
, con los derechos 0440
Para obtener más información, consulte /etc/sudoers.d/README .
Podría ayudar.
Esto funcionó para mí basado en lo que otros publicaron aquí. Cuando utilicé el script de otras personas, abriría visudo para mí, pero no haría la edición. Esto hizo la edición que necesitaba para permitir a todos los usuarios, incluidos los usuarios estándar, instalar java 7u17 para safari / firefox.
#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers
Esto agregó el% de todos, bla, bla, bla, al final del archivo sudoers. Tenía que ejecutar el script de esta manera.
sudo sh sudoersedit.sh
Buena suerte: D
Intenta repetirlo. Sin embargo, tienes que ejecutarlo en una subcategoría. Ejemplo:
sudo sh -c "echo /"group ALL=(user) NOPASSWD: ALL/" >> /etc/sudoers"
Si su sudo permite agregar entradas en /etc/sudoers.d
, entonces puede usar esta respuesta por @ dragon788:
https://superuser.com/a/1027257/26022
Básicamente utilizas visudo para verificar el archivo antes de copiarlo en sudoers.d, así puedes estar seguro de que no estás rompiendo sudo para nadie.
visudo -c -q -f filename
Esto lo comprueba y devuelve success (0) si es válido, por lo que puede usarlo con if
, &&
y otras operaciones booleanas de scripts. Una vez que valide, simplemente cópielo en /etc/sudoers.d
y debería funcionar. Asegúrate de que sea propiedad de root y no pueda escribirlo otro.
Solo para agregar una opción más a las respuestas anteriores, si la condición de carrera no es una preocupación importante, entonces se puede usar el siguiente comando para evitar copiar manualmente un archivo modificado a /etc/sudoers
sudo EDITOR="cp /tmp/sudoers.new" visudo
Esto asegurará que el nuevo archivo esté validado e instalado correctamente con la actualización de permisos.
Tenga en cuenta que si hay un error en el archivo /tmp/sudoers.new
, entonces visudo
solicitará la entrada del usuario, por lo que es aconsejable verificarlo visudo -c -f /tmp/sudoers.new
con visudo -c -f /tmp/sudoers.new
.
Use visudo para esto con un editor personalizado. Esto resuelve todas las condiciones de carrera y "piratea" los problemas con la solución de Brian.
#!/bin/sh
if [ -z "$1" ]; then
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && sudo -E visudo
else
echo "Changing sudoers"
echo "# Dummy change to sudoers" >> $1
fi
Este script agregará la línea "# Dummy change to sudoers" al final de sudoers. Sin hacks y sin condiciones de carrera.
Versión anotada que explica cómo funciona esto en realidad:
if [ -z "$1" ]; then
# When you run the script, you will run this block since $1 is empty.
echo "Starting up visudo with this script as first parameter"
# We first set this script as the EDITOR and then starts visudo.
# Visudo will now start and use THIS SCRIPT as its editor
export EDITOR=$0 && sudo -E visudo
else
# When visudo starts this script, it will provide the name of the sudoers
# file as the first parameter and $1 will be non-empty. Because of that,
# visudo will run this block.
echo "Changing sudoers"
# We change the sudoers file and then exit
echo "# Dummy change to sudoers" >> $1
fi
Viejo hilo, pero ¿qué hay de:
echo ''foobar ALL=(ALL:ALL) ALL'' | sudo EDITOR=''tee -a'' visudo
visudo se supone que es la interfaz humana para editar /etc/sudoers
. Puede lograr lo mismo al reemplazar el archivo directamente, pero debe tener cuidado con la edición concurrente y la validación de sintaxis. Tenga en cuenta los r--r-----
permisos.