Брандмауэры и специальное программное обеспечение 8 Часть 4 - страница 5

^ Общий взгляд на пользователей
Linux является многозадачной многопользовательской системой. Это означает, что с этой системой могут работать много пользователей, причем одновременно. Естественно, эти пользователи не смогут одновременно работать с одной и той же клавиатурой и монитором, а вот войти в систему при помощи telnet, ftp, http и т. д. они вполне могут. В обязанности операционной системы входят изоляция и защита пользователей друг от друга. Система следит за каждым из пользователей и, исходя из того, кем является этот пользователь, определяет, можно ли предоставить ему доступ к тому или иному файлу или разрешить запуск той или иной программы.

При создании нового пользователя ему ставится в соответствие уникальное имя (которое иногда называют регистрационным именем пользователя). Широко распространено ошибочное мнение, будто система следит за пользователем и определяет его привилегии исходя из его имени. Однако это не совсем так. Имя пользователя, безусловно, важно, но как вы увидите далее из этой главы, идентификатор пользователя еще важнее. Имя пользователя используется для удобства — запомнить символьное имя проще, чем запомнить численный идентификатор.


ПРИМЕЧАНИЕ

Система определяет привилегии пользователя на основании идентификатора пользователя (user ID, UID). В отличие от имени пользователя, UID может и не быть уникальным, в этом случае для сопоставления ему имени пользователя берется первое найденное имя, UID которого совпадает с данным.

Каждому новому регистрируемому в системе пользователю ставятся в соответствие определенные элементы системы. Обычно это домашний каталог и командная оболочка. Домашний каталог можно сравнить с комнатой в доме. Она отдается в полное распоряжение пользователя, который волен делать в ней все, что ему захочется. Однако за пределами комнаты его всевластие заканчивается. Будучи только гостем ъ доме, пользователь может наводить беспорядок или же убираться в других комнатах лишь с разрешения владельца дома, то есть операционной системы.
^ Привилегированные и непривилегированные пользователи
При добавлении нового пользователя в систему ему выделяется специальный номер, называемый идентификатором пользователя (user ID, UID). В Caldera OpenLinux выделение идентификаторов новым пользователям начинается с 500 и продолжается в сторону больших чисел, вплоть до 65 534. Номера до 500 зарезервированы для системных учетных записей. В других комплектах Linux может использоваться другое распределение системных и обычных идентификаторов: например, идентификаторы обычных пользователей могут начинаться с номера 1000, а не с 500. Номер идентификатора, на котором заканчиваются системные пользователи и начинаются пользователи обычные, определяется поставщиком комплекта Linux.

В общем и целом идентификаторы с номерами, меньшими 500, ничем не отличаются от остальных идентификаторов. На самом деле все номера от 1 до 65 534 равнозначны и не несут какой-либо предопределенной смысловой нагрузки. Тот факт, что номера до 500 зарезервированы для системы, просто является общепринятым соглашением. Часто программе для нормального функционирования требуется специальный пользователь с полным доступом ко всем файлам. Примером таких программ служат системы управления базами данных. В таком случае используется идентификатор из числа зарезервированных. Эти номера соответствуют непривилегированным учетным записям, пользователи которых не обладают никакими специальными привилегиями.

Однако нумерация идентификаторов начинается с 0 и продолжается до 65 535. UID 0 — это особенный UID. Любой процесс или пользователь с нулевым идентификатором является привилегированным. Такой человек или процесс имеет неограниченную власть над системой. Ничто не может служить для него запретом. Возвращаясь к аналогии с домом, учетная запись root (учетная запись, UID которой равен 0), также называемая учетной записью суперпользователя, делает вошедшего с ее использованием если не владельцем дома, то как минимум его доверенным лицом. Имея нулевой UID, можно бить окна, ломать стены или вообще поджечь весь дом — и никто не сможет воспрепятствовать этому. Администраторы со стажем знают, что работать с системой от имени этой учетной записи следует лишь в случае абсолютной необходимости и ровно столько, сколько нужно для выполнения потребовавших ее использования задач. То есть чем меньше вы работаете с системой от имени пользователя root, тем ниже риск вторжения в вашу систему. Далее мы еще вернемся к этому вопросу.

