Цель использования setuid() в SUID-программах

Эта ошибка обычно означает, что у вас нет пакета расширений VB. Поддержка USB 2.0 обеспечивается пакетом VB Extension Pack.

Итак, вы:

а) установите пакет расширений VirtualBox ( https://www.virtualbox.org/wiki/Downloads )

б) перенастройте виртуальную машину, чтобы не требовать USB 2.0 (в VirtualBox Manager) щелкните имя вашей машины -> Настройки -> USB -> выберите Контроллер USB 1.0 (OHCI) вместо Контроллера USB 2.0 (EHCI).

7
15.01.2014, 09:09
2 ответа

Сначала я обсужу бит setuid, который используется passwd и отличается от системного вызова setuid() (который passwd не использует). Возможно, в этом вопросе присутствует некоторая путаница.

Это не защита от переполнения буфера, она уязвима к таковому, или, по сути, ко всему, что позволит злоумышленнику использовать привилегированный процесс для каких-то гнусных непреднамеренных целей. Это происходит потому, что бит setuid противоположен "отбрасыванию привилегий"; он наделяет привилегиями root, но только для процесса, а не для реального пользователя. Это включает passwd.

Эта форма setuid требует, чтобы бит файловой системы setuid был установлен на исполняемом файле; passwd имеет это, потому что ему нужны привилегии для чтения и записи /etc/passwd. Однако, мы надеемся, что passwd не имеет известных уязвимостей в безопасности (например, потенциального эксплойта переполнения), которые позволили бы злонамеренному человеку заставить его делать что-то другое, кроме чтения и записи /etc/passwd (и кроме того, что делать это правильно!), поскольку он запускается от имени root, и поэтому может делать что угодно - за исключением того, что он предназначен для выполнения только одной конкретной вещи, и заставить его делать что-то еще должно (опять же, надеемся) быть невозможно.

Поэтому использование setuid в этом смысле не является защитой от чего-либо, но это часто обсуждается в связи с уязвимостями, потому что потенциальные уязвимости очень важны для исполняемых файлов setuid.

НО: бит setuid устанавливает euid, а не фактический uid, поэтому он фактически параллелен системному вызову seteuid(), а не setuid().

Существует противоположная форма "setuid", связанная с отменой привилегий, которая включает в себя фактический системный вызов setuid() и не требует бита setuid. Это когда процесс, запущенный от имени root (потому что его запустил root или sudo), меняет свой uid на менее привилегированного пользователя. Серверы и демоны часто делают это, если им нужны привилегии root при запуске (например, для открытия привилегированного порта), но не впоследствии. Таким образом, если сервер впоследствии взломают, у него не будет привилегий суперпользователя. Вы не можете вызвать setuid(0) и получить привилегии root обратно (но можете с помощью set*e*uid).

11
29.04.2021, 00:51

Это просто превентивная мера. Любое приложение может быть потенциально уязвимо для любого возможного эксплойта при неправильном кодировании. Хитрость в уменьшении возможного ущерба заключается в выполнении действий с наименьшими необходимыми привилегиями. Отказ от запуска от имени root, когда это не требуется, - отличное начало.

3
29.04.2021, 00:51

Теги

Похожие вопросы