Le sudo est-il universel?

26

J'écrivais quelques instructions sur la façon d'installer quelque chose (lié à TeX - si vous ne le demandez pas, je ne gâcherai pas votre journée en fournissant plus de détails) et utilisé sudopour installer à l'échelle du système. Quelqu'un a déclaré qu'il ne pensait pas que cela sudoétait disponible sur toutes les distributions Linux (ou Unix).

Existe-t-il des distributions Unix qui n'en ont pas sudo, et si oui, quelles sont-elles? Y at - il une commande universellement reconnu « Retrouve moi SUPERUSER privilèges » qui est sur tous les systèmes?

Espace de boucle
la source

Réponses:

34

sudo ne peut pas être considéré comme universel:

  • Red Hat Enterprise Linux : sudoest installé par défaut sur Red Hat Enterprise Linux et ses dérivés 1, mais il s'installe uniquement prêt à l'emploi dans RHEL 7 et versions ultérieures.

    Red Hat Enterprise Linux 7 a ajouté une nouvelle option à l'écran d'installation où vous créez le premier utilisateur non root , une case à cocher intitulée «Rendre cet utilisateur administrateur». Son objectif n'est pas documenté sur cette page du guide d'installation, mais l'un de ses effets est de permettre à cet utilisateur d'exécuter n'importe quelle commande sudo. Pour ce faire, il ajoute cet utilisateur au wheelgroupe, qui peut exécuter n'importe quelle commande dans la sudoconfiguration du package de stock .

    Red Hat Enterprise Linux 3 à 6 est également installé sudopar défaut 2, mais jusqu'à RHEL 7, il était livré configuré de telle sorte que seul rootpouvait exécuter des commandes à travers lui. Le moyen le plus simple de résoudre ce problème consiste à ajouter un ou plusieurs utilisateurs au wheelgroupe, puis à exécuter en visudotant que root et à ne pas commenter la %wheel ALL=(ALL)...ligne.

  • Debian : Depuis Debian 9, une installation minimale inclut sudo.

    Dans Debian 7 et 8, vous deviez sélectionner l' ensemble de paquets " Utilitaires système standard " pendant l'installation pour obtenir sudo. Si vous installez de sudocette façon, le programme d'installation du système d'exploitation ajoutera automatiquement l'utilisateur non administratif que vous avez créé plus tôt dans le processus d'installation au sudogroupe, qui est autorisé à exécuter toutes les commandes.

    Dans Debian 6 et versions antérieures, vous deviez installer sudovia apt-getaprès l'installation et le configurer à la main pour accorder aux utilisateurs non root la possibilité de l'utiliser.

  • FreeBSD : sudon'est pas installé par défaut dans FreeBSD. Vous devez le construire à partir des ports.

  • NetBSD : Identique à FreeBSD.

  • OpenBSD : sudoutilisé pour être installé par défaut dans OpenBSD, mais ils ont mis à doaspartir de 5.8, sorti en Octobre ici à 2015 . doasnavires désactivés par défaut.

    Pour obtenir sudoles versions actuelles, vous devez l'installer à partir du référentiel de packages. Le sudopaquet d'OpenBSD est configuré un peu comme dans RHEL 3 à 6, de sorte que seul rootpeut exécuter des commandes à travers lui, ce qui va plutôt à l'encontre du but de sudo. Si vous avez ajouté un non- rootutilisateur lors de l'installation, il a été ajouté au wheelgroupe, donc le moyen le plus simple de rendre sudoutile sur un système OpenBSD est de décommenter la %wheel ALL=(ALL)...ligne via visudo.

  • Solaris : sudoest installé par défaut dans Solaris 11, mais Solaris 10 et les versions antérieures utilisent le même mais pas tout à fait le même pfexec.

    Vous pouvez obtenir sudopour les anciens systèmes, mais les valeurs par défaut sont importantes. Solaris 10 et les versions antérieures seront avec nous pendant des années, donc si vous avez Solaris dans votre environnement et que vous ne contrôlez pas personnellement ces systèmes et que vous pouvez donc vous assurer sudoqu'il est là, vous ne pouvez pas compter sur lui.

Plus le système est ancien, plus ses chances sont grandes sudo. Bien qu'il sudosoit très ancien , il n'a commencé à devenir populaire qu'au milieu des années 2000. Il est très peu probable que des systèmes plus anciens soient installés sudo. Les boîtes Unix ont tendance à vivre longtemps, il n'est donc pas inconcevable que vous utilisiez encore un tel système aujourd'hui.

Je ne compte que sudosur des systèmes que je gère personnellement, ou sur des systèmes comme Ubuntu, macOS ou openSuSE où c'est le seul moyen d'obtenir des privilèges root, par défaut.

suest plus proche d'une commande universelle "obtenez-moi des privilèges de superutilisateur" que sudo, mais vous avez alors des systèmes comme Ubuntu et macOS où le compte root est verrouillé par défaut spécifiquement pour vous forcer à utiliser à la sudoplace de su. Donc, vous ne pouvez pas appeler suuniversel non plus.


Notes de bas de page :

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

  2. Oui, même dans des installations minimales.

Warren Young
la source
9

sudoest un utilitaire disponible sur presque tous les systèmes Linux.
Cependant, il n'est pas fourni par défaut dans toutes les distributions. Cependant, toutes les principales distributions l'ont fourni par défaut.

