Cómo usar el comando sudo de Linux

En sistemas operativos tipo Unix, el comando sudo (superuser do, o switch user, do) permite a un usuario con los permisos adecuados ejecutar un comando como cualquier otro usuario, tal como el superusuario.

Se usa generalmente como prefijo de algún comando que sólo se permite ejecutar al superusuario. Si prefija sudo con cualquier comando, ejecutará ese comando con privilegios elevados. Esto equivale a la opción Ejecutar como administrador en Windows. La opción de sudo nos permite tener múltiples administradores.

comando sudo linux

Este documento describe la versión Linux de sudo.

Descripción

sudo permite a un usuario con permisos a ejecutar un comando como otro usuario, de acuerdo con las especificaciones del fichero /etc/sudoers. El uid y gid real y efectivo del usuario emisor se configuran para que coincidan con los de la cuenta de usuario de destino tal y como se especifica en el archivo passwd.

Por defecto, sudo requiere que los usuarios se autenticen con una contraseña. Por defecto, ésta es la contraseña del usuario, no la contraseña del root.

Una vez que un usuario ha sido autenticado, se registra una marca de tiempo y el usuario puede usar sudo sin contraseña por un corto período de tiempo (5 minutos, a menos que se haya configurado de otra manera en los sudoers). Esta marca de tiempo puede ser renovada si el usuario emite sudo con el indicador -v.

Si un usuario no listado en sudoers intenta ejecutar un comando usando sudo, se considera un intento fallido de violar la seguridad del sistema y el correo se envía a las autoridades apropiadas, como se define en el momento de la configuración o en el archivo sudoers. La autoridad por defecto para ser notificado de intentos fallidos de sudo es root. Tenga en cuenta que el correo no se enviará si un usuario no autorizado intenta ejecutar sudo con los indicadores -l o -v; esto permite a los usuarios determinar por sí mismos si pueden o no usar sudo.

sudo puede registrar tanto los intentos exitosos como los fallidos (así como los errores) en syslog, en un archivo de registro único o en ambos. Por defecto, sudo va a loguearse en el syslog, pero esto puede cambiarse en el momento de la configuración o en el archivo sudoers.

Para editar el archivo sudoers, utilice el comando visudo.

Sintaxis

