Я хочу запретить пользователям с доступом к sudoer использовать sudo
для выполнения passwd
(и, таким образом, изменить пароль root).
Это возможно? Если так, как это может быть достигнуто?
Вы в принципе не можете запретить пользователям выполнять определенную команду, если им все еще разрешено выполнять все другие команды - они могут скопировать passwd
в really-not-passwd-i-promise
и выполнить это.
Если вы хотите помешать sudoers изменить пароль пользователя root или пароль другого пользователя, вы также не можете это предотвратить; они могут вручную редактировать /etc/shadow
если у них есть привилегии root с использованием sudo.
(Этого можно достичь, например, используя Kerberos или LDAP для аутентификации - таким образом, никто не сможет изменить пароль другого пользователя, - но ничто не может помешать sudoers просто нарушить конфигурацию или что-то в этом роде.)
По сути, не давайте полных прав sudo
людям, которым вы не доверяете. Запретить одну команду и разрешить все остальные нельзя.
Очень трудно удержать пользователя root ни от чего, но я верю, что вы можете сделать это с помощью AppArmor.
Проблема в том, как бы вы настроили его, чтобы могли произойти законные изменения пароля?
Уловка может состоять в том, чтобы настроить профиль AppArmor для sudo
который наследуется всеми его дочерними элементами . Это не повлияет на пользователей, использующих passwd от себя (для изменения собственного пароля), и не повлияет на пользователей, которые вводят root через su
.
Тем не менее, я подозреваю, что вы могли бы обойти это, копируя, перемещая или переименовывая двоичный файл sudo
, так что вы, вероятно, захотите заблокировать доступ на запись passwd
для всех корневых процессов, а затем только когда-либо изменить его, используя live CD.
Конечно, вы также должны защитить сам AppArmor от изменений. :)
Лучшее решение, вероятно, слишком дать sudo доступ только для определенных команд, а затем только для команд, которые не изменяют файловую систему.
что по этому поводу: отредактируйте файл /etc/sudoers, как показано ниже:
%wheel ALL=(ALL) ALL,!/usr/bin/* /etc/shadow,!/usr/bin/* /etc/sudoers\
,!/usr/bin/* /usr/bin/su,!/usr/bin/su,!/usr/sbin/visudo
то нет никакой команды, доступной для этих файлов, и sudo su
тоже.