Difference between revisions of "Sudo (Español)"
m (→Variables de entornos: Entorno sin s.) |
m (→Usando visudo: Pequeña corrección.) |
||
Line 49: | Line 49: | ||
Ejecute {{ic|sudo -ll}} para visualizar la configuración actual de sudo, o {{ic|sudo -lU ''usuario''}} para un usuario específico. | Ejecute {{ic|sudo -ll}} para visualizar la configuración actual de sudo, o {{ic|sudo -lU ''usuario''}} para un usuario específico. | ||
− | === | + | === Utilizando visudo === |
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}}. | 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}}. | ||
Line 61: | Line 61: | ||
# EDITOR=nano visudo | # EDITOR=nano visudo | ||
− | Alternativamente, puede editar una copia del archivo {{ic|/etc/sudoers}} y verificarlo | + | Alternativamente, puede editar una copia del archivo {{ic|/etc/sudoers}} y verificarlo utilizando {{ic|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 [[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): | 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): |
Revision as of 23:04, 11 August 2018
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
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
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.
Utilizando 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
.
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 utilizando 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
:
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
%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
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
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.
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
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
.