2012-01-09 19 views
18

¿Es posible agregar usuarios al archivo sudoers a través de un script de shell? He estado mirando alrededor, todavía no puedo encontrar nada.Agregar usuarios a sudoers mediante script de shell

+1

No estoy seguro de entender la conexión, ¿por qué necesitarías agregar usuarios a sudoers para poder ejecutar Ruby? –

+0

Nada que ver con Ruby. La secuencia de comandos que estoy ejecutando dentro de ruby, requiere que se ejecute ruby ​​con los permisos sudo, de ahí la razón de sudo. No se preocupe por la parte ruby, se trata de la edición de sudoers – nickw444

+0

¿Tendría más sentido agregar una sola entrada de grupo a '/ etc/sudoers', y agregar usuarios a ese grupo en lugar de actualizar repetidamente los' sudoers 'archivo? –

Respuesta

39

simplemente podría echo (con privilegios elevados, por supuesto) directamente en el archivo /etc/sudoers:

sudo -i 
echo 'nickw444 ALL=(ALL:ALL) ALL' >> /etc/sudoers 
#    ^^ 
#    tab 

(tenga en cuenta el carácter de tabulación entre el usuario y el primer ALL)

O, para una guión:

#!/bin/bash 
# Run me with superuser privileges 
echo 'nickw444 ALL=(ALL:ALL) ALL' >> /etc/sudoers 

a continuación, guardar somefile.sh, chmod a+rx, y ejecutar sudo ./somefile.sh desde una ventana de terminal.

Para agregar varios usuarios, cambie la secuencia de comandos a esto;

#!/bin/bash 

while [[ -n $1 ]]; do 
    echo "$1 ALL=(ALL:ALL) ALL" >> /etc/sudoers; 
    shift # shift all parameters; 
done 

A continuación, ejecute la secuencia de comandos como esto (suponiendo que lo guardó como addsudousers.sh):

sudo ./addsudousers.sh bob joe jeff 

es decir, separada por espacios.

para leer los nombres de un archivo:

[email protected] ~ $ sudo ./addsudousers.sh `cat listofusers.txt` 

listofusers.txt también deben estar separados por espacios.

Editar: Jappie Kirk rightly points out que no se puede llamar directamente sudo echo ... >> /etc/sudoers debido a que el cambio de dirección >> está a cargo de la cáscara, que tiene en ese momento bajó los privilegios de superusuario. Sin embargo, si ejecuta un script que contiene echo ... >> /etc/sudoers y el script en sí tiene privilegios de superusuario, todo debería funcionar bien.

+0

Funcionó perfectamente Muchas gracias – nickw444

+1

'sudo echo' no funciona, ver: https://blogs.oracle.com/joshis/entry/sudo_echo_does_not_work También por defecto el archivo sudoers es readonly –

+0

@Jappie: OP dijo" funcionó perfectamente ", así que No estoy seguro de cuál es el problema para ti. Tal vez eche un vistazo a ["¿Cómo puedo editar/etc/sudoers desde un script?"] (Http://stackoverflow.com/q/323957/732016)? – wchargin

4

También está el grupo sudo, y se podía añadir usuarios a la misma (para las configuraciones comunes de /etc/sudoers)

5

No, un eco directo no funcionará, hay que ejecutarlo en un subnivel. Tal vez puedas probar:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"

+0

eso es todo, el permiso 0440 del archivo sudoers impide hacer eso – pylover

-1

de sesión como root en su máquina. El usuario raíz es el único que tiene el privilegio de agregar un nuevo usuario.

Una vez que ha entrado en, ahora se puede tratar de los siguientes comandos a continuación:

  1. crear un nuevo usuario.

    adduser [nombre de usuario]

  2. añadir una contraseña al usuario

    passwd [nombre de usuario]

  3. privilegios de root Grant usuario Editar el archivo visudo simplemente escribiendo

    Introducir código aquí

Encuentre la siguiente línea de código: raíz ALL = (ALL) ALL

A continuación, agregue el código a continuación:

[username] ALL=(ALL) ALL 

El post original se encuentra en este enlace Centos 6 – Creating sudoers user

0

Otras respuestas tales como engendrar una subshell funcionará, pero puede no funcionar si quieres usar vars medioambientales. Una alternativa que encontré jugó muy bien para mí:

echo "%<user>  ALL=(ALL) ALL" | sudo tee -a /etc/sudoers > /dev/null 

Dicho esto, la retrospección es 20/20 ... Si se está modificando sudoers a través de un guión y no a través de visudo recomendaría seriamente la creación de una copia de seguridad con el archivo correcto permisos y contenidos primeros ya que se puede perder el acceso a los derechos sudo sin pkexec, el acceso físico o un reinicio, etc.

sudo cp /etc/sudoers /etc/sudoers.bak 
1

en RedHat base distribuciones usan:

su - root 

e introduzca su contraseña y, a continuación:

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

para agregar el usuario en el archivo sudoers.

+0

https: //access.redhat. com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html –

Cuestiones relacionadas