UnixFAQ.ru : Как из cgi-скрипта завести нового пользователя, если мой http-се

UnixFAQ.ru : Как из cgi-скрипта завести нового пользователя, если мой http-се
Наш провайдер
Место сдается
Место сдается
:: Поиск

О нас
FAQ
:: Самые новые ::
Почему smbclient неправильно отображает длинные имена сетевых ресурсов?
Особенности работы ARP в Linux
Reverse Path Filtering, и засада в Debian GNU/Linux
Использование в Linux протокола IP без установки IP-адреса
Как узнать, что родитель текущего процесса завершился?
Как подключиться к одной копии ssh-agent со всех виртуальных консолей?
Какой формат printf(3) и scanf(3) следует использовать для off_t?
Чем отличаются предикаты ipfw(8) recv ifX, xmit ifX и via ifX?
Почему 4-й аргумент inet_ntop(3) имеет тип socklen_t?
Как избавиться от дочерних процессов-зомби, не используя wait()?
:: Самые читаемые ::
Каким софтом можно считать траффик под FreeBSD?
Как бороться со сменой IP адресов клиентами локальной сети?
Что такое PPPoE?
Как использовать natd и stateful ipfw одновременно?
Полноценно ли работает VmWare под FreeBSD?
Установка Oracle 8.1.x на FreeBSD.
Как проще всего добавить пользователя?
Чем выковырять загрузочный образ дискеты из ISO?
Как из cgi-скрипта завести нового пользователя, если мой http-сервер работает от пользователя nobody?
Посоветуйте книжку по PostgreSQL.
НачалоБезопасностьКак из 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
:: Новости ::
Новый участник проекта - Владимир Савкин
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
ЯНДЕПФЮМХЕ | 2 | Navigator D 50У100
Используются технологии uCoz