Ich habe die folgenden Berechtigungen in der Sudoers-Datei erteilt.
Cmnd_Alias SUROOT=/bin/su "",\
/bin/su -,\
/bin/su - root,\
/bin/su root,\
/usr/bin/su "",\
/usr/bin/su -,\
/usr/bin/su - root,\
/usr/bin/su root
kj ALL = (ALL) ALL, !SUROOT
wenn ich versuche, darauf zuzugreifen, sudo su -
ist es blockiert
kj@u1804-1:~$ sudo su -
[sudo] password for kj:
Sorry, user kj is not allowed to execute '/bin/su -' as root on u1804-1.
Aber wenn ich versuche, darauf zuzugreifen, sudo sudo su -
wird es zugelassen.
kj@u1804-1:~$ sudo sudo su -
[sudo] password for kj:
root@u1804-1:~#
Ich muss den Zugriff auf den Root-Benutzer blockieren. Wie kann ich sudo sudo
den Befehl blockieren?
Antwort1
Dies kann man nicht erreichen, indem man einzelne Befehle blockiert. Es gibt Dutzende, wenn nichtHunderte, von Befehlen, die Benutzer verwenden können, um Root zu werden sudo
:
sudo -s
sudo -i
sudo bash
sudo env su
sudo /bin/sh
sudo env sudo
sudo busybox sh
sudo unshare
sudo chroot /
sudo systemd-run --shell
sudo nvim -c ":terminal"
sudo perl -e 'exec("bash")'
sudo git -c protocol.ext.allow=always ls-remote ext::"bash -c sh<&2>&2"
Sie könnten die blockierten Befehle umbenennen:
sudo cp -a /sbin/su /sbin/really-not-su && sudo really-not-su
Sie könnten einfach die von Ihnen festgelegten Regeln ändern:
sudo nano /etc/sudoers
Ich hoffe, Sie haben es verstanden: Wenn Sie Leuten Root-Zugriff gewähren,Sie gewähren ihnen Root-Zugriff.Die einzige Möglichkeit ist eine Liste vonerlaubtBefehle und blockieren alles andere – und selbst dann bietet die Hälfte dieser Befehle eine Möglichkeit, vollen Root-Zugriff zu erhalten.
(AppArmor oder SELinux können hier hilfreich sein.)
Antwort2
Ich schlage vielleicht den umgekehrten Ansatz vor: Anstatt einigen Personen unbegrenzte Root-Berechtigungen zu erteilen, sollten Sie ihnen erlauben, einige Befehle ohne sudo
Angabe des Passworts auszuführen. Dies würde ihnen erlauben, die erforderlichen Operationen auszuführen, aber nicht mehr.
Die sudoers
Datei kann sogar die zulässigen Parameter für die Befehle definieren, auch mit Platzhaltern, um die Einbeziehung von Zeichenfolgen in den Befehl zu ermöglichen.
Dieser Ansatz wird am besten in einer Antwort auf den Unix Stackexchange-Beitrag beschrieben.
So führen Sie einen SSH-Befehl (einen Sudo-Befehl) aus der Ferne ohne Kennwort aus.
Sie können sudo anweisen, das Kennwort für einige Befehle zu überspringen.
zB in
/etc/sudoers
archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
dies erlaubt mir,
sudo -u www-data /bin/rm -rf /var/www/log/upload.*
als Archemar ohne Passwort.
Beachten Sie, dass
sudo -u www-data rm -rf /var/www/log/upload.*
funktioniert nicht (es wird nach einem Passwort gefragt), da es
rm
sich von unterscheidet/bin/rm
.Bearbeiten Sie unbedingt
/etc/sudoers
mitvisudo
dem Befehl.Wenn Sie das fortgeschrittene Niveau erreicht haben, möchten Sie vielleicht Ihre eigenen
sudo
Dateien im Format haben/etc/sudoers.d
.