Les distributions Linux comme Arch Linux, Gentoo, LFS, etc. qui permettent à l'utilisateur une personnalisation complète n'ont pas sudo par défaut.

Sur Arch Linux, le système de base n'est pas fourni avec sudoinstallé. L'utilisateur doit télécharger sudoet éditer manuellement le fichier sudoers.
Idem pour Gentoo et LFS. Je ne connais aucune autre distribution majeure sans sudo.

Et non, je ne pense pas qu'il existe quoi que ce soit de plus universel que sudod'accorder des privilèges de super-utilisateur. Autrement dit, en dehors de la connexion en tant que root.

darnir
la source
1
sudopeut être intégré à la plupart des distributions, mais tous ne configurent pas chaque utilisateur comme capable de l'exécuter.
jsbillings
Un autre bon point. Dépend de ce que dit le fichier sudoers.
darnir
7

La distribution la plus utilisée, Ubuntu, sudoest la méthode recommandée pour devenir root (lors de l'utilisation de la ligne de commande - les utilisateurs qui s'en tiennent à l'interface graphique recevront une invite de mot de passe sans comprendre ni se soucier de ce qui se passe sous le capot). D'autres distributions peuvent ou non encourager la mise en place de sudo et peuvent ou non être expédiées. D'un autre côté, il suest disponible partout et utilisable sur la plupart des systèmes sauf ceux où seul sudoest disponible car l'utilisateur n'aura pas le mot de passe root.

Entre suet sudo, vous couvrirez presque tous vos utilisateurs. Les quelques exotiques qui ont besoin califeou opou pfexecsavoir quoi faire déjà. Même s'ils ne le font pas, un système qui n'utilise suni sudon'est susceptible d'avoir des fichiers dans des endroits inconnus et suffisamment de choses auxquelles vous n'avez pas pensé que vos instructions ne fonctionneront probablement pas de toute façon.

Gilles 'SO- arrête d'être méchant'
la source
6

Pour répondre à votre question, le plus précisément, non sudon'est pas considéré comme universel. À vrai dire, le concept entier d '«universel» est souvent un hareng rouge. Cela est particulièrement vrai en ce qui concerne la compatibilité entre les distributions. Une fois que vous avez jeté dans la multitude de versions de logiciels différentes, l'universalité devient semi-irréaliste. Le scriptage par nature est pragmatique, s'il était pédant, il serait pratiquement impossible d'écrire des scripts portables.

Normalement, je jauge mon environnement d'exécution prévu, une distribution Linux semi-moderne, je m'attends à un shell POSIX avec les utilitaires GNU courants. Pour les scripts qui pourraient s'exécuter en dehors de Linux, je n'attends que la norme POSIX complète. De toute évidence, de nombreux scripts sont spécifiques à Linux ou spécifiques à la distribution, ce qui réduit souvent la portée de la portabilité.

Pour répondre à votre cas de script spécifique,

#!/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

ce script collé est un compliment shell POSIX, j'écris toujours compatible avec Dash.

JM Becker
la source
Mais votre script ne nécessite-t-il pas l'installation de sudo? Existe-t-il un moyen d'accéder au super-utilisateur sans utiliser sudo? Grâce à un script simple?
darnir
@darnir: Non, le script collé ne nécessite pas sudod'être installé. Il nécessite une exécution superutilisateur et peut utiliser sudos'il est disponible. S'il sudon'est pas disponible, le script doit être exécuté en tant qu'utilisateur root, ou il le sera die.
JM Becker,
@darnir: De plus, il n'y a vraiment rien qui s'appelle "script simple". Presque tout, à l'exception des shell intégrés, se fait via des binaires réguliers. C'est tout l'intérêt du shell, d'appeler d'autres commandes, qu'elles soient interactives ou automatisées. C'est cette caractéristique déterminante, qui sépare le shell des langages de programmation à usage général. Donc, quelle que soit la façon dont vous acquérez le superutilisateur, vous le faites via des commandes externes ..., en supposant que vous ne codez pas avec des interfaces de noyau brutes.
JM Becker du
1
@varesa: Fait intéressant, Ubuntu est exactement le contraire sur les configurations par défaut sudo / su. Vous pouvez vérifier les autorisations sudo dont dispose un utilisateur en exécutant sudo -l. Malheureusement, il est inutilisable dans cette situation, car il peut nécessiter la saisie d'un mot de passe. En y réfléchissant plus attentivement, je pense en fait que le concept entier pourrait être mieux réalisé via un test par distribution. Utiliser à su -cmoins d'exécuter une sudistribution désactivée par défaut, auquel cas utiliser sudo su -c. Comme d'autres l'ont mentionné, il est préférable de laisser l'élévation du superutilisateur à l'utilisateur, je considérerais tout script autour comme une commodité.
JM Becker
1
@varesa: J'ai mis à jour le script collé, pour réduire les chances d'utiliser un non configuré sudo. Cela devrait s'exécuter correctement dans la plupart des distributions, en supposant que les configurations su/ par défaut sudo. Je sais qu'un Ubuntu obsolète, pré lsb_release, devrait être abordé ... Mais ce n'est vraiment qu'un exemple, et pourrait évidemment être étendu.
JM Becker du