Ajouter un sudoer de manière non interactive à partir de la ligne de commande

6

(Sur Centos via Docker)

Je sais que je peux ajouter un sudoer en utilisant visudo. Est-il possible d’ajouter un utilisateur à la liste sudoer directement à partir de la ligne de commande, afin que je n’aie pas à le faire de manière interactive?

Je demande parce que j'essaie de provisionner mon conteneur Docker centos qui ne joue pas avec l'interactivité.

Roy Truelove
la source

Réponses:

2

Vous pouvez utiliser catpour ajouter du texte à la fin de /etc/sudoers. Tout d’abord, faites une copie de sauvegarde de votre /etc/sudoersfichier. Ensuite:

cat >> /etc/sudoers
...type one or more lines here...
[control-D]

Assurez-vous absolument d’utiliser deux caractères supérieurs à ( >>) et pas un seul, sinon vous écraserez tout le contenu de votre fichier.

Mhucka
la source
1
comment est-ce "non-interactivement"? et pourquoi cette réponse est-elle acceptée?
Alexander Mills
1
L'OP a demandé un moyen de le faire depuis la ligne de commande, sans utiliser un éditeur tel que visudo. Je crois qu'ils voulaient dire "interactif" dans le sens d'utiliser un éditeur; ainsi, il s’agit d’une opération "non interactive" car cette approche ne nécessite pas d’éditeur. (Évidemment, une personne devra quand même taper les noms d'utilisateurs d'une manière ou d'une autre , donc il n'y a pas moyen de contourner cette partie.) En ce qui concerne la raison de son acceptation, eh bien, je suppose que cela doit avoir suffisamment répondu à la question du PO pour qu'il soit satisfait.
Mhucka
ok, pour moi interactif signifie tout ce qui nécessite une entrée utilisateur en direct. Éditeur ou ligne de commande. Sémantique je suppose. Merci.
Alexander Mills
Ce que vous dites a également un sens - l'expression est suffisamment ambiguë pour que les gens aient généralement besoin de dire quelque chose de plus pour clarifier leurs intentions. J'ai deviné, mais j'aurais facilement pu me tromper. Concrètement, ce que j'ai écrit ci-dessus pourrait être écrit dans un fichier script (par exemple, un script sh); Ce que TemporalWolf a écrit est ce qui se trouve dans un fichier script. Et honnêtement, étant donné que la question du PO concernait spécifiquement Docker, je pense que la réponse de TemporalWolf pourrait en réalité être meilleure.
Mhucka
@AlexanderMills Vous avez raison de dire que c'est interactif, mais il peut facilement être modifié pour devenir non interactif.
Duncan X Simpson
11

J'ai eu un problème similaire en essayant de faire en sorte que mon conteneur Docker permette aux scripts Jenkins d'utiliser des commandes sudo sans demander de mot de passe.

Ceci a été résolu via le fichier Dockerfile:

RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Loup temporel
la source
2

Pour pouvoir le faire, vous devez vous assurer que vous avez la ligne suivante dans votre sudoersfichier:

%sudo   ALL=(ALL:ALL) ALL

Vous pouvez personnaliser la ligne ci-dessus pour modifier les autorisations comme s'il %sudos'agissait d'un utilisateur. Cette ligne permettra à tous les utilisateurs du sudogroupe d'utiliser sudo.

Maintenant, pour permettre l' <username>utilisation sudo, vous pouvez simplement faire en usermod -a -G sudo <username>tant que root, ce qui ajoute <username>au sudogroupe.

BenjiWiebe
la source
1

Un arrangement commun pour ajouter des fichiers nécessitant un accès privilégié est à utiliser tee. Bien entendu, son objectif principal est d'écrire à deux endroits, mais vous pouvez en ignorer un et utiliser l'effet secondaire qui sudo tee -avous donne l'ajout privilégié.

Donc, quelque chose comme

printf 'you ALL=(ALL:ALL) ALL\n' | sudo tee -a /etc/sudoers >/dev/null

Je suis d'accord avec les commentaires pour ajouter l'utilisateur au sudoersgroupe pour résoudre ce problème particulier.

triple
la source
0

Vous pouvez commencer par activer le groupe 'wheel' dans sudoers, puis vous devez uniquement ajouter des utilisateurs à ce groupe. Évite de provoquer la convolution du fichier sudoers.

bbaassssiiee
la source
0

Au moment de la création de l'utilisateur, vous pouvez spécifier l'utilisateur auquel une personne appartient au groupe sudo de la manière suivante:

useradd --groups sudo someone

S'il s'agit déjà d'un utilisateur, vous pouvez l'ajouter à un nouveau groupe de la manière suivante:

gpasswd --add someone sudo

Voir cette réponse si vous voulez savoir pourquoi je préfère gpasswdà usermod.

whoan
la source