Fügen Sie einen Sudoer nicht interaktiv über die Befehlszeile hinzu


6

(Auf Centos durch Docker)

Ich weiß, dass ich mit einen Sudoer hinzufügen kann visudo. Gibt es eine Möglichkeit, einen Benutzer direkt über die Befehlszeile zur Sudoer-Liste hinzuzufügen, sodass ich dies nicht interaktiv tun muss?

Ich frage, weil ich versuche, meinen Docker-Centos-Container bereitzustellen, der nicht mit Interaktivität funktioniert.

Antworten:


2

Sie können verwenden cat, um Text an das Ende von anzuhängen /etc/sudoers. Erstellen Sie zunächst eine Sicherungskopie Ihrer /etc/sudoersDatei. Dann:

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

Stellen Sie unbedingt sicher, dass Sie zwei Zeichen größer als ( >>) und nicht nur eines verwenden, da Sie sonst den gesamten Inhalt Ihrer Datei überschreiben.


1
wie ist das "nicht interaktiv"? und warum wird diese antwort akzeptiert?
Alexander Mills

1
Das OP fragte nach einer Möglichkeit, dies von der Kommandozeile aus zu tun, ohne einen Editor wie visudo. Ich glaube, sie meinten "interaktiv" im Sinne der Verwendung eines Editors; Daher ist dies "nicht interaktiv", da für diesen Ansatz kein Editor erforderlich ist. (Offensichtlich muss eine Person die Benutzernamen trotzdem irgendwie eingeben , sodass dieser Teil nicht umgangen werden kann.) Was den Grund für die Annahme angeht, muss die Frage des OP wohl gut genug beantwortet worden sein, um zufrieden zu sein.
Mhucka

ok, interaktiv bedeutet für mich alles, was eine Live-Benutzereingabe erfordert. Editor oder Befehlszeile. Semantik, denke ich. Vielen Dank.
Alexander Mills

Was Sie sagen, macht auch Sinn - der Ausdruck ist so vieldeutig, dass die Leute normalerweise etwas mehr sagen müssen, um ihre Absichten zu klären. Ich nahm eine Vermutung an, hätte aber leicht falsch liegen können. In der Praxis könnte das, was ich oben geschrieben habe, in eine Skriptdatei (z. B. ein sh-Skript) geschrieben werden. Was TemporalWolf geschrieben hat, geht in eine Skriptdatei über. Und ehrlich, wenn man bedenkt, dass die Frage des OP speziell Docker betraf, denke ich, dass die Antwort von TemporalWolf tatsächlich eine bessere sein könnte.
mhucka

@AlexanderMills Sie haben Recht, dass dies interaktiv ist, aber es kann leicht geändert werden, um nicht interaktiv zu werden.
Duncan X Simpson

11

Ich hatte ein ähnliches Problem beim Versuch, meinen Docker-Container dazu zu bringen, Jenkins-Skripten die Verwendung von sudo-Befehlen zu ermöglichen, ohne zur Eingabe eines Kennworts aufzufordern.

Dies wurde über das Dockerfile gelöst:

RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

2

Um dies tun zu können, sollten Sie sicherstellen, dass die folgende Zeile in Ihrer sudoersDatei enthalten ist:

%sudo   ALL=(ALL:ALL) ALL

Sie können die obige Zeile anpassen, um die Berechtigungen so zu ändern, als wäre %sudoes ein Benutzer. Diese Zeile ermöglicht es allen Benutzern in der sudoGruppe, zu verwenden sudo.

Um <username>die Verwendung zuzulassen sudo, können Sie nur usermod -a -G sudo <username>als root <username>die sudoGruppe hinzufügen .


1

Eine übliche Methode zum Anhängen an Dateien, für die ein privilegierter Zugriff erforderlich ist, ist die Verwendung von tee. Der Hauptzweck besteht natürlich darin, an zwei Stellen zu schreiben, aber Sie können eine davon verwerfen und den Nebeneffekt verwenden, sudo tee -ader Ihnen das privilegierte Anhängen ermöglicht.

So etwas wie

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

Ich stimme den Kommentaren zu, um den Benutzer der sudoersGruppe hinzuzufügen, anstatt dieses spezielle Problem zu lösen.


0

Sie können beginnen, indem Sie die Gruppe 'wheel' in sudoers aktivieren und anschließend nur noch Benutzer zu dieser Gruppe hinzufügen. Vermeidet das Verwickeln der sudoers-Datei.


0

Zum Zeitpunkt der Benutzererstellung können Sie den Benutzer , der zur sudo- Gruppe gehört, folgendermaßen angeben :

useradd --groups sudo someone

Wenn es sich um einen bereits vorhandenen Benutzer handelt, können Sie ihn auf folgende Weise zu einer neuen Gruppe hinzufügen:

gpasswd --add someone sudo

Sehen Sie diese Antwort , wenn Sie wollen wissen , warum ich lieber gpasswdzu usermod.


0

So richte ich einen Benutzer ohne Rootberechtigung mit dem Basisimage von ein ubuntu:18.04:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id

Dieser Befehl ist unklar. Welchen Benutzer haben Sie eingerichtet? Und zu welcher Gruppe gehören sie? Ist der Benutzer foo? Sie sollten Ihre Antwort klarstellen.
JakeGould vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.