Остается UID, равный 65 535. Он тоже не из обычных. Этот UID принадлежит пользователю nobody (никто). Прежде чем писать мне письма с обвинениями в некомпетентности, позвольте мне объясниться. Как можно заметить (а таковая возможность вскоре представится), в OpenLinux UID пользователя nobody равен 65 534. Номер 65 535 рассматривается операционной системой как UID, вообще не имеющий каких-либо привилегий. Создайте пользователя поопе, воспользовавшись программой useradd: useradd -m -u 65535 noone

Посмотрите внимательно на свойства домашнего каталога пользователя поопе. Видите странность: его владельцем является не поопе, как того можно было бы ожидать (команда useradd, создав домашний каталог пользователя, всегда делает его владельцем созданного каталога), a root? Если сказать su -noone, то тогда вы сможете читать файлы каталога, но не сможете создать или удалить ни одного файла, поскольку поопе не владеет ими. Дабы избежать сложностей с номером 65 535, пользователю nobody поставлен в соответствие номер 65 534, а 65 535 попросту не используется. (Не забудьте удалить пользователя поопе и его домашний каталог: userdel поопе; rm -Rf /home/noone.)

Когда-то одним из способов взлома системы было создание пользователя с идентификатором 65 536, в результате чего он получал привилегии суперпользователя. Действительно, если взять любой UID и перевести соответствующее число в двоичную форму, то получится комбинация из шестнадцати двоичных разрядов, каждый из которых равен либо 0, либо 1. Подавляющее количество идентификаторов включают в себя как нули, так и единицы. Исключением является нулевой UID суперпользователя, состоящий из одних нулей, и UID nobody, равный 65535 и состоящий из 16 единиц, то есть 1111111111111111. Число 65 536 нельзя разместить в 16 разрядах — для представления этого числа в двоичной форме требуется использовать уже 17 разрядов. Самый старший разряд будет равен единице (1), все остальные равны нулю (0). Так что же происходит при создании пользователя с идентификатором длиной в 17 двоичных разрядов — 10000000000000000? Теоретически, пользователь с нулевым идентификатором: поскольку под идентификатор отводится лишь 16 двоичных разрядов, 17 разряд хранить негде, и он отбрасывается. Стало быть, единственная единица идентификатора теряется, и остаются одни нули, а в системе появляется новый пользователь с идентификатором, а значит, и привилегиями, суперпользователя. Но это было давно, теперь же в Linux нет программ, которые позволили бы вам установить UID в 65 536. Так просто современные системы уже не взломаешь. Тогда какая польза от всего этого разговора? Большая, если преуспеть в замене программы, не позволяющей устанавливать этот UID, на программу, которая позволяет. Кроме того, как мы еще увидим, подобный метод взлома можно использовать и в других ситуациях.


ПРИМЕЧАНИЕ

Пользователей с идентификаторами, превышающими 65 536, создавать можно, но использовать их без подмены /bin/login не получится.

Любой взломщик обязательно постарается получить привилегии суперпользователя. Как только он их получит, дальнейшая судьба вашей системы полностью будет зависеть от его намерений. Возможно, он, удовлетворившись самим фактом взлома, не сделает с ней ничего плохого и, послав вам письмо с описанием найденных им дыр в системе безопасности, навсегда оставит ее в покое, а возможно, и нет. Если намерения взломавшего вас хакера не столь чисты, то тогда лучшее, на что можно надеяться, — это выведение системы из строя. Вы наверняка слышали о подменах хакерами web-страниц известных сайтов на свои страницы, так вот это лишь одна из возможных игр. Ваша система может быть нужна злоумышленнику в качестве прикрытия для проведения с нее атак на другие системы, чтобы все следы этих атак вели к вашей системе. На скольких языках вы можете произнести словосочетание «судебное разбирательство»? Как вы думаете, почему случаи поимки властями взломщиков, причинивших серьезный ущерб, столь редки? В том числе и потому, что они используют для взлома чужие системы и тщательно заметают все следы к своей системе.

2754276403833971.html
2754456470764681.html
2754594120761507.html
2754687585697998.html
2754860481747224.html