Sudo (Español)

Sudo permite a un administrador del sistema delegar la autoridad para dar a ciertos usuarios -o grupos de usuarios- la capacidad de ejecutar comandos como root o como otro usuario, a la vez que proporciona un registro de auditoría de los comandos y sus argumentos.

Sudo es una alternativa a su para ejecutar comandos como root. A diferencia de su, que lanza un shell de root que permite que todos los comandos posteriores tengan acceso de root, sudo en cambio concede una escalada de privilegios temporal a un solo comando. Al habilitar los privilegios de root sólo cuando es necesario, el uso de sudo reduce la probabilidad de que un error tipográfico o un fallo en un comando invocado arruine el sistema.

Sudo también se puede utilizar para ejecutar comandos como otros usuarios; además, sudo registra todos los comandos y los intentos de acceso fallidos para la auditoría de seguridad.

Instalación

Instalar el paquete sudo.

Uso

Para empezar a usar sudo como usuario sin privilegios, debe estar configurado correctamente. Ver #Configuración.

Para usar sudo, simplemente anteponga un comando y sus argumentos con sudo y un espacio:

$ sudo cmd

Por ejemplo, para usar pacman:

$ sudo pacman -Syu

Vea sudo(8) para más información.

Configuración

Tango-view-fullscreen.pngEste artículo o sección necesita ampliación.Tango-view-fullscreen.png

