Sudo (Español)

Esta traducción de
sudo
fue revisada el
2022-11-07
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Usuarios y grupos
su
doas
Sudo
permite al administrador del sistema delegar autoridad para otorgar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar órdenes como superusuario
(root)
u otro mientras proporciona un registro de auditoría de las órdenes y sus argumentos.
Sudo es una alternativa a
su
para ejecutar órdenes como superusuario. A diferencia de
su
, que lanza un shell de superusuario que permite que todas las demás órdenes tengan acceso de superusuario, sudo ofrece una elevación temporal de privilegios a una sola orden. Al activar los privilegios de superusuario solo cuando es necesario, el uso de sudo reduce la probabilidad de que un error tipográfico o en una orden invocada arruine el sistema.
Sudo también se puede usar para ejecutar órdenes como otros usuarios; además, sudo registra todas las órdenes 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. Véase la sección
configuración
.
Para usar
sudo
, simplemente anteponga
sudo
y un espacio a ls orden y sus argumentos:
$ sudo
orden
Por ejemplo, para usar pacman:
$ sudo pacman -Syu
Véase
sudo(8)
para más información.
Configuración
Estructura por defecto
sudoers(5) § SUDOERS OPTIONS
lista todas las opciones que se pueden utilizar con la orden
Defaults
en el archivo
/etc/sudoers
.
Véase
[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
.
Véase
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.
Utilizando visudo
El archivo de configuración de sudo es
/etc/sudoers
.
Siempre
debe editarse con la orden
visudo(8)
.
visudo
bloquea el archivo
sudoers
, guarda los cambios en un archivo temporal y comprueba los errores sintácticos 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.
visudo(8)
advierte que configurar
visudo
para respetar 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
visudo
ejecutar arbitrariamente órdenes como superusuario sin iniciar sesión simplemente estableciendo esa variable con cualquier cosa.
El editor predeterminado para
visudo
es
vi
. El paquete
sudo
se compila con
--with-env-editor
de forma predeterminada y respeta el uso de las variables
SUDO_EDITOR
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 utilizando
visudo -c
/copia/de/sudoers
. Esto podría ser útil en caso de que quiera eludir el bloqueo del archivo con
visudo
.
Para cambiar el editor permanentemente, véase la sección
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 una versión restringida de nano, y no permite a visudo usar EDITOR/VISUAL.
Defaults      editor=/usr/bin/rnano, !env_editor
Ejemplos de entradas
Para permitir a un usuario normal obtener privilegios de superusuario
(root)
cuando anteponga
sudo
a una orden, añada la siguiente línea:
NOMBRE_DE_USUARIO   ALL=(ALL:ALL) ALL
Para permitir a un usuario ejecutar todas las órdenes como cualquier usuario, pero únicamente en la máquina con el nombre
NOMBRE_DEL_EQUIPO
:
NOMBRE_DE_USUARIO   NOMBRE_DE_EQUIPO=(ALL:ALL) ALL
Para permitir que los miembros del grupo
wheel
tengan acceso a sudo:
%wheel      ALL=(ALL:ALL) ALL
Sugerencia
Al crear nuevos administradores, a menudo es conveniente activar 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 programa que utiliza Polkit puede solicitar la autenticación mediante la contraseña del superusuario en lugar de la contraseña del usuario.
Para desactivar 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 activar 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, las órdenes definidas 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, véase
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 el tiempo de espera al solicitar la contraseña
Una molestia común es un proceso de larga duración que se ejecuta con permisos normales en segundo plano en un terminal y se eleva solo cuando es necesario. Esto lleva a una solicitud de contraseña de sudo que pasa desapercibida y se agota el tiempo, en cuyo caso el proceso muere y el trabajo realizado se pierde o, en el mejor de los casos, se almacena en caché. Un consejo común es activar sudo sin contraseña o extender el tiempo de espera de sudo para recordar una contraseña. Ambos tienen implicaciones negativas de seguridad. El tiempo de espera para introducir la contraseña también se puede desactivar y, dado que eso no sirve para ningún propósito de seguridad razonable, debería ser la solución aquí:
Defaults passwd_timeout=0
Añadir una campana en el terminal a la solicitud de la contraseña
Para llamar la atención sobre un indicador de sudo en un terminal en segundo plano, los usuarios pueden hacer simplemente que muestre un
carácter de campana
:
Defaults passprompt="^G[sudo] password for %p: "
Tenga en cuenta que
^G
es literalmente un carácter de campana. Por ejemplo en
vim
, se introduce mediante la secuencia
Ctrl+v
Ctrl+g
, or in
nano
,
Alt+v
Ctrl+g
.
Transferir alias
Los alias en
Zsh
y
Bash
normalmente solo se expanden para la primera palabra de una orden. Esto significa que sus alias normalmente no se expandirán cuando ejecute la orden
sudo
. Una forma de hacer que la siguiente palabra se expanda es hacer un alias para sudo que termine con un espacio. Añada lo siguiente a su
archivo de configuración del intérprete de línea de órdenes
:
alias sudo='sudo '
zshmisc(1) § ALIASING
describe cómo funciona esto:
Si el texto de reemplazo termina con un espacio, la siguiente palabra en la entrada del intérprete de línea de órdenes siempre es elegible para propósitos de expansiones de alias.
Así como
bash(1) § ALIASES
:
Si el último carácter del valor del alias es un espacio en blanco, la siguiente palabra de la orden que sigue al alias también se comprueba para la expansión del alias.
Desactivar sudo por cada terminal
Advertencia
Esto permitirá que cualquier proceso use su sesión sudo.
Si le molesta que sudo, de forma predeterminada, requiera introducir la contraseña cada vez que abra un nuevo terminal, configure
timestamp_type
a
global
:
Defaults timestamp_type=global
Reducir la cantidad de veces que tiene que escribir una contraseña
Si le molesta tener que volver a escribir su contraseña cada 5 minutos (predeterminado), puede cambiar esto estableciendo un valor más largo para
timestamp_timeout
(en minutos):
Defaults timestamp_timeout=10
Si está utilizando muchas órdenes sudo en una línea, es más lógico actualizar el tiempo de espera cada vez que utilice sudo que aumentar
timestamp_timeout
. Se puede actualizar el tiempo de espera con
sudo -v
(mientras que
sudo -K
se revoca inmediatamente).
Es posible que quiera automatizar esto añadiendo lo siguiente a su
.bashrc
:
alias sudo='sudo -v; sudo '
También es posible utilizar una función bash; para obtener más detalles, véase
stackexchange
.
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 superusuario, 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"
Contraseña de superusuario
Los usuarios pueden configurar sudo para solicitar la contraseña del superusuario en lugar de la contraseña de usuario añadiendo
targetpw
(usuario de destino, predeterminado a superusuario) o
rootpw
a la línea Defaults en
/etc/sudoers
:
Defaults targetpw
Para evitar exponer su contraseña de superusuario a los usuarios, puede restringirla a un grupo específico:
Defaults:%wheel targetpw
%wheel ALL=(ALL) ALL
Desactivar el acceso de superusuario
Los usuarios pueden querer desactivar el inicio de sesión del superusuario. Sin este, los atacantes deben primero adivinar un nombre de usuario configurado como sudoer, así como su contraseña. Véase por ejemplo
Denegar
.
Advertencia
Tenga cuidado, puede bloquearse al desactivar el inicio de sesión del superusuario. Sudo no se instala automáticamente y su configuración predeterminada no permite el acceso al superusuario sin contraseña ni con su propia contraseña. Asegúrese de que el usuario esté configurado correctamente como un sudoer
antes
de desactivar la cuenta de superusuario.
Si ha cambiado su archivo sudoers para utilizar rootpw como predeterminado, entonces no desactive el inicio de sesión del superusuario con ninguno de las siguientes órdenes.
Si ya está bloqueado, véase como
reiniciar la contraseña del superusuario
para obtener ayuda.
La cuenta puede ser bloqueada mediante
passwd
:
# passwd -l root
Una orden similar desbloquea al superusuario.
$ sudo passwd -u root
Alternativamente, edite
/etc/shadow
y reemplace la contraseña cifrada del superusuario
(root)
con "!":
root:!:12345::::::
Para activar de nuevo el acceso del superusuario:
$ sudo passwd root
Sugerencia
Para acceder a un shell de superusuario, incluso después de desactivar la cuenta del superusuario, utilice
sudo -i
.
kdesu
kdesu puede ser utilizado bajo
KDE
para lanzar aplicaciones gráficas con privilegios de superusuario. Es posible que, por defecto, kdesu trate de usar su incluso si la cuenta de superusuario está desactivada. Afortunadamente se puede invocar kdesu para usar sudo en lugar de su. Cree/modifique el archivo
~/.config/kdesurc
:
[super-user-command]
super-user-command=sudo
o utilice la siguiente orden:
$ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo
Ejemplo de protección con sudo
Digamos que crea tres usuarios: admin, devel y archie. El usuario "admin" se utiliza para journalctl, systemctl, mount, kill e iptables; "devel" se utiliza para instalar paquetes y modificar archivos de configuración; y "archie" es el usuario con el que inicia sesión. Para permitir que "archie" reinicie, apague y utilice netctl, haríamos lo siguiente:
Modifique
/etc/pam.d/su
y
/etc/pam.d/su-l
. Requriera que el usuario esté en el grupo wheel, pero no ponga a nadie en él.
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Descomente la siguiente línea para confiar implícitamente en los usuarios del grupo "wheel".
#auth           sufficient      pam_wheel.so trust use_uid
# Descomente la siguiente línea para requerir que un usuario esté en el grupo "wheel".
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'. Solo "archie" será parte de este grupo.
groupadd -r ssh
# gpasswd -a archie ssh
# echo 'AllowGroups ssh' >> /etc/ssh/sshd_config
Reinicie
sshd.service
.
Añada usuarios a otros grupos.
# for g in power network ;do ;gpasswd -a archie $g ;done
# for g in network power storage ;do ;gpasswd -a admin $g ;done
Ajuste los permisos en las configuraciones para que "devel" pueda modificarlos.
# 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 -o nosuid\,nodev\,noexec, /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
archie      ALL         =   (devel) SHELL, (admin) SHELL
Con esta configuración, casi nunca necesitará iniciar sesión como superusuario.
"archie" se puede conectar a sus redes inalámbricas domésticas:
$ sudo netctl start home
$ sudo poweroff
"archie" no puede utilizar netctl como cualquier otro usuario.
$ sudo -u admin -- netctl start home
Cuando "archie" necesite utilizar journalctl o terminar la ejecución de un proceso pueden cambiar a dicho usuario:
$ sudo -i -u devel
$ sudo -i -u admin
Pero "archie" no puede cambiar a superusuario:
$ sudo -i -u root
Si "archie" quiere iniciar una sesión gnu-screen como "admin" pueden hacerlo así:
$ sudo -i -u admin
[admin]$ chown admin:tty `echo $TTY`
[admin]$ screen
Configurar sudo mediante archivos complementarios en /etc/sudoers.d
sudo
analiza los archivos contenidos en el directorio
/etc/sudoers.d/
. Esto significa que en lugar de modificar
/etc/sudoers
, puede cambiar la configuración mediante archivos independientes y soltarlos en ese directorio. Esto tiene dos ventajas:
No hay necesidad de modificar un archivo
sudoers.pacnew
;
Si hay un problema con una nueva entrada, puede eliminar el archivo afectado en lugar de modificar
/etc/sudoers
(pero véase la advertencia a continuación).
El formato para las entradas en estos archivos complementarios es el mismo que para
/etc/sudoers
. Para modificarlos directamente, utilice
visudo -f /etc/sudoers.d/
nombre_archivo
. Véase
sudoers(5) § Incluir otros archivos desde sudoers
para más información.
Los archivos en el directorio
/etc/sudoers.d/
se analizan en orden lexicográfico, los nombres de archivo que contienen
.
o
~
se omiten. Para evitar problemas de clasificació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 complementarios es importante: asegúrese de que las declaraciones no se anulan a sí mismas.
Advertencia
Los archivos en
/etc/sudoers.d/
son tan frágiles como el mismo
/etc/sudoers
: cualquier archivo incorrectamente formateado evitará el funcionamiento de
sudo
. Por lo tanto, por esta misma razón, se recomienda encarecidamente usar
visudo
Edición de archivos
sudo -e
o
sudoedit
le permite modificar un archivo como otro usuario mientras ejecuta el editor de texto como su usuario.
Esto es especialmente útil para modificar archivos como superusuario sin elevar el privilegio de su editor de texto. Véase
sudo(8) § e
para más detalles.
Tenga en cuenta que puede configurar el editor para cualquier programa, por lo que, por ejemplo, uno puede usar
meld
para administrar archivos
pacnew
:
$ SUDO_EDITOR=meld sudo -e /etc/
archivo
{,.pacnew}
Activar insultos
Los usuarios pueden activar el huevo de Pascua de insultos en sudo añadiendo la siguiente línea en el archivo
sudoers
con
visudo
.
/etc/sudoers
Defaults insults
Al introducir una contraseña incorrecta se reemplazará el mensaje
Inténtelo de nuevo.
por insultos en tono de humor.
Solución de problemas
Problemas de SSH sin TTY
SSH no asigna una tty de forma predeterminada cuando ejecuta una orden remota. Sin una tty asignada, sudo no puede evitar que se muestre la contraseña. Puede utilizar la opción de ssh
-t
para forzar la asignación de una tty.
La opción
requiretty
de
Defaults
permite al usuario ejecutar sudo solo 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 unirá el valor
umask
del usuario con su propia umask (que por defecto es 0022). Esto evita que sudo cree archivos con permisos más abiertos que los que permite el umask del usuario. Si bien este es un valor predeterminado cuando no se usa umask personalizada, esto puede llevar a situaciones en las que una utilidad ejecutada por sudo puede crear archivos con permisos diferentes que si se ejecutara directamente desde el superusuario
(root)
. Si surgen errores a partir de esto, sudo proporciona un medio para reparar la umask, incluso si la umask deseada es más permisiva que la umask que el usuario ha especificado. Añadir esto (usando
visudo
) anulará el comportamiento predeterminado de sudo:
Defaults umask = 0022
Defaults umask_override
Esto establece el umask de sudo en umask predeterminado del superusuario (0022) y anula el comportamiento predefinido, utilizando siempre la umask indicada, independientemente de la umask definida del usuario.