¿Cuán universal es el sudo?

26

Estaba escribiendo algunas instrucciones sobre cómo instalar algo (relacionado con TeX; si no pregunta, no arruinaré su día al proporcionar más detalles) y solía sudoinstalar todo el sistema. Alguien comentó que no creían que sudoestuviera disponible en todas las distribuciones de Linux (o Unix).

¿Hay distribuciones de Unix que no tienen sudo, y si es así, cuáles son? ¿Existe un comando universalmente reconocido "Obtener privilegios de superusuario" que se encuentra en todos los sistemas?

Espacio de bucle
fuente

Respuestas:

34

sudo no puede considerarse universal:

  • Red Hat Enterprise Linux : sudose instala de forma predeterminada en Red Hat Enterprise Linux y sus derivados, 1 pero solo se instala listo para usar en RHEL 7 y versiones posteriores.

    Red Hat Enterprise Linux 7 agregó una nueva opción a la pantalla de instalación donde crea el primer usuario no root , una casilla marcada como "Hacer que este usuario sea administrador". Su propósito no está documentado en esa página de la guía de instalación, pero uno de sus efectos es permitir que ese usuario ejecute cualquier comando sudo. Lo hace agregando ese usuario al wheelgrupo, que puede ejecutar cualquier comando en la sudoconfiguración del paquete de valores .

    Red Hat Enterprise Linux 3 a 6 también está instalado sudopor defecto, 2 pero hasta RHEL 7, se envió configurado de manera tal que solo rootpodía ejecutar comandos a través de él. La forma más fácil de solucionar esto es agregar uno o más usuarios al wheelgrupo, luego ejecutarlos visudocomo root y descomentar la %wheel ALL=(ALL)...línea.

  • Debian : a partir de Debian 9, incluye una instalación mínima sudo.

    En Debian 7 y 8, tenía que seleccionar el conjunto de paquetes " Utilidades de sistema estándar " durante la instalación para obtener sudo. Si instala de sudoesa manera, el instalador del sistema operativo agregará automáticamente al grupo el usuario no administrativo que creó anteriormente en el proceso de instalación sudo, que tiene permiso para ejecutar todos los comandos.

    En Debian 6 y anteriores, era necesario instalar sudoa través de apt-getdespués de la instalación y configurarlo manualmente para conceder a los usuarios que no sean root la posibilidad de usarlo.

  • FreeBSD : sudono está instalado por defecto en FreeBSD. Tienes que construirlo desde los puertos.

  • NetBSD : igual que FreeBSD.

  • OpenBSD : sudosolía ser instalado por defecto en OpenBSD, pero han conmutado a doaspartir de 5.8, publicado en octubre el año 2015 . doasnaves deshabilitadas por defecto.

    Para obtener sudolas versiones actuales, debe instalarlo desde el repositorio de paquetes. El sudopaquete de OpenBSD está configurado de manera muy similar a RHEL 3 a 6, por lo que solo rootpuede ejecutar comandos a través de él, lo que en cambio no cumple con el propósito sudo. Si agregó un rootusuario que no es usuario durante la instalación, se agregó al wheelgrupo, por lo que la forma más sencilla de hacer que sea sudoútil en un sistema OpenBSD es descomentar la %wheel ALL=(ALL)...línea visudo.

  • Solaris : sudose instala de manera predeterminada en Solaris 11, pero Solaris 10 y versiones anteriores utilizan el mismo pero no el mismo pfexec.

    Puede obtener sudosistemas más antiguos, pero los valores predeterminados son importantes. Solaris 10 y versiones anteriores estarán con nosotros durante años, por lo que si tiene Solaris en su entorno y no controla personalmente esos sistemas y puede asegurarse de que sudoestá allí, no puede contar con él.

Cuanto más antiguo es el sistema, mayores son las posibilidades de que no tenga sudo. Aunque sudoes muy antiguo , no comenzó a popularizarse hasta mediados de la década de 2000. Es muy poco probable que tengan sistemas más antiguos que eso sudo. Las cajas Unix tienden a vivir mucho tiempo, por lo que no es inconcebible que todavía se encuentre con ese sistema hoy.

Solo cuento con sudosistemas que administro personalmente, o con sistemas como Ubuntu, macOS o openSuSE, donde es la única forma de obtener privilegios de root, de manera predeterminada.

suestá más cerca de un comando universal "obtener privilegios de superusuario" que sudo, pero luego tiene sistemas como Ubuntu y macOS donde la cuenta raíz está bloqueada por defecto específicamente para forzarlo a usar en sudolugar de su. Entonces, tampoco puedes llamar suuniversal.


Notas al pie :

  1. CentOS, Oracle Linux, Scientific Linux ...

  2. Sí, incluso en instalaciones mínimas.

Warren Young
fuente
9

sudoes una utilidad que está disponible en casi todos los sistemas Linux.
Sin embargo, no está incluido por defecto en todas las distribuciones. Sin embargo, todas las distribuciones principales lo incluyen por defecto.

