Я предоставил следующие разрешения в файле 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
.