Непривилегированные учетные записи


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

«Пользователь должен обладать только теми правами, которые позволят ему решать поставленные задачи», — разве это правило не подходит для всех учетных записей обычных пользователей? Да, это так, но все-таки учетные записи, используемые людьми, предоставляют более широкие права, чем это необходимо многим программам. Любой пользователь, обладающий доступом к командному интерпретатору, имеет домашний каталог. Обычный пользователь может создавать файлы в этом каталоге, запускать текстовые редакторы или работать с электронной почтой. Типичный пользователь системы нуждается в командном интерпретаторе, а программы — нет. Ограничивая права программы, в частности — сетевого демона, вы тем самым ограничиваете объем повреждений, которые может нанести злоумышленник при взломе этой программы.

В составе FreeBSD имеется несколько непривилегированных учетных записей. Загляните в файл /etc/passwd, где можно увидеть такие учетные записи, как audit, bind, uucp и www. Все это — непривилегированные учетные записи, которые используются демонами-серверами. Посмотрим, что у них общего.

Непривилегированные пользователи не имеют нормального домашнего каталога. Для многих из них в качестве домашнего каталога указан каталог /nonexistent, хотя некоторые из них, например sshd, имеют специальный домашний каталог /var/empty. Наличие домашнего каталога, недоступного для чтения и записи, ограничивает возможности учетной записи, которых, впрочем, вполне достаточно для работы демона. Эти пользователи могут являться владельцами некоторых файлов в системе, но обычно они не имеют права на запись в них.

Точно так же никто и никогда не должен входить в систему под этими учетными записями. Если учетная запись bind зарезервирована для сервера DNS, никто не должен входить в систему под учетной записью bind! Для такой учетной записи должен быть определен такой командный процессор, который запрещает регистрацию в системе, например /usr/sbin/nologin. Каким образом все это повышает уровень безопасности? Давайте рассмотрим на примере.

Обычно веб-сервер работает под непривилегированной учетной записью www. Предположим, что злоумышленник обнаружил уязвимость в версии программы веб-сервера, которой вы пользуетесь, и получил возможность заставить веб-сервер исполнять произвольный программный код. Самая неприятная брешь в системе безопасности — когда злоумышленник оказывается в состоянии заставить программу сервера выполнять программный код с ее привилегиями. Что имеется в пределах возможностей программы?

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

Если злоумышленник достаточно хитер, то командный процессор nologin не остановит его. Предположим, что злоумышленник хитростью сумел заставить веб-сервер запустить простой командный процессор, такой как /bin/sh, и получил в свое распоряжение командную строку. Теперь он может дать волю своему воображению и нанести серьезный ущерб… или не может?

У него нет домашнего каталога и нет права создавать каталоги. Это означает, что любые файлы, которые ему понадобятся, должны размещаться в общедоступных каталогах, таких как /tmp или /var/tmp, что демаскирует злоумышленника. Конфигурационный файл веб-сервера Apache принадлежит пользователю root или группе администраторов веб-сервера, но пользователь www не принадлежит этой группе. У злоумышленника может быть доступ к веб-серверу, но нет возможности изменить его конфигурацию. Он не сможет изменить файлы, так как пользователь www не владеет ими. В действительности пользователь www вообще не имеет никакого доступа к системе. Взломав веб-сервер, злоумышленник теперь должен взломать систему или веб-приложение.

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

Учетная запись nobody

В течение многих лет системные администраторы использовали учетную запись nobody в качестве типичной непривилегированной учетной записи. Под этой учетной записью они запускали веб-серверы, прокси-серверы и другие программы. Для безопасности это было гораздо лучше, чем запускать те же программы с правами root, но не так хорошо, как иметь отдельные учетные записи для каждого демона. Если злоумышленнику удавалось взломать одну из таких программ, он получал доступ сразу к ним ко всем. У нашего гипотетического злоумышленника, взломавшего веб-сервер, сразу появлялся бы доступ не только к веб-серверу, но и ко всем программам, запущенным с привилегиями этого пользователя! Если вы используете NFS, помните, что по умолчанию учетная запись удаленного пользователя root отображается в учетную запись nobody. В общем случае использование непривилегированных учетных записей должно помочь минимизировать возможный ущерб в случае успешного вторжения.

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

Пример непривилегированной учетной записи

Ниже перечислены параметры типичной непривилегированной учетной записи:

  • Имя пользователя: присваивайте такое имя пользователя, которое явно указывало бы на выполняемые функции. Например, учетная запись для веб-сервера имеет имя www.
  • Домашний каталог: /nonexistent
  • Командный процессор: /usr/sbin/nologin
  • UID/GID: числовые значения идентификаторов пользователя и группы желательно выбирать из диапазона, специально отведенного для непривилегированных пользователей.
  • Полное имя: присваивайте такое имя, которое описывало бы функциональное назначение учетной записи.
  • Пароль: с помощью chpass(1) назначьте пользователю пароль, состоящий из одного символа звездочки. Это запретит использование пароля учетной записи.

Эти параметры сделают непривилегированную учетную запись действительно непривилегированной. С помощью утилиты adduser(8) вы легко сможете создать учетную запись без пароля, с нужным домашним каталогом и соответствующим командным интерпретатором.

Комментарии запрещены.