Je veux donner un accès non-sudo à un utilisateur non root sur ma machine, il y a un utilisateur dns-manager, son seul rôle est d'exécuter toutes les commandes BIND (rndc, dnssec-keygen) etc.
Maintenant, chaque fois qu'il doit exécuter une commande, il tape,
sudo rndc reload
Existe-t-il un moyen de me débarrasser de ce sudo, mais uniquement sur un ensemble particulier de commandes (et uniquement pour dns-manager)?
sudo
sert. Quelles sont vos objections commerciales à son utilisationsudo
pour cela?sudo
. Quelles sont les objections?sudo
alors? Ou sudo avec mot de passe pour exécuter l'outil de gestion DNS , qui peut ensuite fonctionner avecnamed
le privilège de groupe ou d'utilisateur, ou le privilège root, selon les besoins.sudo
. En essayant de nous l'exprimer, il peut soit dissiper notre confusion, soit la sienne - ou les deux!Réponses:
Si je comprends bien vos commentaires, le problème ici est que la commande sera émise via une connexion qui n'a pas la possibilité d'entrer le mot de passe par défaut que sudo demande. De plus, dans de nombreuses distributions de système d'exploitation, sudo exigera par défaut un TTY - ce que ce programme peut ne pas avoir.
Cependant, sudo est capable d'avoir une structure d'autorisations très fine, permettant à un ou plusieurs utilisateurs d'émettre une commande particulière sans mot de passe et ATS. Ci-dessous, je vais montrer trois façons de configurer cela pour vos besoins. Quel que soit celui que vous choisissez, l'utilisateur pourra désormais exécuter la commande
sudo rndc reload
sans avoir à saisir de mot de passe.( De plus, cela peut être inutile, mais ... s'il vous plaît rappelez - vous de faire une copie de sauvegarde de votre fichier sudoers avant de le modifier, de garder une coquille où vous êtes ouvert racine dans le cas où vous devez revenir à la sauvegarde et à modifier en utilisant
visudo
au lieu desudo vi /etc/sudoers
. Espérons que ces précautions seront inutiles, mais ... mieux de les avoir et pas besoin d' eux que l'inverse!)1. Si vous ne souhaitez pas exiger un ATS pour toute demande
Le moyen le plus simple de se débarrasser des exigences TTY (s'il en existe un) est de s'assurer que la ligne commençant par
Defaults
in/etc/sudoers
ne contient pas le motrequiretty
- à la place, il doit contenir!requiretty
. Cependant, si vous faites cela, cela signifie qu'aucune commande sudo ne nécessitera un tty!Vous devrez également ajouter la ligne
2. Si vous souhaitez exiger un ATS pour tous les utilisateurs sauf celui-ci
Cela peut être fait en définissant une valeur par défaut pour cet utilisateur, comme ceci:
3. Si vous souhaitez requre un TTY pour toutes les commandes sauf celle-ci par cet utilisateur
C'est un peu plus complexe, en raison de la syntaxe du fichier sudoers. Vous devez créer un alias de commande pour la commande, puis définir une valeur par défaut pour cet alias de commande, comme suit:
la source
Oui. sudo peut être configuré de manière très flexible. Néanmoins, je dois mentionner: ces types de solutions ne doivent pas être considérés comme très sécurisés, et ils ne doivent être utilisés que dans un environnement coopératif où d'autres contrôles sont en place (ainsi, vous pouvez accorder ces privilèges améliorés à votre fidèle subordonné, mais ne devrait pas le faire pour un client que vous ne connaissez que sur le net).
La configuration sudo est présente
/etc/sudoers
dans la plupart des systèmes. Vous pouvez découvrir sa syntaxe par Google ou par uneman sudo
commande.Vous ne devez pas modifier ce fichier directement; cela peut conduire à des conditions de concurrence sécuritaires. À la place, utilisez la
visudo
commande (qui est un wrapper autour de votre$EDITOR
variable d'environnement).Après avoir configuré sudo, vous pouvez facilement envelopper les commandes visibles. C'est très simple:
/usr/local/dnsadmin/bin
)Créez un script wrapper pour les commandes que vous souhaitez rendre utilisables sans sudo. Ce sera une commande très simple, par exemple,
/usr/local/dnsadmin/bin/rndc
sera:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Obtenez ce répertoire dans leur
PATH
variable d'environnement (par exemple par un système ou leur local.profile
).la source
exec
dans le script shell au lieu d'appeler directement la commande? (Je ne dis pas que c'est mal, j'aime juste savoir pourquoi tu le fais pour que je puisse peut-être apprendre quelque chose)exec
, la commande appelée sera substituée à la place du shell. La coquille disparaîtra. Sans exécutable, le shell démarrera cette commande, attendra sa fin, puis se fermera. Cette seconde, sans exécutable, signifie plusieurs processus de coopération, ce qui est inutile. Mais il n'y a pas de grande différence, sans exécutable, cela fonctionnerait aussi bien qu'avec cela.Bien que ce ne soit pas une solution générale dans le cas spécifique où
rndc
vous n'en avez pas du tout besoinsudo
.rndc
peut communiquer avec n'importe quelnamed
processus via une socket locale ou un port distant, en utilisant une clé secrète pour s'authentifier. Par défaut (ou du moins, pour debian, qui est la distribution que j'utilise), ce fichier peut être trouvé/etc/bind/rndc.key
et n'est normalement lisible que par l'utilisateurbind
et le groupebind
.Quiconque a un accès en lecture à ce fichier de clé (ou à une copie identique de celui-ci) peut utiliser
rndc
pour contrôler le serveur BIND, donc la solution la plus simple dans ce cas particulier serait d'ajouter l'utilisateur aubind
groupe.Un nombre surprenant de démons communs ont quelque chose de similaire (je suis personnellement en train de comprendre les possibilités des powerdns à cet égard, mais cela semble prometteur jusqu'à présent). Si vous ne voulez pas le faire,
sudo
vous devrez vérifier si ce que vous voulez accomplir est possible au cas par cas.la source
Vous ne voulez pas utiliser sudo pour accorder root à certaines commandes. Au lieu de cela, vous pouvez chmod 4750 un programme spécifique [qui peut encapsuler la commande], pour élever les droits d'un utilisateur normal pour l'exécuter en tant que root.
la source