Difference between revisions of "Sudo (Español)"

From ArchWiki
Jump to: navigation, search
m (Se ha añadido TranslationStatus con el identificador del original sobre el que reviso, es decir, el último disponible.)
(Revisado y actualizado hasta "Instalación" inclusive.)
Line 14: Line 14:
 
{{Related2|su (Español)|su}}
 
{{Related2|su (Español)|su}}
 
{{Related articles end}}
 
{{Related articles end}}
{{TranslationStatus (Español)|sudo|2018-08-09|529530}}
+
{{TranslationStatus (Español)|sudo|2018-08-10|529530}}
 +
[https://www.sudo.ws/sudo/ Sudo] permite al administrador del sistema delegar autoridad para otorgar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar comandos como superusuario ''(root)'' u otro mientras proporciona un registro de auditoría de los comandos y sus argumentos.
  
{{ic|sudo}} («substitute user do») permite que un administrador del sistema delegue autoridad para dar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar algunas órdenes (o la totalidad) como root u otro usuario, al tiempo que permite auditar el rastro de las órdenes dadas y sus argumentos.
+
Sudo es una alternativa a [[su (Español)|su]] para ejecutar comandos como superusuario. A diferencia de '''su''', que lanza un shell de superusuario que permite que todos los demás comandos tengan acceso de superusuario, sudo ofrece una escalada temporal de privilegios a un solo comando. Al habilitar los privilegios de superusuario solo cuando es necesario, el uso de sudo reduce la probabilidad de que un error tipográfico o en un comando invocado arruine el sistema.
  
== Justificación ==
+
Sudo también se puede usar 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.
 
 
Sudo es una alternativa a [[su]] para ejecutar órdenes como root. A diferencia de [[su]], el cual lanza una shell de root que permite además el acceso a todas las órdenes, sudo, por el contrario, realiza una dosificada entrega de privilegios temporales para una sola orden. El uso de sudo otorga los privilegios de root solo cuando es necesario y reduce el riesgo que un error tipográfico o un error en la invocación de una orden puede causar en el sistema.
 
Sudo también se puede utilizar para ejecutar órdenes como otro u otros usuarios, y además, sudo registra todas las órdenes emitidas y los intentos fallidos.
 
  
 
== Instalación ==
 
== Instalación ==
  
[[Help:Reading_(Español)#Instalaci.C3.B3n_de_paquetes|Instale]] el paquete {{Pkg|sudo}}, disponible en los [[Official repositories (Español)|repositorios oficiales]].
+
[[Help:Reading (Español)#Instalación de paquetes|Instale]] el paquete {{Pkg|sudo}}.
 
 
Para empezar a usar {{ic|sudo}} por un usuario sin privilegios, debe estar correctamente configurado. Así que lea la sección de configuración.
 
  
 
== Utilización ==
 
== Utilización ==

Revision as of 10:39, 10 August 2018

Estado de la traducción: este artículo es una versión traducida de sudo. Fecha de la última traducción/revisión: 2018-08-10. Puedes ayudar a actualizar la traducción, si adviertes que la versión inglesa ha cambiado: ver cambios.

Sudo permite al administrador del sistema delegar autoridad para otorgar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar comandos como superusuario (root) u otro mientras proporciona un registro de auditoría de los comandos y sus argumentos.

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

Sudo también se puede usar 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

Instale el paquete sudo.

Utilización

Con sudo, los usuarios normales pueden emitir órdenes con el prefijo sudo para ejecutárlas con privilegios de superusuario (o de otros grupos de usuarios).

Por ejemplo, para usar pacman:

$ sudo pacman -Syu

Véase el manual de sudo para obtener más información.

Configuración

Ver la configuración actual

Ejecute sudo -ll para visualizar la configuración actual de sudo.

Usar visudo

El archivo de configuración de sudo es /etc/sudoers. Sería conveniente que dicho archivo siempre se editase con la orden visudo. visudo bloquea el archivo sudoers, guarda las modificaciones en un archivo temporal y comprueba la gramática de ese archivo antes de copiarlo a /etc/sudoers.

Advertencia: ¡Es imperativo que el archivo sudoers no tenga errores de sintaxis! Cualquier error hará sudo inutilizable. Modifíquelo siempre con visudo para evitar errores.

El editor por defecto para visudo es vi. Será utilizado si no se especifica otro editor, configurado o bien con VISUAL o bien con EDITOR como variables de entorno (utilizado en ese orden) para el editor que desee, por ejemplo, nano. La orden se ejecuta como root:

# EDITOR=nano visudo

Se puede cambiar permanentemente la configuración de todo el sistema para, por ejemplo, vim, añadiendo:

export EDITOR=nano

en el archivo ~/.bashrc . Tenga en cuenta que este no entrará en vigor para las shells ya en ejecución.

Para usar permanentemente el editor elegido cuando se ejecuta la orden visudo, agregue la línea siguiente a /etc/sudoers (donde nano es el editor elegido):

# Restablece el entorno por defecto
Defaults      env_reset
# Establece el editor por defecto para vim, y no permite a visudo utilizar EDITOR/VISUAL.
Defaults      editor=/usr/bin/nano, !env_editor

Ejemplos de entradas

Para permitir a un usuario normal obtener privilegios de superusuario cuando antepone sudo a una orden, agregue la siguiente línea:

NOMBRE_DE_USUARIO   ALL=(ALL) ALL

Para permitir a un usuario ejecutar todas las órdenes de cualquier usuario, pero únicamente en la máquina con el hostname NOMBRE_DEL_EQUIPO:

NOMBRE_DE_USUARIO   NOMBRE_DE_EQUIPO=(ALL) ALL

Para permitir que los miembros del grupo wheel tengan acceso a sudo:

%wheel      ALL=(ALL) ALL

Para desactivar solicitar una contraseña para el usuario NOMBRE_DE_USUARIO:

Defaults:NOMBRE_DE_USUARIO      !authenticate

Para activar las órdenes definidas explícitamente solo para el usuario NOMBRE_DE_USUARIO en el equipo NOMBRE_DEL_EQUIPO:

USER_NAME NOMBRE_DEL_EQUIPO=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
Nota: La opción personalizada añadida debe ir al final del archivo, ya que las líneas posteriores anulan las anteriores. En particular, esta línea debe ser posterior a la línea %wheel si el usuario se encuentra en este grupo.

Para activar, sin necesidad de contraseña, las órdenes definidas explícitamente únicamente para el usuario NOMBRE_DE_USUARIO en el equipo NOMBRE_DEL_EQUIPO:

NOMBRE_DE_USUARIO NOMBRE_DEL_EQUIPO= NOPASSWD: /sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu

Un ejemplo detallado de archivo sudoers se puede encontrar aquí. Por otro lado, véase el manual de sudoers para obtener más información.

Permisos de archivos predeterminados por sudoers

El propietario y el grupo para el archivo sudoers deben ser ambos 0. Los permisos de los archivos se deben establecer en 0440. Estos permisos se establecen de forma predeterminada, pero si accidentalmente los cambia, debe modificarlos de inmediato o sudo fallará.

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

Expiración de la contraseña

Los usuarios pueden estar interesados en cambiar el tiempo de espera predeterminado antes de que la contraseña almacenada en la caché caduque. Esto se logra con la opción timestamp_timeout en /etc/sudoers que se cuenta en minutos. Para configurar el tiempo de espera en 20 minutos:

Defaults:USER_NAME timestamp_timeout=20
Sugerencia: Para asegurar que sudo siempre pedirá una contraseña, establezca el tiempo de espera en 0. Para garantizar que la contraseña nunca expire, establezca timeout en menos de 0.

Consejos y trucos

Archivo de ejemplo

Este ejemplo es especialmente útil para aquellos que utilizan multiplexores de terminales como screen, tmux o ratpoison, y los que usan sudo desde scripts/cronjobs:

/etc/sudoers
Cmnd_Alias WHEELER = /usr/sbin/lsof, /bin/nice, /bin/ps, /usr/bin/top, /usr/local/bin/nano, /usr/sbin/ss, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill
Cmnd_Alias EDITS = /usr/bin/vim, /usr/bin/nano, /usr/bin/cat, /usr/bin/vi
Cmnd_Alias ARCHLINUX = /usr/sbin/gparted, /usr/bin/pacman

root ALL = (ALL) ALL
USER_NAME ALL = (ALL) ALL, NOPASSWD: WHEELER, NOPASSWD: PROCESSES, NOPASSWD: ARCHLINUX, NOPASSWD: EDITS
 
Defaults !requiretty, !tty_tickets, !umask
Defaults visiblepw, path_info, insults, lecture=always
Defaults loglinelen = 0, logfile =/var/log/sudo.log, log_year, log_host, syslog=auth
Defaults mailto=webmaster@foobar.com, mail_badpass, mail_no_user, mail_no_perms
Defaults passwd_tries = 8, passwd_timeout = 1
Defaults env_reset, always_set_home, set_home, set_logname
Defaults !env_editor, editor="/usr/bin/vim:/usr/bin/vi:/usr/bin/nano"
Defaults timestamp_timeout=360
Defaults passprompt="Sudo invoked by [%u] on [%H] - Cmd run as %U - Password for user %p:"

Activar la función autocompletar con Tab en Bash

Tab-completion, por defecto, no funciona cuando un usuario se añade inicialmente al archivo sudoers. Por ejemplo, Juan normalmente necesita escribir solo:

$ fire<Tab>

y la shell completará el mandato para él como:

$ firefox

Sin embargo, si Juan es agregado al archivo sudoers y escribe:

$ sudo fire<Tab>

la shell no hará nada.

Para activar Tab-completion con sudo, instale el paquete bash-completion desde los repositorios oficiales. Véase bash#Auto-completion[broken link: invalid section] para obtener más información

Como alternativa, añada lo siguiente al archivo ~/.bashrc:

complete -cf sudo

Ejecutar aplicaciones X11 utilizando sudo

Para permitir que sudo inicie una aplicación gráfica en X11, es necesario agregar:

Defaults env_keep += "HOME"

a visudo.

Desactivar sudo para cada terminal

Advertencia: Esto permitirá usar cualquier proceso desde la sesión de sudo.

Si le molesta que sudo, de forma predeterminada, le obligue a introducir la contraseña cada vez que se abre una nueva terminal, desactive tty_tickets:

Defaults !tty_tickets

Variables de entornos

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

$ sudo -E pacman -Syu

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

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

Activar alias

Si utiliza muchos alias, habrá advertido que no se transfieren a la cuenta de root cuando usa sudo. No obstante, hay una manera fácil de hacer que funcionen. Solo tiene que añadir lo siguiente a ~/.bashrc o a /etc/bash.bashrc:

alias sudo='sudo '

Avisos

Los usuarios pueden configurar sudo para mostrar «avisos ingeniosos»» cuando se introduce una contraseña incorrecta, en lugar de mostrar el mensaje predeterminado «contraseña incorrecta» (wrong password) . Busque la línea Defaults en /etc/sudoers y añada el parámetro «insults», separándolo con una coma de las opciones existentes. El resultado final podría verse así:

#Defaults specification
Defaults insults

Para probar, escriba sudo -K para finalizar la sesión actual y dejar que sudo pida la contraseña de nuevo.

Contraseña root

Los usuarios pueden configurar sudo para pedir la contraseña de root, en lugar de la contraseña de usuario, añadiendo "rootpw" a la línea Defaults en /etc/sudoers:

Defaults timestamp_timeout=0,rootpw

Desactivar el acceso de root

Advertencia: Arch Linux no viene ajustado para funcionar con una cuenta de root desactivada. Los usuarios pueden encontrar problemas con este método.

Con sudo instalado y configurado, el usuario puede deshabilitar el inicio de sesión de root. Sin root, los «attackers», primero, deben adivinar un nombre de usuario configurado como un sudoer y, luego, la contraseña de usuario.

Advertencia: Asegúrese de que un usuario está correctamente configurado como un sudoer antes de desactivar la cuenta de root.

La cuenta puede ser bloqueada mediante passwd:

# passwd -l root

Una orden similar desbloquea root.

$ sudo passwd -u root

De forma alternativa, edite /etc/shadow y vuelva a colocar la contraseña cifrada de root con «!»:

root:!:12345::::::

Para activar el acceso de root de nuevo:

$ sudo passwd root

kdesu

kdesu puede ser utilizado bajo KDE para lanzar aplicaciones gráficas con privilegios de root. Es posible que, por defecto, kdesu trate de usar «su», incluso si la cuenta de root está desactivada. Afortunadamente se puede invocar kdesu para usar «sudo» en lugar de «su». Cree/modifique el archivo ~/.kde4/share/config/kdesurc:

[super-user-command]
super-user-command=sudo

PolicyKit

Al desactivar la cuenta de root, es necesario cambiar la configuración de PolicyKit para hacer que la autorización local actúe en consecuencia. El valor predeterminado es solicitar la contraseña de root, por lo que debe ser cambiado. Con polkit-1, esto se puede lograr mediante la edición de /etc/polkit-1/localauthority.conf.d/50-localauthority.conf de manera que AdminIdentities=unix-user:0 se modifique añadiéndole algo más, dependiendo de la configuración del sistema. Puede ser con una lista de usuarios y grupos, por ejemplo:

AdminIdentities=unix-group:wheel

o

AdminIdentities=unix-user:me;unixuser:mom;unix-group:wheel

Para obtener más información, véase man pklocalauthority.

NetworkManager

Incluso con la configuración anterior de PolicyKit todavía necesita configurar una política para NetworkManager. Esto está documentado en la página NetworkManager de esta wiki

Ejemplo para proteger con sudo

Pongamos por caso que se crean 3 usuarios: admin, devel y Joe.

  • admin es utilizado para journalctl, systemctl, mount, kill, e iptables.
  • devel es utilizado para instalar paquetes y editar archivos de configuración.
  • Joe es el usuario con el que se inicia sesión. Podrá reiniciar, apagar y usar netctl.

Edite /etc/pam.d/su and /etc/pam.d/su-1

Demande que el usuario esté en el grupo wheel, pero no ponga a nadie en él.

#%PAM-1.0
auth            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_uid
auth            required        pam_unix.so
account         required        pam_unix.so
session         required        pam_unix.so

Limite el inicio de sesión de SSH al grupo ssh, y ponga únicamente a Joe en él.

groupadd -r ssh
gpasswd -a Joe ssh
echo 'AllowGroups ssh' >> /etc/ssh/sshd_config
systemctl restart sshd.service

Permita agregar usuarios a otros grupos.

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

Ajuste los permisos sobre las configuraciones para que 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/reboot
Cmnd_Alias  STORAGE     =   /usr/bin/mount, /usr/bin/umount
Cmnd_Alias  SYSTEMD     =   /usr/bin/journalctl, /usr/bin/systemctl
Cmnd_Alias  KILL        =   /usr/bin/kill, /usr/bin/killall
Cmnd_Alias  PKGMAN      =   /usr/bin/pacman
Cmnd_Alias  NETWORK     =   /usr/bin/netctl
Cmnd_Alias  FIREWALL    =   /usr/bin/iptables, /usr/bin/ip6tables
Cmnd_Alias  SHELL       =   /usr/bin/zsh, /usr/bin/bash
%power      ALL         =   (root)  NOPASSWD: POWER
%network    ALL         =   (root)  NETWORK
%storage    ALL         =   (root)  STORAGE
root        ALL         =   (ALL)   ALL
admin       ALL         =   (root)  SYSTEMD, KILL, FIREWALL
devel	    ALL         =   (root)  PKGMAN
Joe	    ALL         =   (devel) SHELL, (admin) SHELL 

Con esta configuración casi nunca se tendrá que iniciar sesión como usuario Root.

Joe se puede conectar a una red WiFi doméstica:

sudo netctl start home
sudo poweroff

Joe no puede utilizar netctl como cualquier otro usuario como administrador...

sudo -u admin -- netctl start home

Cuando Joe tiene que utilizar journalctl o terminar la ejecución de un proceso puede cambiar al usuario habilitado:

sudo -i -u devel
sudo -i -u admin

Pero no es Root:

sudo -i -u root

Si Joe quiere iniciar una sesión GNU Screen como administrador puede hacerlo de esta manera:

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

Solución de problemas

Problemas de SSH con TTY

SSH no asigna una tty de forma predeterminada cuando se ejecuta un comando remoto. Sin una tty, sudo no puede desactivar «echo» cuando pida la contraseña. Puede utilizar la opción -tt para obligar a SSH a asignar una tty (utilice -tt dos veces).

La opción requiretty de Defaults solo permite al usuario ejecutar sudo si tiene una tty.

# Desactive "ssh hostname sudo <cmd>", ya que mostrará la contraseña en texto claro. Se tiene que ejecutar "ssh -t hostname sudo <cmd>".
#
#Defaults    requiretty

Umask permisiva

Sudo reunifica el valor umask del usuario con el del propio umask (que por defecto es 0022). Esto evita que sudo cree archivos con permisos más abiertos que el umask del usuario permite. Si bien esto es un valor predefinido aceptable si el umask personalizado no está en uso, esto puede llevar a situaciones en las que un programa dirigido por sudo puede crear archivos con permisos diferentes que si los ejecutara root directamente. Si se incurre en este tipo de errores, sudo proporciona un medio para fijar la umask del usuario, incluso en el caso de que la umask sea más permisiva respecto de la umask especificada por el usuario. La adición de las líneas de abajo (usando visudo) modificará tal comportamiento por defecto de sudo:

Defaults umask = 0022
Defaults umask_override

Esto establece la umask de sudo para la umask por defecto de root (0022) y sobrescribe el comportamiento predefinido, utilizando siempre la umask indicada, independientemente de cómo la umask del usuario esté configurada.

Estructura por defecto

Merge-arrows-2.pngThis article or section is a candidate for merging with #Configuración.Merge-arrows-2.png

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Sudo (Español)#)

La página de los autores tiene una lista de todas las opciones que se puede usar con el comando Defaults en el archivo /etc/sudoers.

Consulte [1] para obtener una lista de opciones (analizadas desde el código fuente de la versión 1.8.7) en un formato optimizado para sudoers.