Пользователи могут получить права root, используя команду «sudo sudo su -»

Пользователи могут получить права root, используя команду «sudo sudo su -»

Я предоставил следующие разрешения в файле sudoers.

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

когда я пытаюсь получить доступ, sudo su -он заблокирован

kj@u1804-1:~$ sudo su -
[sudo] password for kj:
Sorry, user kj is not allowed to execute '/bin/su -' as root on u1804-1.

Но когда я пытаюсь получить доступ, sudo sudo su -он разрешается.

kj@u1804-1:~$ sudo sudo su -
[sudo] password for kj:
root@u1804-1:~#

Мне нужно заблокировать доступ пользователю root, как я могу заблокировать sudo sudoкоманду

решение1

Вы не можете добиться этого, блокируя отдельные команды. Их десятки, если несотни, из команд, которые люди могут использовать, чтобы стать пользователем root 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"

Они могли бы переименовать заблокированные команды:

sudo cp -a /sbin/su /sbin/really-not-su && sudo really-not-su

Они могут просто изменить установленные вами правила:

sudo nano /etc/sudoers

Надеюсь, суть была донесена – если вы предоставляете людям права root,вы предоставляете им права root.Единственный вариант — иметь списокдопустимыйкоманды и блокировать все остальное — и даже в этом случае половина этих команд будет иметь возможность получить полный доступ root.

(Здесь могут помочь AppArmor или SELinux.)

решение2

Я предлагаю, возможно, противоположный подход: вместо того, чтобы давать некоторым людям неограниченные права root, разрешить им выполнять некоторые команды как с sudoуказанием пароля, так и без него. Это позволило бы им выполнять необходимые операции, но не более того.

Файл sudoersможет даже определять допустимые параметры команды(команд), в том числе с подстановочными знаками, позволяющими включать строки в команду.

Этот подход лучше всего описан в ответе на пост Unix Stackexchange
Как удаленно выполнить команду ssh или команду sudo без пароля.

Вы можете указать sudo пропустить пароль для некоторых команд.

например в/etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

это позволяет мне использовать

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

как архемар без пароля.

Обратите внимание, что

sudo -u www-data rm -rf /var/www/log/upload.*

не будет работать (попросит пароль), так как rmотличается от /bin/rm.

Обязательно редактируйте /etc/sudoersс помощью visudoкоманды.

Достигнув продвинутого уровня, вы, возможно, захотите иметь собственные sudoфайлы в формате /etc/sudoers.d.

Связанный контент