sudo -V | -h | -l | -L | -v | -k | -K | -s | [ -H ] [-P ] [-S ] [ -b ] | 
     [ -p prompt ] [ -c class|- ] [ -a auth_type ] [-r role ] [-t type ] 
     [ -u username|#uid ] command

Opciones

-VLa opción -V (versión) hace que sudo imprima el número de versión y salga. Si el usuario que invoca ya es root, la opción -V imprimirá una lista de los sudo por defecto con los que se compiló, así como las direcciones de red locales de la máquina.
-lLa opción -l (lista) imprimirá los comandos permitidos (y prohibidos) al usuario en el host actual.
-LLa opción -L (lista de valores predeterminados) enumerará los parámetros que se pueden establecer en una línea de valores predeterminados junto con una abreviatura para cada uno de ellos. Esta opción es útil junto con grep.
-hLa opción -h (ayuda) hace que sudo imprima un mensaje de uso y salga.
-vSi se le da la opción -v (validar), sudo actualizará la marca de tiempo del usuario, solicitando la contraseña del usuario si es necesario. Esto extiende el tiempo de espera de sudo por otros 5 minutos (o lo que sea que el tiempo de espera esté configurado en los sudoers) pero no ejecuta un comando.
-kLa opción -k (kill) para sudo invalida la marca de tiempo del usuario fijando la hora en ella a la época. La próxima vez que se ejecute sudo se le pedirá una contraseña. Esta opción no requiere contraseña y fue añadida para permitir a un usuario revocar los permisos sudo de un archivo.logout.
-KLa opción -K (sure kill) para sudo elimina por completo la marca de tiempo del usuario. Asimismo, esta opción no requiere contraseña.
-bLa opción -b (background) le dice a sudo que ejecute el comando dado en segundo plano. Tenga en cuenta que si utiliza la opción -b no puede utilizar el control de trabajos de shell para manipular el proceso.
-pLa opción -p (prompt) le permite anular la solicitud de contraseña predeterminada y utilizar una personalizada. Se soportan los siguientes porcentajes ('%') de escapes:

%u se expande hasta el nombre de inicio de sesión del usuario invocante;


%U se expande hasta el nombre de inicio de sesión del usuario como se ejecutará el comando (que por defecto es root);

%h se expande al nombre de host local sin el nombre de dominio;


%H se expande al nombre de host local incluyendo el nombre de dominio (sólo si el nombre de host de la máquina está totalmente cualificado o si la opción "fqdn" sudoers está activada);

%% (dos caracteres % consecutivos) se colapsan en un solo carácter %.

-cLa opción -c (class) hace que sudo ejecute el comando especificado con recursos limitados por la clase de inicio de sesión especificada. El argumento class puede ser un nombre de clase tal y como se define en /etc/login.conf, o un único carácter ` -''. Especificar una clase de - indica que el comando debe estar restringido por las capacidades de inicio de sesión predeterminadas para el usuario que ejecuta el comando. Si el argumento class especifica una clase de usuario existente, el comando debe ejecutarse como root, o el comando sudo debe ejecutarse desde una shell que ya es root. Esta opción sólo está disponible en sistemas con clases de login BSD donde sudo ha sido configurado con la opción --with-logincap.
-aLa opción -a (tipo de autenticación) hace que sudo utilice el tipo de autenticación especificado al validar al usuario, como permite /etc/login.conf. El administrador del sistema puede especificar una lista de métodos de autenticación específicos de sudo añadiendo una entrada "auth-sudo" en /etc/login.conf. Esta opción sólo está disponible en sistemas que soportan autenticación BSD donde sudo ha sido configurado con la opción --with-bsdauth.
-uLa opción -u (usuario) hace que sudo ejecute el comando especificado como un usuario distinto de root. Para especificar un uid en lugar de un nombre de usuario, utilice #uid.
-sLa opción -s (shell) ejecuta el shell especificado por la variable de entorno SHELL si está definida o el shell especificado en el fichero passwd.
-HLa opción -H (HOME) establece la variable de entorno HOME en el directorio home del usuario de destino (root por defecto) tal y como se especifica en passwd. Por defecto, sudo no modifica HOME.
-PLa opción -P (preserve group vector) hace que sudo preserve el vector de grupo del usuario sin alterar. Por defecto, sudo inicializará el vector de grupo en la lista de grupos del usuario objetivo. Sin embargo, los identificadores de grupo reales y efectivos siguen siendo los mismos que los del usuario objetivo.
-rLa opción -r (rol) hace que el nuevo contexto de seguridad (SELinux) tenga el rol especificado por ROLE.
-tLa opción -t (tipo) hace que el nuevo contexto de seguridad (SELinux) tenga el tipo (dominio) especificado por TYPE. Si no se especifica ningún tipo, el tipo por defecto se deriva del rol especificado.
-SLa opción -S (stdin) hace que sudo lea la contraseña de la entrada estándar en lugar del dispositivo terminal.
--El indicador -- le dice ha sudo que debe detener el procesamiento de los argumentos de la línea de comandos. Es más útil en conjunción con la bandera -s.

Valores de retorno

Tras la ejecución exitosa de un programa, el valor de retorno de sudo será el valor de retorno del programa que se ejecutó.

De lo contrario, sudo sale con un valor de salida de 1 si hay un problema de configuración/permiso o si sudo no puede ejecutar el comando dado. En este último caso, el string de error se imprime en stderr. Si sudo no puede indicar una o más entradas en la ruta del usuario, se imprimirá un error en stderr. (Si el directorio no existe o si no es realmente un directorio, la entrada se ignora y no se imprime ningún error.) Esto no debería ocurrir en circunstancias normales. La razón más común para que las estadísticas devuelvan el "permiso denegado" es si está ejecutando un auto-montaje y uno de los directorios en su PATH está en una máquina que actualmente no está disponible.

Notas de seguridad

sudo intenta estar seguro cuando usted ejecuta comandos. Las variables que controlan cómo se realiza la carga y el encuadernado dinámico se pueden utilizar para subvertir el programa que ejecuta sudo. Para combatir esto, algunas variables de entorno específicas del sistema se eliminan del entorno que se transmite a los comandos que se ejecutan. Otras variables que sudo elimina del entorno incluyen:

  • IFS
  • ENV
  • BASH_ENV
  • KRB_CONF
  • KRBCONFDIR
  • KRBTKFILE
  • KRB5_CONFIG
  • LOCALDOMENIO
  • RES_OPCIONES
  • HOSTALIASAS
  • NLSPATH
  • PATH_LOCALE
  • TERMINFO
  • TERMINFO_DIRS
  • TERMPATH

ya que ellos también pueden ser una amenaza. Si la variable TERMCAP está definida y es una ruta de acceso, también se ignora. Además, si ciertas variables contienen los caracteres / o %, se ignorarán.

Si sudo ha sido compilado con soporte SecurID, las variables VAR_ACE, USR_ACE y DLC_ACE también son borradas. La lista de variables de entorno que sudo borra está contenida en la salida de sudo -V cuando se ejecuta como root.

Para evitar la falsificación de comandos, sudo comprueba "..." y "" (ambos denotan el directorio actual) al buscar un comando en la ruta del usuario (si uno o ambos están en la ruta). Tenga en cuenta, sin embargo, que la variable de entorno PATH real no se modifica y se pasa sin cambios al programa que ejecuta sudo.

Por razones de seguridad, si su sistema operativo soporta bibliotecas compartidas y no deshabilita las rutas de búsqueda de bibliotecas definidas por el usuario para programas setuid (la mayoría lo hace), debería utilizar una opción de enlazador que deshabilite este comportamiento o enlazar sudo estáticamente.

Nota: Una marca de tiempo o timestamp es la hora actual de un evento que es registrado por una computadora.

sudo comprobará la propiedad de su directorio timestamp (/var/run/sudo por defecto) e ignorará el contenido del directorio si no es propiedad de root y sólo puede ser escrito por root. En los sistemas que permiten a los usuarios no root regalar archivos a través de chown, si el directorio timestamp se encuentra en un directorio que cualquiera puede escribir (por ejemplo, /tmp), es posible que el usuario cree el directorio timestamp antes de que se ejecute sudo. Sin embargo, como sudo comprueba la propiedad y el modo del directorio y su contenido, el único daño que se puede hacer es "ocultar" los archivos poniéndolos en el directorio de timestamp. Esto es poco probable que suceda ya que una vez que el directorio de marca de tiempo es propiedad de root e inaccesible para cualquier otro usuario, el usuario que coloque los archivos no podrá volver a sacarlos. Para evitar este problema, puede utilizar un directorio que no se pueda escribir en todo el mundo para las marcas de tiempo (por ejemplo, /var/adm/sudo) o crear /var/run/sudo con el propietario apropiado (root) y los permisos (0700) en los archivos de inicio del sistema.

sudo no respetará las marcas de tiempo establecidas en el futuro. Las marcas de tiempo con una fecha mayor que la hora_actual + 2 * TIMEOUT serán ignoradas y sudo se registrará y se quejará. Esto se hace para evitar que un usuario cree su propia marca de tiempo con una fecha falsa en sistemas que permiten a los usuarios regalar archivos.

Tenga en cuenta que sudo sólo registrará el comando que se ejecuta explícitamente. Si un usuario ejecuta un comando como "sudo su" o "sudo sh", los comandos subsiguientes que se ejecuten desde ese shell no se registrarán, ni el control de acceso de sudo les afectará. Lo mismo es cierto para los comandos que ofrecen escapes del shell (incluyendo la mayoría de los editores). Debido a esto, se debe tener cuidado al dar acceso a los usuarios a los comandos a través de sudo para verificar que el comando no le de inadvertidamente al usuario un comandos de shell efectivo.

Variables de Entorno

sudo utiliza las siguientes variables de entorno:

PATHSe establece en un valor sano si se fija SECURE_PATH
SHELLSe usa para determinar el shell a ejecutar con la opción -s
USERDefinir al usuario objetivo (root a menos que se especifique la opción -u)
HOMEEn modo -s o -H (o si sudo fue configurado con la opción --enable-shell-sets-home), establezca el directorio home del usuario objetivo.
SUDO_PROMPTSe utiliza como el indicador de contraseña predeterminado
SUDO_COMMANDEstablezca el comando ejecutado por sudo
SUDO_USEREstablezca el nombre de usuario del usuario que invocó sudo
SUDO_UIDEstablecido en el uid del usuario que invocó sudo
SUDO_GIDEstablecido en el gid del usuario que invocó sudo
SUDO_PS1Si está configurado, PS1 se ajustará a su valor

Ejemplos

sudo shutdown -r now

Reinicie el sistema; ejecute el comando de shutdown como root.

sudo -u comofriki ls /inicio/otrousuario/Documentos

Enumere el contenido del directorio /inicio/otrousuario/Documentos como el usuario comofriki.

sudo -u comofriki -g otrosusuarios mkdir /inicio/otrousuario/Documentos/archivosnuevos

Cree un nuevo directorio con el comando mkdir, como espera el usuario, con el grupo actual de hope configurado para otros usuarios. hope debe ser miembro del grupo de otros usuarios.

sudo -v

Extiende/restablece el tiempo de espera de autenticación automática de sudo, permitiéndote continuar emitiendo comandos sudo sin necesidad de introducir una contraseña.

sudo -k

Autenticación de sudo "Kill" para el usuario actual. El siguiente comando sudo requerirá una contraseña.