|
|
|
Начало Безопасность
Как из 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
|
|
|
|