Razón: Crear una introducción en la que se hable de Defaults, quizás con una tabla que enumere las configuraciones comunes (Discutir en Talk:Sudo#)

Esqueleto de opciones

sudoers(5) § SUDOERS OPTIONS lista todas las opciones que se pueden usar con el comando Defaults en el archivo /etc/sudoers.

Vea una lista de opciones (analizadas desde la versión 1.8.7) en un formato optimizado para sudoers.

Vea sudoers(5) para más información, como configurar el tiempo de espera de la contraseña.

Ver la configuración actual

Ejecuta sudo -ll para imprimir la configuración actual de sudo, o sudo -lU user para un usuario específico.

Usando visudo

El archivo de configuración para sudo es /etc/sudoers. Debe editarse siempre con el comando visudo(8). visudo bloquea el archivo sudoers, guarda las ediciones en un archivo temporal y comprueba si hay errores de sintaxis antes de copiarlo en /etc/sudoers.

Advertencia:

  • ¡Es imprescindible que sudoers no tenga errores de sintaxis! Cualquier error hace que sudo sea inutilizable. Edítelo siempre con visudo para evitar errores.
  • Visudo(8) advierte que configurar visudo para que respete las variables de entorno del usuario para su editor de elección puede ser un agujero de seguridad, ya que permite al usuario con privilegios de visudo ejecutar comandos arbitrarios como root sin registrarlos, simplemente estableciendo esa variable a otra cosa.

El editor por defecto para visudo es vi. El paquete sudo está compilado con --with-env-editor y respeta el uso de las variables SUDO_EDITORVISUAL y EDITOREDITOR no se utiliza cuando VISUAL está configurado.

Para establecer nano como el editor de visudo mientras dure la sesión actual del shell, exporte EDITOR=nano; para usar un editor diferente sólo una vez simplemente establezca la variable antes de llamar a visudo:

# EDITOR=nano visudo

Alternativamente puedes editar una copia del archivo /etc/sudoers y comprobarlo usando visudo -c -f /copy/of/sudoers. Esto puede ser útil en caso de que quiera eludir el bloqueo del archivo con visudo.

Para cambiar el editor de forma permanente, vea Variables de entorno#Por usuario. Para cambiar el editor de elección permanentemente en todo el sistema sólo para visudo, añada lo siguiente a /etc/sudoers (asumiendo que nano es su editor preferido):

# Reset environment by defaultDefaults env_reset# Set default EDITOR to nano, and do not allow visudo to use EDITOR/VISUAL.Defaults editor=/usr/bin/nano, !env_editor

Entradas de ejemplo

Para permitir que un usuario obtenga todos los privilegios de root cuando precede a un comando con sudo, añade la siguiente línea:

USER_NAME ALL=(ALL) ALL

Para permitir que un usuario ejecute todos los comandos como cualquier usuario pero sólo en la máquina con nombre de host HOST_NAME:

USER_NAME HOST_NAME=(ALL) ALL

Para permitir a los miembros del grupo wheel el acceso a sudo:

%wheel ALL=(ALL) ALL
Consejo: Cuando se crean nuevos administradores, suele ser conveniente habilitar el acceso sudo para el grupo wheel y añadir el usuario a él, ya que por defecto Polkit trata a los miembros del grupo wheel como administradores. Si el usuario no es miembro de wheel, el software que utiliza Polkit puede pedir que se autentique utilizando la contraseña de root en lugar de la contraseña de usuario.

Para desactivar la petición de contraseña para el usuario USER_NAME:

Aviso: Esto permitirá que cualquier proceso que se ejecute con su nombre de usuario utilice sudo sin pedir permiso.
Defaults:USER_NAME !authenticate

Habilitar comandos definidos explícitamente sólo para el usuario USER_NAME en el host HOST_NAME:

USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
Nota: La opción más personalizada debe ir al final del archivo, ya que las líneas posteriores anulan las anteriores. En concreto dicha línea debe ir después de la línea %wheel si tu usuario está en este grupo.

Habilitar los comandos definidos explícitamente sólo para el usuario USER_NAME en el host HOST_NAME sin contraseña:

USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

Un ejemplo detallado sudoers está disponible en /usr/share/doc/sudo/examples/sudoers. Si no es así, consulte sudoers(5) para obtener información detallada.

Permisos de archivo por defecto de sudoers

El propietario y el grupo del archivo sudoers deben ser ambos 0. Los permisos del archivo deben establecerse en 0440. Estos permisos están configurados por defecto, pero si accidentalmente los cambias, deben ser cambiados de nuevo inmediatamente o sudo fallará.

# chown -c root:root /etc/sudoers# chmod -c 0440 /etc/sudoers

Consejos y trucos

Desactivar el tiempo de espera de la solicitud de contraseña

Una molestia común es un proceso de larga duración que se ejecuta en un terminal de fondo en algún lugar que se ejecuta con permisos normales y se eleva sólo cuando es necesario. Esto lleva a una solicitud de contraseña sudo que pasa desapercibida y se agota, momento en el que el proceso muere y el trabajo realizado se pierde o, en el mejor de los casos, se almacena en caché. El consejo común es habilitar sudo sin contraseña, o extender el tiempo de espera de sudo recordando una contraseña. Ambas opciones tienen implicaciones negativas para la seguridad. El tiempo de espera del prompt también puede ser deshabilitado y como eso no sirve a ningún propósito razonable de seguridad debería ser la solución aquí:

Defaults passwd_timeout=0

Añadir campana de terminal al prompt de contraseña

Para llamar la atención sobre un prompt de sudo en un terminal de fondo, los usuarios pueden simplemente hacer que haga eco de un carácter de campana:

Defaults passprompt="^G password for %p: "

Nota que el ^G es un carácter de campana literal. Por ejemplo, en vim, inserta usando la secuencia Ctrl+vCtrl+g, o en nano, Alt+vCtrl+g.

Pasando alias

Si usas muchos alias, te habrás dado cuenta de que no se transfieren a la cuenta de root cuando se usa sudo. Sin embargo, hay una manera fácil de hacerlos funcionar. Simplemente añade lo siguiente a tu ~/.bashrc o /etc/bash.bashrc:

alias sudo='sudo '

Desactivar sudo por terminal

Atención: Esto permitirá que cualquier proceso use tu sesión de sudo.

Si te molestan los valores predeterminados de sudo que requieren que introduzcas tu contraseña cada vez que abres un nuevo terminal, pon timestamp_type a global:

Defaults timestamp_type=global

Reduce el número de veces que tienes que escribir una contraseña

Si te molesta tener que volver a introducir tu contraseña cada 5 minutos (por defecto), puedes cambiar esto estableciendo un valor más largo para timestamp_timeout (en minutos):

Defaults timestamp_timeout=10

Si estás usando muchos comandos sudo seguidos, es más lógico refrescar el tiempo de espera cada vez que usas sudo que aumentar timestamp_timeout. Refrescar el tiempo de espera se puede hacer con sudo -v (mientras que sudo -K revoca inmediatamente).

Puede que quieras automatizar esto añadiendo lo siguiente a tu .bashrc:

alias sudo='sudo -v; sudo '

También es posible utilizar una función bash; para más detalles consulta stackexchange.

Variables de entorno

Si tienes muchas variables de entorno, o exportas tu configuración de proxy a través de export http_proxy="...", al usar sudo estas variables no se pasan a la cuenta de root a menos que ejecutes sudo con la opción -E.

$ sudo -E pacman -Syu

La forma recomendada de preservar las variables de entorno es añadirlas a env_keep:

/etc/sudoers
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Root password

Los usuarios pueden configurar sudo para que pida la contraseña de root en lugar de la de usuario añadiendo targetpw (usuario objetivo, por defecto root) o rootpw a la línea Defaults en /etc/sudoers:

Defaults targetpw

Para evitar exponer tu contraseña de root a los usuarios, puedes restringirla a un grupo específico:

Defaults:%wheel targetpw%wheel ALL=(ALL) ALL

Desactivar el inicio de sesión de root

Los usuarios pueden desear desactivar el inicio de sesión de root. Sin root, los atacantes deben adivinar primero un nombre de usuario configurado como sudoer, así como la contraseña del usuario. Ver por ejemplo OpenSSH#Deny.

Advertencia:

  • Tenga cuidado, puede bloquearse al desactivar el inicio de sesión de root. Sudo no se instala automáticamente y su configuración por defecto no permite ni el acceso root sin contraseña ni el acceso root con su propia contraseña. Asegúrese de que un usuario está correctamente configurado como sudoer antes de deshabilitar la cuenta de root!
  • Si ha cambiado su archivo sudoers para usar rootpw como predeterminado, entonces no deshabilite el inicio de sesión de root con ninguno de los siguientes comandos!
  • Si ya está bloqueado, vea Recuperación de contraseña para obtener ayuda.

La cuenta se puede bloquear mediante passwd:

# passwd -l root

Un comando similar desbloquea el root.¡

$ sudo passwd -u root

Alternativamente, edita /etc/shadow y sustituye la contraseña encriptada del root por «!»:

root:!:12345::::::

Para habilitar el inicio de sesión de root de nuevo:

$ sudo passwd root
Consejo: Para llegar a un prompt interactivo de root, incluso después de deshabilitar la cuenta de root, utilice sudo -i.

kdesu

kdesu puede ser utilizado bajo KDE para lanzar aplicaciones GUI con privilegios de root. Es posible que por defecto kdesu intente usar su aunque la cuenta de root esté deshabilitada. Afortunadamente uno puede decirle a kdesu que use sudo en lugar de su. Crea/edita el archivo ~/.config/kdesurc:

super-user-command=sudo

o utiliza el siguiente comando:

$ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

Alternativamente, instala kdesudoAUR, que tiene la ventaja añadida de completar el tabulador para el comando siguiente.

Ejemplo de sudo

Digamos que creas 3 usuarios: admin, devel y joe. El usuario «admin» se usa para journalctl, systemctl, mount, kill, e iptables; «devel» se usa para instalar paquetes, y editar archivos de configuración; y «joe» es el usuario con el que te conectas. Para dejar que «joe» reinicie, apague y use netctl haríamos lo siguiente:

Editar /etc/pam.d/su y /etc/pam.d/su-lRequerir que el usuario esté en el grupo wheel, pero no poner a nadie en él.

#%PAM-1.0auth sufficient pam_rootok.so# Uncomment the following line to implicitly trust users in the "wheel" group.#auth sufficient pam_wheel.so trust use_uid# Uncomment the following line to require a user to be in the "wheel" group.auth required pam_wheel.so use_uidauth required pam_unix.soaccount required pam_unix.sosession required pam_unix.so

Limitar el inicio de sesión SSH al grupo ‘ssh’. Sólo «joe» formará parte de este grupo.

groupadd -r sshgpasswd -a joe sshecho 'AllowGroups ssh' >> /etc/ssh/sshd_config

Reinicia sshd.service.

Agrega usuarios a otros grupos.

for g in power network ;do ;gpasswd -a joe $g ;donefor g in network power storage ;do ;gpasswd -a admin $g ;done

Establezca permisos en las configuraciones para que devel pueda editarlas.

chown -R devel:root /etc/{http,openvpn,cups,zsh,vim,screenrc}
Cmnd_Alias POWER = /usr/bin/shutdown -h now, /usr/bin/halt, /usr/bin/poweroff, /usr/bin/rebootCmnd_Alias STORAGE = /usr/bin/mount -o nosuid\,nodev\,noexec, /usr/bin/umountCmnd_Alias SYSTEMD = /usr/bin/journalctl, /usr/bin/systemctlCmnd_Alias KILL = /usr/bin/kill, /usr/bin/killallCmnd_Alias PKGMAN = /usr/bin/pacmanCmnd_Alias NETWORK = /usr/bin/netctlCmnd_Alias FIREWALL = /usr/bin/iptables, /usr/bin/ip6tablesCmnd_Alias SHELL = /usr/bin/zsh, /usr/bin/bash%power ALL = (root) NOPASSWD: POWER%network ALL = (root) NETWORK%storage ALL = (root) STORAGEroot ALL = (ALL) ALLadmin ALL = (root) SYSTEMD, KILL, FIREWALLdevel ALL = (root) PKGMANjoe ALL = (devel) SHELL, (admin) SHELL 

Con esta configuración, casi nunca necesitarás iniciar sesión como el usuario Root.

«joe» puede conectarse a su WiFi de casa.

sudo netctl start homesudo poweroff

«joe» no puede usar netctl como ningún otro usuario.

sudo -u admin -- netctl start home

Cuando «joe» necesita usar journalctl o matar proceso en fuga puede cambiar a ese usuario.

sudo -i -u develsudo -i -u admin

Pero «joe» no puede cambiar al usuario root.

sudo -i -u root

Si «joe» quiere iniciar una sesión de gnu-screen como admin puede hacerlo así:

sudo -i -u adminadmin% chown admin:tty `echo $TTY`admin% screen

Configura sudo usando archivos drop-in en /etc/sudoers.d

sudo analiza los archivos contenidos en el directorio /etc/sudoers.d/. Esto significa que en lugar de editar /etc/sudoers, puedes cambiar la configuración en archivos independientes y soltarlos en ese directorio. Esto tiene dos ventajas:

  • No es necesario editar un archivo sudoers.pacnew;
  • Si hay un problema con una nueva entrada, puede eliminar el archivo infractor en lugar de editar /etc/sudoers (pero vea la advertencia más abajo).

El formato de las entradas de estos archivos desplegables es el mismo que el del propio /etc/sudoers. Para editarlos directamente, utilice visudo -f /etc/sudoers.d/somefile. Ver sudoers(5) § Incluir otros ficheros desde sudoers para más detalles.

Los ficheros del directorio /etc/sudoers.d/ se analizan en orden lexicográfico, los nombres de ficheros que contienen . o ~ se saltan. Para evitar problemas de ordenación, los nombres de los archivos deben comenzar con dos dígitos, por ejemplo, 01_foo.

Nota: El orden de las entradas en los archivos desplegables es importante: asegúrese de que las declaraciones no se anulan a sí mismas.
Advertencia: Los archivos de /etc/sudoers.d/ son tan frágiles como el propio /etc/sudoers: cualquier archivo mal formateado impedirá que sudo funcione. De ahí que, por la misma razón, se aconseje encarecidamente utilizar visudo

Edición de archivos

sudo -e o sudoedit te permite editar un archivo como otro usuario mientras sigues ejecutando el editor de texto como tu usuario.

Esto es especialmente útil para editar archivos como root sin elevar el privilegio de su editor de texto, para más detalles lea sudo(8) § e.

Nótese que se puede configurar el editor con cualquier programa, así por ejemplo uno puede usar meld para manejar archivos pacnew:

$ SUDO_EDITOR=meld sudo -e /etc/file{,.pacnew}

Habilitar insultos

Los usuarios pueden habilitar el easter egg de los insultos en sudo añadiendo la siguiente línea en el archivo sudoers con visudo.

Al introducir una contraseña incorrecta esto reemplazará el mensaje Sorry, try again. con insultos humorísticos.

/etc/sudoers
Insultos por defecto

Solución de problemas

Problema de SSH sin TTY

Merge-arrows-2.pngEste artículo o sección es candidato a fusionarse con #Configuración.Merge-arrows-2.png

Notas: por favor, utiliza el segundo argumento de la plantilla para dar indicaciones más detalladas. (Discutir en Talk:Sudo#)
SSH no asigna una tty por defecto cuando se ejecuta un comando remoto. Sin una tty asignada, sudo no puede evitar que se muestre la contraseña. Puedes usar la opción -t de ssh para forzarlo a asignar una tty.

La opción Defaultsrequiretty sólo permite al usuario ejecutar sudo si tiene una tty.

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear text. You have to run "ssh -t hostname sudo <cmd>".##Defaults requiretty

Permiso umask

Merge-arrows-2.pngEste artículo o sección es candidato a fusionarse con #Configuración.Merge-arrows-2.png

Notas: por favor, utiliza el segundo argumento de la plantilla para dar indicaciones más detalladas. (Discutir en Talk:Sudo#)

Sudo unirá el valor de umask del usuario con su propio umask (que por defecto es 0022). Esto evita que sudo cree archivos con más permisos abiertos de los que la umask del usuario permite. Mientras que esto es un valor por defecto sano si no se usa una umask personalizada, esto puede llevar a situaciones en las que una utilidad ejecutada por sudo puede crear archivos con diferentes permisos que si es ejecutada por root directamente. Si surgen errores por esto, sudo proporciona un medio para arreglar el umask, incluso si el umask deseado es más permisivo que el umask que el usuario ha especificado. Añadiendo esto (usando visudo) se anulará el comportamiento por defecto de sudo:

Defaults umask = 0022Defaults umask_override

Esto establece el umask de sudo al umask por defecto de root (0022) y anula el comportamiento por defecto, utilizando siempre el umask indicado independientemente del umask que el usuario haya establecido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *