Наш провайдер rinet
UnixFAQ.ru
   :: Поиск  
   :: Самые новые ::

   :: Самые читаемые ::
   :: Реклама ::

Начало
Безопасность

Как из cgi-скрипта завести нового пользователя, если мой http-сервер работает от пользователя nobody?

 

  • Если cgi-скрипт - бинарный файл (исполняемый без интерпретатора типа /usr/bin/perl или /bin/sh), то можно выставить на него флаг suid на пользователя root, и он будет исполняться от этого пользователя. Этот вариант наименее предпочтителен: во-первых, скрипт может быть недостаточно аккуратно написан (особенно, если его автор не думал о возможности запуска его злоумышленником и подразумевал, что его всегда будет пускать человек, уже имеющий достаточные привилегии). Таким образом, вероятность появления прорехи в системе безопасности сильно повышается. Во-вторых, локальные пользователи могут получить доступ к этой программе - вместе с возможностью заведения новых пользователей.
  • Можно поставить программу sudo, которая позволяет контролируемо делегировать пользователю часть прав root'а (подробности можно найти в man'е к программе). Этот вариант гораздо гибче, хотя бы потому, что sudo даст возможность завести нового пользователя только пользователю nobody, а не любому локальному пользователю. Однако, и он не безупречен - относительно возможных "дырок" в скрипте.
  • Наиболее удачным в общем случае, пожалуй, можно считать вариант из связки двух скриптов. Один исполняется от пользователя nobody, проверяет корректность воодимой информации, правильность паролей (или иным образом ограничивает доступ), и формирует данные, которые откладываются для другого скрипта - например, записываются в файл с уникальным именем в специальной директории (позаботьтесь о правильных правах доступа к ней). Второй скрипт исполняется по cron'у раз в несколько минут (часов, суток - в зависимости от ваших нужд) от пользователя root. Он берёт подготовленные первым скриптом данные и выполняет собственно заведение пользователя.


В любом случае, помните - данные обязательно должны проверяться на корректность.
Если Вы не уверены, делает ли это имеющийся у вас скрипт (особенно, если он в бинарном виде) - осуществите такой контроль сами. Обязательно проверьте, что логин и пароль нового пользователя содержат только разрешённые символы (именно так, а не "содержат запрещённые").
Хорошей идеей является проверка пароля на "простоту". Например, он должен быть длиннее 5 символов, содержать и буквы, и цифры, не являться вариантом имени (скажем, для пользователя alex пароли alex00 или xela00 - плохи).
Если uid нового пользователя может задаваться - обозначьте нижний предел для него (скажем, 1000) и проконтролируйте, что пользователя с таким uid ещё нет.
Не забудьте заблокировать системные файлы (/etc/passwd, /etc/shadow, /etc/master.passwd и так далее - конкретный список специфичен для Вашей системы) на запись (и сами проверьте наличие такой блокировки).
Не давайте возможности выбора произвольной программы в качестве шелла - или пусть шелл будет задан жёстко, или будет выбор только из нескольких безопасных вариантов (/bin/sh, /bin/tsch, /sbin/nologin - например).
Словом, абсолютно все данные, которые не являются жёстко заданными, должны быть проверены на корректность, и почти никогда нельзя давать пользователю возможность вводить произвольные данные (логин и пароль - пожалуй, единственные исключения).


Создано: Alexey Semenyaka

   :: Новости ::

Сайт снова оживлен на новой площадке.

sem, 22.11.2008

Новый участник проекта - Сергей Матвейчук

glebius, 30.01.2005

Новый участник проекта - Владимир Савкин

glebius, 24.01.2004

Сайт переехал на новую площадку. Теперь услуги co-location предоставляются компанией Best Telecommunications, за что им огромное спасибо.

glebius, 05.09.2003

Новый участник проекта - Андрей Павлов

glebius, 29.07.2002

Сайт вернулся к жизни. Два месяца назад отказал жесткий диск, до этого работавший безотказно и не подавая никаких признаков скорой смерти. Тк я по жизни разгильдяй, то бэкапа не было. Однако нашлись добрые люди, которые подкинули свои мирроры и кэши, и как видите, мы снова живем. Огромное человеческое спасибо Константину Елапину, Дмитрию Тейблюму и Александру Дилевскому из Яндекса, а также vasilich@softhome.net и kx@usp.ru.
Новый дизайн сайта сделал Андрей Селиванов.

glebius, 20.07.2002

   :: Реклама ::