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

From ArchWiki
Jump to: navigation, search
m (TranslationStatus antes de Related.)
m (Variables de entornos: Entorno sin s.)
(5 intermediate revisions by the same user not shown)
Line 51: Line 51:
 
=== Usando visudo ===
 
=== Usando visudo ===
  
El archivo de configuración de sudo es {{ic|/etc/sudoers}}. Sería conveniente que dicho archivo '''siempre''' se editase con la orden {{ic|visudo}}. {{ic|visudo}} bloquea el archivo {{ic|sudoers}}, guarda las modificaciones en un archivo temporal y comprueba la gramática de ese archivo antes de copiarlo a {{ic|/etc/sudoers}}.
+
El archivo de configuración de sudo es {{ic|/etc/sudoers}}. '''Siempre''' debe editarse con el comando {{man|8|visudo}}. {{ic|visudo}} bloquea el archivo {{ic|sudoers}}, guarda los cambios en un archivo temporal y verifica la gramática de dicho archivo antes de copiarlo en {{ic|/etc/sudoers}}.
  
 
{{Advertencia|¡Es imperativo que el archivo {{ic|sudoers}} no tenga errores de sintaxis! Cualquier error hará sudo inutilizable. Modifíquelo '''siempre'''  con {{ic|visudo}} para evitar errores.}}
 
{{Advertencia|¡Es imperativo que el archivo {{ic|sudoers}} no tenga errores de sintaxis! Cualquier error hará sudo inutilizable. Modifíquelo '''siempre'''  con {{ic|visudo}} para evitar errores.}}
  
