В некоторых случаях возникает необходимость разрешить непривилегированному пользователю выполнить системную функцию, требующую прав root, например, изменить пароль. Одно из возможных решений заключается в том, чтобы дать пользователю права root. Однако при этом пользователь также получает полный контроль над системой, что нежелательно с точки зрения безопасности. Вместо этого программе дается возможность выполняться так, как если бы это был пользователь root, чтобы системная функция была выполнена так, как нужно, и пользователю при этом не был дан полный контроль над системой. Такой тип доступа называют разрешением или битом suid (set user ID). Когда программу с доступом suid выполняет какой-либо пользователь, euid (действующий ID) этого пользователя заменяется на uid владельца программы. После того как выполнение программы завершено, euid пользователя устанавливается в его первоначальное значение. В следующем листинге этот бит обозначен буквой s. Существует также право доступа sgid (set group ID), применяемое аналогично к действующему ID группы.
-rwsr-xr-x 1 root root 14643 Jan 3 11:20 /usr/bin/passwd
Например, если пользователю нужно изменить свой пароль, он выполняет файл /usr/bin/passwd, владельцем которого является root и у которого установлен бит suid. Тогда uid пользователя на время выполнения команды passwd изменяется на uid для root (который равен 0) и по завершении возвращается к прежнему значению. Программы, у которых включен бит suid и владельцем которых является пользователь root, обычно называют suid root-программами.
В такой ситуации изменение порядка выполнения программы приобретает исключительную силу. Если изменить порядок выполнения suid root-программы так, чтобы она выполнила некоторый “подброшенный” ей фрагмент произвольного кода, то атакующий заставит программу выполнить любые действия от имени пользователя root. Если атакующий заставит suid root-программу запустить новую пользовательскую оболочку, к которой у него будет доступ, то он получит права root на уровне пользователя. Как уже говорилось, это весьма нехорошо с точки зрения защиты, поскольку дает атакующему полный контроль над системой с правами пользователя root.