Назад | Перейти на главную страницу

Безопасное создание учетных записей из веб-приложения без полномочий root

У меня есть веб-приложение, которое запускается от имени непривилегированного пользователя, которому необходимо создать учетные записи Linux.

Я бы предпочел не запускать его как root, поэтому единственная схема, о которой я думаю, - это создать простую программу suid на C, которая принимает один аргумент и запускает adduser для создания учетных записей. В качестве дополнительной безопасности эта программа будет иметь 700 для учетной записи пользователя, которая запускает веб-приложение.

Любые другие идеи / подходы к этому?

Веб-сайт должен вызывать защищенный скрипт с помощью утилиты sudo для получения привилегий root только при необходимости.

Если вам не нужно мгновенное создания учетной записи, и возможна задержка примерно в 1 минуту, вы можете использовать следующую идею.

  1. Должно быть 2 каталога, доступных для записи веб-приложением: www-tmp, www-job

  2. Каждый раз, когда веб-приложение получает запрос на создание учетной записи, оно создает файл в каталоге web-tmp. Затем переместите файл в веб-задание. Причина, по которой не следует создавать файл непосредственно в www-job, состоит в том, чтобы предотвратить чтение незавершенного файла заданием cron (см. Следующий шаг).

  3. Создайте задание cron с необходимым разрешением, запускаемое каждую минуту. Каждый раз при запуске он будет обрабатывать все файлы в www-job, создавать учетные записи, а затем удалять файлы. Продолжайте проверять и обрабатывать, пока www-job не станет пустым. Используйте блокировку pid для предотвращения параллельной работы.

При использовании описанного выше потока вашему веб-приложению не требуется никаких дополнительных разрешений.

Веб-приложение - это стойка заказов. Cron job - это производственная линия. www-job - это зона очереди. Разные отделы, разные разрешения.

Таблицу базы данных можно использовать вместо файла / каталога для постановки в очередь.

PS: Ваша задача cron, независимо от того, является ли она bash, php или perl, должна выполнить последнюю проверку перед передачей аргумента системному вызову.

Имя пользователя должно содержать только буквенные символы (все буквы в нижнем или верхнем регистре, если вы хотите использовать имя без учета регистра) числовые, возможно, с добавлением точки (.).

Для пароля проверьте минимальную длину. Убедитесь, что сценарий (двойная проверка, тройная проверка) передает ее системному вызову как одну строку, И системный вызов принимает его как одну строку.