InicioLinuxUsando sudo (gnu/linux)

Usando sudo (gnu/linux)

Linux2/15/2012

Antes que nada me presento, soy nuevo en la comunidad y mi nombre es Martin, con objetivo del primer post y viendo que hay varios linuxeros me decidi a escribir un poco sobre el sistema "SUDO" y explicarlo un poco de forma practica =), espero que salga bien

Bueno, antes que nada vamos a tratar de explicar que es "sudo", seguramente como muchas veran de forma frecuente sirve para asignar "permisos de root", pero esto no es del todo cierto, sudo esta diseñado para manejar que permisos y para que cosas le damos a un usuario como otro usuario, o sea, partiendo de que todo en los sistemas tipo *nix se maneja por usuarios y grupos podriamos decir :

tenemos a usuario "A" y usuario "B", en sudo podemos decir que cosas va a poder hacer el usuario "A" como si fuera el usuario "B", para que nos sirve esto? por ejemplo para tareas administrativas o para permitir ciertas cosas puntuales, como por ejemplo al usuario "admin" permitirle ejecutar un navegador de archivos o cambiar las contraseñas de otros usuarios sin la necesidad de ser "root"

Para empezar hay que comentar que sudo es un programa que corre con el SUID de root, o sea cuando lo llamamos el mismo sudo tiene permisos de root y lee un archivo de configuracion que se encuentra por defecto en /etc/sudoers, por default el mismo contiene algo asi


# /etc/sudoers                                                                                                               
#                                                                                                                            
# This file MUST be edited with the 'visudo' command as root.                                                                
#                                                                                                                            
# See the man page for details on how to write a sudoers file.                                                               
#                                                                                                                            
                                                                                                                             
Defaults        env_reset                                                                                                    
                                                                                                                             
# Host alias specification                                                                                                   
                                                                                                                             
# User alias specification                                                            
                                                                                      
# Cmnd alias specification                                                            
                                                                                      
# User privilege specification                                                        
root    ALL=(ALL) ALL                                                                 
                                                                                      
# Allow members of group sudo to execute any command                                  
# (Note that later entries override this, so you might need to move                   
# it further down)                                                                    
%sudo ALL=(ALL) ALL                                                                   



Vamos a sacar los comentarios asi queda mas legible
                          
Defaults        env_reset                                                                                                    
root    ALL=(ALL) ALL                                                                 
%sudo ALL=(ALL) ALL                                                                   

vamos linea por linea, la primer linea define una politica que lo que hace es "vaciar" las variables locales, la segunda linea especifica lo siguiente:
El usuario root puede desde cualquier lado hacer cualquier cosa como cualquier usuario (cosa ya sabida )
Y la tercer linea dice a los miembros del grupo sudo se les permite hacer cualquier cosa como cualquier usuario (basicamente les damos permisos de root para lo que quieran)

Esto es recomendable cambiarlo un poco, veamos un ejemplo, en sudo va en la primer columna el "quien", en la segunda "desde donde" (esto es porque sudo se puede usar en red), despues del "=" y entre "()" va el "como quien" y al final el comando o la lista de comandos, asi por ejemplo podriamos decir:

martin ALL=(ALL) /usr/bin/passwd

asi diriamos que el usuario martin puede ejecutar como cualquier usuario el comando passwd (para cambiar contraseñas), pero esto podemos mejorarlo

martin ALL=(root) /usr/bin/passwd pepe

asi indicariamos que solamente puede cambiar la contraseña del usuario "pepe", de forma estricta , si quisieramos mas de un usuario podriamos usarlo de la siguiente forma

martin ALL=(root) /usr/bin/passwd pepe, /usr/bin/passwd juan

asi permitiriamos a martin ejecutar como root passwd para pepe y juan, pero bueno, si tuvieramos muchos usuarios esto seria bastante engorroso, por suerte podes usar una "denegacion" y decir que pueda cambiar cualquier contraseña salvo de la algunos usuarios puntuales, esto seria asi :

martin ALL=(root) /usr/bin/passwd [[\:alnum\:]]*, !/usr/bin/passwd root

donde martin podria cambiar cualquier contraseña excepto la de "root" (1)

Pero bien, todavia podemos hacer algunas cosas mas, como por ejemplo definir alias de usuarios para asignarles permisos a varias usuarios sin que tengan que estar en un mismo grupo, o definir alias de comandos para usarlos sin tener que escribirlos todos, veamos los dos

User_Alias          SUDOS = martin, pepe, juan
Cmnd_Alias        BASIC_OP = /usr/bin/ls, /usr/bin/rm, /etc/init.d/gdm

y ahora podemos usarlos libremente y hacer algo al estilo:

SUDOS     ALL=(ALL) BASIC_OP, !/usr/bin/rm -rf /

Bien, veamos un "sudoers"


User_Alias          SUDOS = martin, pepe, juan
Cmnd_Alias        BASIC_OP = /usr/bin/ls, /usr/bin/rm, /etc/init.d/gdm, /bin/kill, /usr/bin/apt-get, /usr/bin/apt-cache

root ALL = (ALL) ALL
SUDOS ALL= (root) BASIC_OP, !/usr/bin/rm -rf /
martin ALL=(pepe) /usr/bin/rm , (root) NOPASSWD: halt
control ALL=(SUDOS) ALL , !/bin/bash


bien, veamos algo nuevo, en una misma linea puedo especificar distintos usuarios con distintos comandos, no teniendo asi la necesidad de repetir siempre lo mismo ante distintas necesidades, asi como tambien puedo usar los alias definidos para dar permisos "como varios usuarios" y finalmente vemos ese extraño "NOPASSWD", eso hace que nunca se pida la contraseña del usuario, para que el comando se ejecute de forma directa =)

finalmente para usar sudo usamos "sudo comando" si la operacion es como root, en caso contrario necesitaremos usar "sudo -u usuario comando" (facilmente solucionable con un alias)

por ultimo y para terminar, si intentamos editar directamente el archivo "sudoers" nos dira que es de solo lectura, para editarlo recomiento usar visudo ya que comprueba si escribimos todo bien, si la pifiamos sudo quedara inutilizable y en caso de no tener root no podremos solucionarlo (ejemplo ubuntu que por default no trae pass de root)


1)  [:alnum:]  es una lista estandar que contiene todos los numeros y letras, las "\" son caracteres de escapes y el "*" indica que se repiten 0 o mas veces (o sea cualquier cosa que tenga letras y/o numeros)

Bueno, este es mi primer aporte, espero haber sido bastante claro y si bien es medio escueto (sudo da para mucho mas) espero que les sea de utilidad, cualquier recomendacion sera bien recibida

PD: las paginas de man siempre son un buen recurso y es muy amplia y explicativa sobre el sudoers
PD2: explicacion de la bomba fork :-P el famoso script que mata la pc


: (){: |:&};:


que hace esto?, si lo escribimos de forma larga

function : {
    : | :&
};


ahora escribamoslo mas entendible


#defino la funcion rompe en bash (metodo abreviado () )
rompe () {
#llamo a la funcion "rompe" y dirijo su salida a si misma , para completar la paso a segundo plano
rompe | rompe &
#termino de definir la funcion
};
#la llamo a si misma
rompe


como vemos se llama a si misma infinitamente duplicando los child en cada ejecucion y por eso mata el sistema =), para completar como se llama a si misma nunca devuelve el estado de salida
Datos archivados del Taringa! original
30puntos
316visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

t
tinchotgz🇦🇷
Usuario
Puntos0
Posts1
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.