11.8. Пересечение минного поля безопасности: setuid root

11.8. Пересечение минного поля безопасности: setuid root

Настоящие минные поля трудно, но не невозможно перейти. Однако, это не является чем-то, что можно сделать легко, без тренировки или опыта

Точно также написание программ, которые используют setuid root, является трудной задачей. Имеется много, очень много проблем, о которых нужно знать, и почти все может иметь неожиданные последствия в плане безопасности. Такая попытка должна предприниматься очень осторожно.

В частности, стоит специально изучить проблемы безопасности Linux/Unix и потратить время на обучение написанию программ setuid root. Если вы сразу нырнете в эту проблему, прочитав лишь эту книгу и ничего более, можно быть уверенным, что ваша система будет взломана, легко и сразу. Маловероятно, что вы или ваши клиенты будут довольны.

Вот несколько руководящих принципов:

• Как можно меньше действуйте в качестве root. Скупо используйте свои чрезвычайные полномочия, лишь тогда, когда это абсолютно необходимо

• Соответствующим образом проектируйте свою программу. Разделите программу на составные части таким образом, чтобы все операции root были выполнены заранее, а оставшаяся программа работала в качестве обычного пользователя.

• При изменении или сбрасывании привилегий используйте setresuid(), если она у вас есть. В противном случае используйте setreuid(), поскольку у этих функций самая чистая семантика. Используйте setuid(), лишь когда вы хотите сделать постоянное изменение.

• Переходите от root к обычному пользователю в соответствующем порядке: сначала установите набор групп и значения GID, затем значения UID. Будьте особенно осторожны с fork() и exec(); действительные и эффективные UID при их вызове не изменяются, если вы не измените их явным образом.

• Рассмотрите использование прав доступа setgid и особой группы для вашего приложения. Если это будет работать, это убережет вас от большой головной боли.

• Рассмотрите отказ от наследуемого окружения. Если вам нужно сохранить некоторые переменные окружения, сохраните как можно меньше. Убедитесь в предоставлении подходящих значений для переменных окружения PATH и IFS.

• Избегайте execlp() и execvp(), которые зависят от значения переменной окружения PATH (хотя это менее проблематично, если вы сами восстанавливаете PATH).

Это просто некоторые из множества тактик по пересечению опасной зоны, известной своими подвохами, минами-ловушками и фугасами. Ссылки на другие источники информации см. в следующем разделе.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

11.1.2. Биты Setuid и Setgid

Из книги автора

11.1.2. Биты Setuid и Setgid Биты setuid и setgid[116] в правах доступа к файлу заставляют процесс принять эффективный UID или GID, который отличается от действительного. Эти биты накладываются на файл вручную с помощью команды chmod:$ chmod u+s myprogram /* Добавить бит setuid */$ chmod g+s myprogram /* Добавить бит setgid


Общий обзор средств безопасности: дескриптор безопасности

Из книги автора

Общий обзор средств безопасности: дескриптор безопасности Анализ дескриптора безопасности предоставляет хорошую возможность для общего ознакомления с наиболее важными элементами системы безопасности Windows. В этом разделе речь будет идти о самых различных элементах


5.2. Место информационной безопасности экономических систем в национальной безопасности страны

Из книги автора

5.2. Место информационной безопасности экономических систем в национальной безопасности страны В современном мире информационная безопасность становится жизненно необходимым условием обеспечения интересов человека, общества и государства и важнейшим, стержневым,


4.8. Получение прав root

Из книги автора

4.8. Получение прав root Теперь у нас есть достаточно информации о доступе, и мы можем рассмотреть типичный метод взломщика для получения прав root и способы маскировки в системе.Допустим, что злоумышленник приобрел возможность выполнять какие-либо системные команды от имени


1.1.3.7. Пароль root

Из книги автора

1.1.3.7. Пароль root После этого нам нужно установить пароль пользователя root (рис. 1.18). Пользователь root обладает максимальными привилегиями. Его можно сравнить с пользователем Администратор в Windows. Постарайтесь не забыть пароль root. Если вы его забудете, тогда вам стоит


Пересечение и разность

Из книги автора

Пересечение и разность В стандарте языка SQL имеются предложения оператора SELECT для выполнения операций пересечения и разности запросов. Этими предложениями являются INTERSECT (пересечение) и EXCEPT (разность), которые работают аналогично предложению UNION. В результирующий набор


Пересечение

Из книги автора

Пересечение Snap to Intersection – привязка к точкам пересечениий объектов (отрезков, окружностей, дуг, сплайнов и т. п.).В случае пространственного моделирования в режиме Intersection допускается привязка к угловым точкам объектов, имеющих ненулевую высоту выдавливания. Если два


Пересечение

Из книги автора

Пересечение Команда INTERSECT позволяет создать новое тело, выделив общую часть заданных объектов. При этом исходные тела после выполнения команды удаляются. Результат применения операции пересечения к цилиндру и параллелепипеду показан на рис. 11.13. Рис. 11.13. Тело,


Открытые поля, приватные поля и открытые свойства

Из книги автора

Открытые поля, приватные поля и открытые свойства Заметим, что в указанных выше классах поля данных были определены открытыми только для того, чтобы упростить пример. Конечно, с точки зрения объектно-ориентированного подхода предпочтительнее использовать приватные


Пересечение

Из книги автора

Пересечение Snap to Intersection – привязка к точкам пересечениий объектов (отрезков, окружностей, дуг, сплайнов и т. п.).В случае пространственного моделирования в режиме Intersection допускается привязка к угловым точкам объектов, имеющих ненулевую высоту выдавливания. Если два


Пересечение

Из книги автора

Пересечение Snap to Intersection – привязка к точкам пересечениий объектов (отрезков, окружностей, дуг, сплайнов и т. п.).В случае пространственного моделирования в режиме Intersection допускается привязка к угловым точкам объектов, имеющих ненулевую высоту выдавливания. Если два


Пример 9-5. Я -- root?

Из книги автора

Пример 9-5. Я -- root? #!/bin/bash# am-i-root.sh: Root я, или не root?ROOT_UID=0 # $UID root-а всегда равен 0.if [ "$UID" -eq "$ROOT_UID" ] # Настоящий "root"?then echo "- root!"else echo "простой пользователь (но мамочка вас тоже любит)!"fiexit 0# ============================================================= ## Код, приведенный ниже, никогда не отработает,#+


6.1. Учетная запись root

Из книги автора

6.1. Учетная запись root В Windows мы привыкли, что нам разрешено все. Конечно, не всегда, но в большинстве случаев именно так. В Linux все иначе — максимальными полномочиями обладает только пользователь root. Система полностью подвластна этому пользователю. Внимание! Всегда думайте


Пересечение

Из книги автора

Пересечение Применение команды INTERSECT позволяет создать новое тело, выделив общую часть заданных объектов. При этом исходные тела после использования команды удаляются. Результат применения операции пересечения к цилиндру и параллелепипеду показан на рис. 11.13. Рис. 11.13.


Пересечение

Из книги автора

Пересечение Snap to Intersection – привязка к точкам пересечениий объектов (отрезков, окружностей, дуг, сплайнов и т.