El editor por defecto para visudo es {{ic | 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, {{ic|nano}}. La orden se ejecuta como root:
+
El editor predeterminado para visudo es {{ic|vi}}. sudo del repositorio central ''(core)'' se compila con {{Ic|--with-env-editor}} de forma predeterminada y respeta el uso de las variables {{Ic|VISUAL}} y {{Ic|EDITOR}}. {{Ic|EDITOR}} no se usa cuando se establece {{Ic|VISUAL}}.
 +
 
 +
Para establecer nano como el editor de '''visudo''' durante la sesión actual de shell exporte {{ic|<nowiki>EDITOR=nano</nowiki>}}; para usar un editor diferente una vez, simplemente configure la variable antes de llamar a '''visudo''':
  
 
  # EDITOR=nano visudo
 
  # EDITOR=nano visudo
  
Se puede cambiar permanentemente la configuración de todo el sistema para, por ejemplo, {{ic|vim}}, añadiendo:
+
Alternativamente, puede editar una copia del archivo {{ic|/etc/sudoers}} y verificarlo usando {{ic|visudo -c -f ''/copy/of/sudoers''}}. Esto podría ser útil en caso de que quiera eludir el bloqueo del archivo con visudo.
 
 
export EDITOR=nano
 
 
 
en el archivo {{ic|~/.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 {{ic|visudo}}, agregue la línea siguiente a {{ic|/etc/sudoers}} (donde {{ic|nano}} es el editor elegido):
+
Para cambiar el editor permanentemente, consulte la sección sobre [[Environment variables (Español)#Por usuario|variables de entorno por usuario]]. Para cambiar el editor elegido solo para {{ic|visudo}} de forma permanente en todo el sistema, añada lo siguiente a {{ic|/etc/sudoers}} (suponiendo que {{ic|nano}} es su editor preferido):
  
  # Restablece el entorno por defecto
+
  # Restablece el entorno predeterminado
 
  Defaults      env_reset
 
  Defaults      env_reset
  # Establece el editor por defecto para vim, y no permite a visudo utilizar EDITOR/VISUAL.
+
  # Establece el EDITOR predeterminado a nano, y no permite a visudo usar EDITOR/VISUAL.
 
  Defaults      editor=/usr/bin/nano, !env_editor
 
  Defaults      editor=/usr/bin/nano, !env_editor
  
 
=== Ejemplos de entradas ===
 
=== Ejemplos de entradas ===
  
Para permitir a un usuario normal obtener privilegios de superusuario cuando antepone {{ic|sudo}} a una orden, agregue la siguiente línea:
+
Para permitir a un usuario normal obtener privilegios de superusuario ''(root)'' cuando antepone {{ic|sudo}} a una orden, añada la siguiente línea:
  
 
  NOMBRE_DE_USUARIO  ALL=(ALL) ALL
 
  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:
+
Para permitir a un usuario ejecutar todas los comandos como cualquier usuario, pero únicamente en la máquina con el nombre {{ic|NOMBRE_DEL_EQUIPO}}:
  
 
  NOMBRE_DE_USUARIO  NOMBRE_DE_EQUIPO=(ALL) ALL
 
  NOMBRE_DE_USUARIO  NOMBRE_DE_EQUIPO=(ALL) ALL
Line 86: Line 84:
 
  %wheel      ALL=(ALL) ALL
 
  %wheel      ALL=(ALL) ALL
  
Para desactivar solicitar una contraseña para el usuario NOMBRE_DE_USUARIO:
+
Para dehabilitar la solicitud de contraseña para el usuario {{ic|NOMBRE_DE_USUARIO}}:
 +
 
 +
{{Advertencia|Esto permitirá que cualquier proceso que se ejecute con su nombre de usuario use sudo sin solicitar permiso.}}
  
 
  Defaults:NOMBRE_DE_USUARIO      !authenticate
 
  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:
+
Para habilitar las órdenes definidas explícitamente solo para el usuario {{ic|NOMBRE_DE_USUARIO}} en el equipo {{ic|NOMBRE_DEL_EQUIPO}}:
 +
 
 +
NOMBRE_DE_USUARIO NOMBRE_DEL_EQUIPO=/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 particular, una línea de este tipo debe estar después de la línea {{ic|%wheel}} si su usuario está en este grupo.}}
  
USER_NAME NOMBRE_DEL_EQUIPO=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
+
Para activar, sin necesidad de contraseña, los comandos definidos explícitamente solo para el usuario {{ic|NOMBRE_DE_USUARIO}} en el equipo {{ic|NOMBRE_DEL_EQUIPO}}:
{{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 {{ic|%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: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
  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 [http://www.gratisoft.us/sudo/sample.sudoers aquí]. Por otro lado, véase el [http://www.gratisoft.us/sudo/man/sudoers.html manual de sudoers] para obtener más información.
+
Un ejemplo detallado de {{ic|sudoers}} está disponible en {{ic|/usr/share/doc/sudo/examples/sudoers}}. Por otro lado, consulte {{man|5|sudoers}} para obtener información detallada.
  
=== Permisos de archivos predeterminados por sudoers ===
+
=== Permisos de archivo predeterminados de 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á.
+
El propietario y el grupo para el archivo {{ic|sudoers}} deben ser ambos 0. Los permisos de los archivos deben establecerse en 0440. Estos permisos se establecen de forma predeterminada, pero si los cambia accidentalmente, deberían ser cambiados de nuevo inmediatamente o sudo fallará.
  
 
  # chown -c root:root /etc/sudoers
 
  # chown -c root:root /etc/sudoers
Line 117: Line 119:
 
  Defaults !tty_tickets
 
  Defaults !tty_tickets
  
=== Variables de entornos ===
+
=== Variables de entorno ===
  
 
Si se tienen muchas variables de entorno, o exporta la configuración del proxy a través de {{ic|1=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 {{ic|-E}}.
 
Si se tienen muchas variables de entorno, o exporta la configuración del proxy a través de {{ic|1=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 {{ic|-E}}.

Revision as of 22:44, 11 August 2018

Estado de la traducción
Este artículo es una traducción de sudo, revisada por última vez el 2018-08-10. Si advierte que la versión inglesa ha cambiado puede ayudar a actualizar la traducción, bien por usted mismo o bien avisando al equipo de traducción.

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

Para comenzar a usar sudo como un usuario sin privilegios, debe estar configurado correctamente. Consulte la sección de configuración.

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

$ sudo comando

Por ejemplo, para usar pacman:

$ sudo pacman -Syu

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

Configuración

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Mover #Estructura por defecto aquí, y crear una introducción que discuta los valores predeterminados, quizás con una tabla que enumere configuraciones comunes (Discuss in Talk:Sudo (Español)#)

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

Ver la configuración actual

Ejecute sudo -ll para visualizar la configuración actual de sudo, o sudo -lU usuario para un usuario específico.

Usando visudo

El archivo de configuración de sudo es /etc/sudoers. Siempre debe editarse con el comando visudo(8). visudo bloquea el archivo sudoers, guarda los cambios en un archivo temporal y verifica la gramática de dicho archivo antes de copiarlo en /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 predeterminado para visudo es vi. sudo del repositorio central (core) se compila con --with-env-editor de forma predeterminada y respeta el uso de las variables VISUAL y EDITOR. EDITOR no se usa cuando se establece VISUAL.

Para establecer nano como el editor de visudo durante la sesión actual de shell exporte EDITOR=nano; para usar un editor diferente una vez, simplemente configure la variable antes de llamar a visudo:

# EDITOR=nano visudo

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

Para cambiar el editor permanentemente, consulte la sección sobre variables de entorno por usuario. Para cambiar el editor elegido solo para visudo de forma permanente en todo el sistema, añada lo siguiente a /etc/sudoers (suponiendo que nano es su editor preferido):

# Restablece el entorno predeterminado
Defaults      env_reset
# Establece el EDITOR predeterminado a nano, y no permite a visudo usar EDITOR/VISUAL.
Defaults      editor=/usr/bin/nano, !env_editor

Ejemplos de entradas

Para permitir a un usuario normal obtener privilegios de superusuario (root) cuando antepone sudo a una orden, añada la siguiente línea:

NOMBRE_DE_USUARIO   ALL=(ALL) ALL

Para permitir a un usuario ejecutar todas los comandos como cualquier usuario, pero únicamente en la máquina con el nombre 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 dehabilitar la solicitud de contraseña para el usuario NOMBRE_DE_USUARIO:

Advertencia: Esto permitirá que cualquier proceso que se ejecute con su nombre de usuario use sudo sin solicitar permiso.
Defaults:NOMBRE_DE_USUARIO      !authenticate

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

NOMBRE_DE_USUARIO NOMBRE_DEL_EQUIPO=/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 particular, una línea de este tipo debe estar después de la línea %wheel si su usuario está en este grupo.

Para activar, sin necesidad de contraseña, los comandos definidos explícitamente solo para el usuario NOMBRE_DE_USUARIO en el equipo NOMBRE_DEL_EQUIPO:

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

Un ejemplo detallado de sudoers está disponible en /usr/share/doc/sudo/examples/sudoers. Por otro lado, consulte sudoers(5) para obtener información detallada.

Permisos de archivo predeterminados de sudoers

El propietario y el grupo para el archivo sudoers deben ser ambos 0. Los permisos de los archivos deben establecerse en 0440. Estos permisos se establecen de forma predeterminada, pero si los cambia accidentalmente, deberían ser cambiados de nuevo inmediatamente o sudo fallará.

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

Consejos y trucos

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 entorno

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

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.