Vous pouvez à peine mentionner le sudo commande sans rappeler la bande XKCD hilarante sur la fabrication de sandwichs. Il semble que sudo est le pouvoir magique de faire en sorte qu’un système Linux fasse ce que vous voulez. Le seul problème est que ces superpuissances ne sont pas à prendre à la légère.

CC-BY-NC-2.5 par [XKCD]

Si vous surfez sur le Web, par exemple, vous ne voulez vraiment pas être root, car si quelqu’un de méchant prend le contrôle de votre ordinateur, il pourrait faire beaucoup plus de mal avec votre mot de passe root. Mais encore, il y a des moments où vous voulez exécuter certaines commandes qui sont normalement uniquement root et que vous ne voulez pas vous soucier d’un mot de passe. Heureusement, sudo peut gérer ce cas d’utilisation très facilement.

Pourquoi?

À titre d’exemple simple, supposons que vous aimiez éteindre votre ordinateur à la fin de la journée. Vous exécutez la commande shutdown depuis le terminal mais cela ne fonctionne pas car vous n’êtes pas root. Il faut alors recommencer avec sudo et si vous ne vous êtes pas connecté récemment, indiquez votre mot de passe. Pouah.

Dans mon cas, j’ai commencé à y penser quand j’ai eu besoin de manipuler le dbus service dans un script de démarrage. Je voulais que le script manipule uniquement ce service en tant qu’utilisateur normal et ne demande pas de mot de passe, d’autant plus que certains utilisateurs n’ont pas sudo pouvoirs de toute façon. Dans tous les cas, vous aimeriez un moyen de permettre aux utilisateurs normaux d’exécuter des commandes très spécifiques sans autorisation supplémentaire.

Un moyen simple mais mauvais

Votre première pensée pourrait être d’encapsuler le code dans un script shell appartenant à root et de définir le suid peu de sorte que lorsque vous l’exécutez, le script s’élève pour avoir un accès root. Cela fonctionnera, mais cela semble être un problème de sécurité potentiel. Après tout, un script peut tout faire. Êtes-vous sûr qu’un utilisateur n’a aucun moyen de le forcer à faire autre chose ? Êtes-vous vraiment sûr?

Certes, il faut toujours y penser. Si, disons, vous permettez à quelqu’un de courir emacs en tant que root, cette personne pourrait alors ouvrir un shell et avoir un accès complet au système même si elle n’avait pas d’accès root autrement. Ce n’est pas bon. Mais il est généralement plus facile de raisonner sur des programmes qui ont des fonctions spécifiques au lieu d’un script shell à usage général.

Configuration

C’est là que sudo entre. Il n’y a vraiment qu’un seul endroit pour s’installer sudo, bien que la plupart des distributions modernes aient cet endroit pour lire les fichiers à partir d’un deuxième endroit que vous pouvez également utiliser. Le lieu principal est /etc/sudoers et, comme vous pouvez le deviner, vous devez être root pour modifier ce fichier. En fait, vous ne devriez pas du tout l’ouvrir avec un éditeur normal. Utilisation visudo qui vérifie que vous n’allez pas vous empêcher d’accéder à root en gâchant ce fichier. Ce serait très mauvais sur les systèmes où il n’y a aucun moyen de se connecter directement en tant que root.

Lorsque vous utilisez visudo, un éditeur se lance. De nos jours c’est souvent nano par défaut, bien que vi est le choix historique comme vous pouvez le voir par son nom. Si vous préférez autre chose, l’outil prendra votre VISUAL ou alors EDITOR variable d’environnement. Eh bien… en quelque sorte.

Les auteurs de visudo et sudo étaient paranoïaques et à juste titre. Il existe des options pour supprimer toutes les variables d’environnement avant d’exécuter une commande ou pour ne conserver que celles sélectionnées. Donc, la plupart du temps, si vous essayez de définir l’une de ces variables d’environnement, elle est effacée par sudo. Pour résoudre ce problème, vous devrez survivre avec l’éditeur que vous obtenez par défaut une fois. Vous pouvez conserver les variables d’environnement et fournir une liste d’éditeurs acceptés en plaçant ceci en haut du fichier :

Defaults env_reset
Defaults env_keep=VISUAL
Defaults env_keep=EDITOR
Defaults editor=/usr/bin/nano:/usr/bin/emacs:/usr/bin/vi

Gardez à l’esprit que votre DISPLAY La variable ne passera pas non plus, alors ne vous attendez pas à ce qu’un éditeur d’interface graphique fonctionne sans d’autres modifications de configuration.

Si visudo n’aime pas vos modifications à cause d’une erreur de syntaxe, il vous demandera quoi faire. presse ? pour voir vos options. Vous pouvez le dire de toute façon, mais je ne le recommande pas.

Maintenant quoi?

Il existe de nombreuses commandes de syntaxe obscures que vous pouvez mettre en sudoers pour obtenir des effets différents. Dans ce cas, nous voulons exécuter une commande comme shutdown ou alors service sans mot de passe pour un utilisateur spécifique. Disons que l’utilisateur est jolly_wrencher :

jolly_wrencher ALL= NOPASSWD: /usr/sbin/shutdown

Cela raconte sudo que l’utilisateur sur toutes les machines peut exécuter la commande sans mot de passe. Si la commande prend des paramètres, l’utilisateur est libre de les fournir. Cependant, vous pouvez également fournir des paramètres qui doivent correspondre ou utiliser un espace entre guillemets pour impliquer qu’aucun argument n’est autorisé.

Dans le cas de quelque chose qui est interdit, sudo peut toujours vous permettre d’exécuter la commande si vous fournissez le mot de passe et que vous étiez autrement autorisé à l’exécuter. Sinon, pas de dés.

Par exemple, avec le dbus exemple, j’ai utilisé deux lignes :

jolly_wrencher ALL= NOPASSWD: /usr/sbin/service dbus status
jolly_wrencher ALL= NOPASSWD: /usr/sbin/service dbus --full-restart

Entretien plus facile

De nombreuses distributions auront désormais une ligne finale dans le sudoers fichier qui ressemble à ceci :

#includedir /etc/sudoers.d

Cela analysera le répertoire nommé à la recherche de fichiers (à moins qu’ils n’aient des caractères ~ ou . dans le nom) et les traitera également. Donc dans mon cas, j’ai les deux lignes sur dbus dans un fichier /etc/sudoers.d/dbus-service. Vous devez toujours utiliser visudo éditer. Dans les versions récentes, il vous suffit de passer le nom du fichier que vous souhaitez modifier. Les anciennes versions avaient besoin d’un -f option. Après l’édition, le système vérifie l’ensemble sudoers fichier pour les erreurs, il est donc plus sûr que de modifier les fichiers directement.

Vous pouvez faire un peu plus avec sudoet sudoers. Cependant, vous devriez résister à l’envie d’en faire trop. Il est facile de faire des hypothèses sur la sécurité qui vous causent des ennuis. Cependant, il y a toujours des cas où vous avez besoin de ce genre de puissance et, comme d’habitude, Linux ne déçoit pas.