Я хочу запретить пользователям с доступом к 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 тоже.