Ich möchte einem Nicht-Root-Benutzer auf meinem Computer Nicht-Sudo-Zugriff gewähren. Es gibt einen DNS-Manager, dessen einzige Rolle darin besteht, alle BIND-Befehle (rndc, dnssec-keygen) usw. auszuführen.
Jedes Mal, wenn er einen Befehl ausführen muss, gibt er Folgendes ein:
sudo rndc reload
Gibt es eine Möglichkeit, dieses Sudo loszuwerden, aber nur mit einem bestimmten Befehlssatz (und nur für DNS-Manager)?
sudo
ist. Was sind Ihre geschäftlichen Einwände gegen seine Verwendungsudo
dafür?sudo
. Was sind die Einwände?sudo
? Oder Sie haben sudo mit einem Kennwort versehen , um das DNS-Verwaltungstool auszuführen , das dann je nach Bedarf mitnamed
Gruppen-, Benutzer- oder Rootberechtigungen ausgeführt werden kann.sudo
. Wenn er versucht, es uns auszudrücken, kann er entweder unsere Verwirrung beseitigen oder seine eigene - oder beides!Antworten:
Wenn ich Ihre Kommentare richtig verstehe, besteht das Problem darin, dass der Befehl über eine Verbindung ausgegeben wird, die nicht in der Lage ist, das Kennwort einzugeben, das sudo standardmäßig anfordert. Außerdem benötigt sudo in vielen Betriebssystemdistributionen standardmäßig ein TTY, über das dieses Programm möglicherweise nicht verfügt.
Sudo verfügt jedoch über eine sehr fein abgestimmte Berechtigungsstruktur, die es einem oder mehreren Benutzern ermöglicht, einen bestimmten Befehl ohne Kennwort und TTY auszugeben. Im Folgenden werden drei Möglichkeiten gezeigt, wie Sie dies für Ihre Anforderungen konfigurieren können. Welchen Sie auch wählen, der Benutzer kann den Befehl jetzt ausführen,
sudo rndc reload
ohne ein Kennwort eingeben zu müssen.(Dies kann auch unnötig sein, aber ... Bitte denken Sie daran, vor dem Bearbeiten eine Sicherungskopie Ihrer sudoers-Datei zu erstellen, um eine Shell zu erhalten, in der Sie als Root angemeldet sind, falls Sie zur Sicherung zurückkehren und diese bearbeiten müssen es verwendet
visudo
stattsudo vi /etc/sudoers
. Hoffentlich werden diese Vorsichtsmaßnahmen wird nicht notwendig sein, aber ... besser , sie zu haben und müssen sie nicht als umgekehrt!)1. Wenn Sie kein TTY für Anfragen benötigen möchten
Der einfachste Weg, die TTY-Anforderungen (sofern vorhanden) zu beseitigen, besteht darin, sicherzustellen, dass die mit
Defaults
in beginnende Zeile/etc/sudoers
nicht das Wort enthält,requiretty
sondern es enthalten sollte!requiretty
. Wenn Sie dies jedoch tun, bedeutet dies, dass für keinen sudo-Befehl ein tty erforderlich ist!Sie müssen auch die Zeile hinzufügen
2. Wenn Sie ein TTY für alle Benutzer mit Ausnahme dieses Benutzers benötigen möchten
Dies kann durch Festlegen eines Standardwerts für diesen einen Benutzer wie folgt erfolgen:
3. Wenn Sie ein TTY für alle Befehle außer diesem einen Befehl von diesem einen Benutzer anfordern möchten
Dies ist aufgrund der Syntax der sudoers-Datei etwas komplexer. Sie müssen einen Befehlsalias für den Befehl erstellen und dann einen Standard für diesen Befehlsalias festlegen, wie folgt:
quelle
Ja. sudo kann sehr flexibel konfiguriert werden. Trotzdem muss ich erwähnen: Diese Arten von Lösungen sollten nicht als sehr sicher angesehen werden und sie sollten nur in einer kooperativen Umgebung verwendet werden, in der andere Steuerelemente vorhanden sind (daher können Sie Ihrem loyalen Untergebenen diese erweiterten Berechtigungen gewähren, aber sollte dies nicht für einen Kunden tun, den Sie nur aus dem Netz kennen).
Die sudo-Konfiguration ist
/etc/sudoers
in den meisten Systemen enthalten. Sie können die Syntax durch Googeln oder durch einenman sudo
Befehl herausfinden .Sie sollten diese Datei nicht direkt bearbeiten. dies kann zu rennbedingungen führen. Verwenden Sie stattdessen den
visudo
Befehl (ein Wrapper um Ihre$EDITOR
Umgebungsvariable).Nachdem Sie sudo konfiguriert haben, können Sie dies einfach um die sichtbaren Befehle wickeln. Es ist sehr einfach:
/usr/local/dnsadmin/bin
)Erstellen Sie ein Wrapper-Skript für die Befehle, die ohne sudo verwendet werden sollen. Es wird ein sehr einfacher Befehl sein, zum Beispiel
/usr/local/dnsadmin/bin/rndc
:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Holen Sie sich dieses Verzeichnis in ihre
PATH
Umgebungsvariable (zB von einem systemweiten oder ihrem lokalen.profile
).quelle
exec
das Shell-Skript verwenden, anstatt den Befehl direkt aufzurufen? (Ich sage nicht, dass es falsch ist, ich möchte nur wissen, warum Sie es tun, damit ich vielleicht etwas lernen kann)exec
wird der aufgerufene Befehl anstelle der Shell eingesetzt. Die Muschel wird verschwinden. Ohne exec startet die Shell diesen Befehl, wartet dann auf seine Beendigung und wird dann beendet. Dieses zweite, ausführungslose Verfahren bedeutet mehrere kooperierende Prozesse, die nicht benötigt werden. Aber es gibt keinen großen Unterschied, ohne exec würde das genauso gut funktionieren wie damit.Dies ist zwar keine generelle Lösung für den speziellen Fall, dass
rndc
Sie überhaupt nicht benötigensudo
.rndc
kann mit jedemnamed
Prozess über einen lokalen Socket oder einen Remote-Port kommunizieren , wobei ein geheimer Schlüssel zur Authentifizierung verwendet wird. Standardmäßig (oder zumindest für debian, die von mir verwendete Distribution) befindet sich diese Datei in/etc/bind/rndc.key
und ist normalerweise nur für Benutzerbind
und Gruppen lesbarbind
.Jeder, der Lesezugriff auf diese Schlüsseldatei (oder eine identische Kopie davon) hat, kann
rndc
den BIND-Server steuern. In diesem speziellen Fall ist es daher am einfachsten, den Benutzer derbind
Gruppe hinzuzufügen .Eine überraschend große Anzahl von gewöhnlichen Daemons hat einen ähnlichen Aufbau (ich persönlich finde immer noch heraus, welche Möglichkeiten Power-DNS in dieser Hinsicht bieten, aber es sieht bisher vielversprechend aus). Wenn Sie dies nicht möchten, müssen
sudo
Sie prüfen, ob das, was Sie erreichen möchten, von Fall zu Fall möglich ist.quelle
Sie möchten sudo nicht verwenden, um einigen Befehlen root zuzuweisen. Stattdessen könnten Sie ein bestimmtes Programm [das den Befehl umbrechen kann] chmod 4750, um die Rechte eines normalen Benutzers zu erhöhen, das als root auszuführen.
quelle