Пересечение минного поля безопасности: setuid — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

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

2021-01-29 91
Пересечение минного поля безопасности: setuid 0.00 из 5.00 0 оценок
Заказать работу

 

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

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

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

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

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

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

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

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

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

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

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

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

 

11.9. Рекомендуемая литература

 

Безопасность Unix (а следовательно, и GNU/Linux) является темой, требующей знаний и опыта для того, чтобы справиться с ней должным образом. В Эпоху Интернета она стала лишь труднее, не проще.

1. Practical UNIX & Internet Security, 3rd edition, by Simson Garfinkel, Gene Spafford, and Alan Schwartz, O'Reilly & Associates, Sebastopol, CA, USA, 2003. ISBN: 0‑596‑00323‑4.

Это стандартная книга по безопасности Unix.

2. Building Secure Software. How to Avoid Security Problems the Right Way, by John Viega and Gary McGraw. Addison‑Wesley, Reading, Massachusetts, USA, 2001. ISBN: 0‑201‑72152‑X.

Это хорошая книга по написанию безопасного программного обеспечения, она включает проблемы setuid. Предполагается, что вы знакомы с основными API Linux/Unix; к моменту прочтения данной книги вы должны быть готовы к ее прочтению.

3. "Setuid Demystified," by Hao Chen, David Wagner, and Drew Dean. Proceedings of the 11th USENIX Security Symposium, August 5–9, 2002 http://www.cs.berkeley.edu/~daw/papers/setuid‑usenix02.pdf.

Гарфинкель, Спаффорд и Шварц (Garfinkel, Spafford, Schwartz) рекомендуют прочтение этого материала «до того, как вы даже подумаете о написании кода, который пытается сохранять и восстанавливать привилегии». Мы всецело согласны с ними.

 

Резюме

 

• Использование значений ID пользователя и группы (UID и GID) для идентификации файлов и процессов – вот что превращает Linux и Unix в многопользовательские системы. Процессы имеют значения как действительных, так и эффективных UID и GID, а также набор дополнительных групп. Обычно именно эффективный UID определяет, как один процесс может повлиять на другой, и эффективные UID, GID и набор групп проверяются на соответствие с правами доступа к файлу. Пользователи с эффективным UID, равным нулю, известные как или суперпользователи, могут делать все, что захотят; система не использует для такого пользователя проверку прав доступа.

• Концепции сохраненных set‑user ID и set‑group ID пришли из System V и были приняты POSIX с полной поддержкой в GNU/Linux. Наличие этих отдельных значений ID дает возможность легко и безошибочно переключать при необходимости действительные и эффективные UID (и GID).

• Программы setuid и setgid создают процессы, в которых действительные и эффективные ID различаются. Программы как таковые помечаются дополнительными битами прав доступа к файлу. Биты setuid и setgid должны быть добавлены к файлу после его создания.

• и получают значения действительного и эффективного UID соответственно, a и получают значения действительного и эффективного GID соответственно, получает набор дополнительных групп, а в среде POSIX может запросить у системы, сколько членов содержит набор групп.

• Функция осуществляет проверку прав доступа к файлу для действительного пользователя, давая возможность программе setuid проверить полномочия реального пользователя. Обратите внимание, что часто проверка возвращаемых сведений может не представить полной картины при условии, что файл может находиться на не родной или сетевой файловой системе.

• Функция GLIBC сходна с, но осуществляет проверку на основе значений эффективных UID и GID.

• «Липкий» бит и бит setgid при использовании с каталогами привносят дополнительную семантику. Когда для каталога установлен бит setgid, новые файлы в этом каталоге наследуют группу этого каталога. Новые каталоги делают то же самое, они также автоматически наследуют установку бита setgid. Без установленного бита setgid новые файлы и каталоги получают эффективный GID создающего их процесса. «Липкий» бит, установленный для каталогов, в которые в других отношениях разрешена запись, ограничивает право на удаление файла владельцем файла, владельцем каталога и.

• Набор групп изменяется с помощью. Эта функция не стандартизована POSIX, но существует на всех современных системах Unix. Ее может использовать лишь.

• Изменение UID и GID довольно сложно. Семантика различных системных вызовов с течением времени изменилась. Новые приложения, которые будут изменять лишь свои эффективные UID/GID, должны использовать и. Приложения, не действующие от имени, могут также устанавливать свои эффективные ID с помощью и. Вызовы и от BSD были предназначены для обмена значениями UID и GID; их использование в новых программах не рекомендуется.

• Приложения, действующие как, могут перманентно заменить значения действительного, эффективного и сохраненного ID с помощью и. Одним из таких примеров является, которая должна превратиться из программы, выполняющейся как в не непривилегированную зарегистрированную оболочку, выполняющуюся от имени обычного пользователя.

• Функции Linux и следует использовать всегда, когда они доступны, поскольку они обеспечивают самое чистое и наиболее надежное поведение

• Написание приложений setuid‑ не является задачей для новичка. Если вам нужно сделать такую вещь, сначала специально изучите проблемы безопасности. Для этого можно воспользоваться приведенными выше превосходными источниками.

 

Упражнения

 

1. Напишите простую версию команды. Ее назначением является отображение в стандартный вывод ID пользователя и группы с указанием имен групп. Когда эффективный и действительный ID различаются, выводятся оба. Например:

id

 

Ее использование:

пользователь

пользователь

пользователь

пользователь

При указанном пользователе выводятся сведения об этом пользователе; в противном случае выводит сведения о пользователе, вызвавшем программу. Опции следующие:

Выводит все значения групп в виде чисел, без имен.

Выводит лишь имена, без числовых значений. Применяется с значениями пользователя и группы.

Выводит лишь эффективный GID.

Выводит лишь эффективный UID.

2. Напишите простую программу с именем и установите setuid на себя. Она должна запрашивать пароль (см. getpass (3)), который в целях данного примера может быть жестко вшит в исходный код программы. Если лицо, запустившее программу, вводит пароль правильно, должна выполнить exec оболочки. Попросите другого пользователя помочь вам ее протестировать.

3. Как вы относитесь к тому, чтобы сделать доступной для ваших друзей? Для ваших приятелей студентов или сотрудников? Для каждого пользователя на вашей системе?

 

 


Поделиться с друзьями:

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.