Las distribuciones de Linux como Arch Linux, Gentoo, LFS, etc., que permiten al usuario una personalización completa no tienen sudo de forma predeterminada.

En Arch Linux, el sistema base no viene con sudoinstalado. El usuario debe descargar sudoy editar manualmente el archivo sudoers.
Lo mismo para Gentoo y LFS. No conozco ninguna otra distribución importante sin sudo.

Y no, no creo que exista nada más universal que sudootorgar privilegios de superusuario. Es decir, aparte de iniciar sesión como root.

Darnir
fuente
1
sudopuede estar incluido en la mayoría de las distribuciones, pero no todas configuran a cada usuario como capaz de ejecutarlo.
jsbillings
Otro buen punto. Depende de lo que diga el archivo sudoers.
darnir
7

La distribución más utilizada, Ubuntu, se utiliza sudocomo método recomendado para convertirse en root (cuando se usa la línea de comandos: los usuarios que se adhieren a la GUI recibirán una solicitud de contraseña sin comprender ni preocuparse por lo que sucede debajo del capó). Otras distribuciones pueden o no alentar la configuración de sudo y pueden o no enviarlo. Por otro lado, suestá disponible en todas partes y se puede usar en la mayoría de los sistemas, excepto en aquellos donde solo sudoestá disponible porque el usuario no tendrá la contraseña de root.

Entre suy sudo, cubrirá a casi todos sus usuarios. La exótica pocos que necesitan califeo opo pfexecsabe qué hacer ya. Incluso si no lo hacen, un sistema que no utiliza suni sudoes probable que tenga archivos en lugares desconocidos y suficientes cosas en las que no haya pensado que sus instrucciones probablemente no funcionarán de todos modos.

Gilles 'SO- deja de ser malvado'
fuente
6

Para responder a su pregunta, más exactamente, no sudono se considera universal. A decir verdad, todo el concepto de 'universal' es a menudo una pista falsa. Esto es especialmente cierto con respecto a la compatibilidad de distribución cruzada. Una vez que te lanzas a la multitud de diferentes versiones de software, la universalidad se vuelve poco realista. El guión por naturaleza es pragmático, si fuera pedante, escribir guiones portátiles sería prácticamente imposible.

Normalmente calculo mi entorno de ejecución previsto, una distribución de Linux semi-moderna, espero un shell POSIX con las utilidades GNU comunes. Para los scripts que podrían ejecutarse fuera de Linux, solo espero el estándar POSIX completo. Obviamente, muchos scripts son específicos de Linux, o específicos de la distribución, por lo que a menudo se reduce el alcance de la portabilidad.

Para abordar su caso específico de secuencias de comandos,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

ese script pegado es un complemento de shell POSIX, siempre escribo Dash compatible.

JM Becker
fuente
Pero, ¿no requiere su script que se instale sudo? ¿Hay alguna forma de obtener acceso de superusuario sin el uso de sudo? ¿A través de secuencias de comandos simples?
darnir
@darnir: No, el script pegado no requiere sudoser instalado. Requiere la ejecución del superusuario y puede usarse sudosi está disponible. Si sudono está disponible, el script debe ejecutarse como usuario root, o lo hará die.
JM Becker
@darnir: Además, realmente no hay nada llamado "script simple". Casi todo, excepto los complementos integrados de shell, se realiza a través de binarios regulares. Ese es el objetivo del shell, llamar a otros comandos, ya sean interactivos o automatizados. Es esta característica definitoria, la que separa los lenguajes de programación de shell de uso general. Entonces, independientemente de cómo adquiera el superusuario, lo hará a través de comandos externos ..., suponiendo que no esté codificando con interfaces de kernel sin procesar.
JM Becker
1
@varesa: Curiosamente, Ubuntu es exactamente lo contrario en las configuraciones predeterminadas de sudo / su. Puede verificar qué permisos de sudo tiene disponible un usuario, ejecutándolo sudo -l. Desafortunadamente, es inutilizable en esta situación, ya que puede requerir la entrada de contraseña. Pensando en esto más cuidadosamente, en realidad creo que todo el concepto podría lograrse mejor a través de una prueba por distribución. Usar a su -cmenos que se ejecute una sudistribución deshabilitada predeterminada, en cuyo caso usar sudo su -c. Como otros han mencionado, es mejor dejar la elevación del superusuario al usuario, consideraría que cualquier scrip-around es conveniente.
JM Becker
1
@varesa: He actualizado el script pegado, para reducir la posibilidad de usar un no configurado sudo. Esto debería ejecutar correctamente en la mayoría de distribuciones, en el supuesto defecto su/ sudoconfiguraciones. Sé que un Ubuntu obsoleto, pre lsb_release, necesitaría ser abordado ... Pero esto realmente es solo un ejemplo, y obviamente podría extenderse.
JM Becker