2013-02-20 3 views
4

В настоящее время я работаю над созданием системы-члена для моего FTP-сервера для близких друзей, которым я хочу иметь доступ к серверу, однако FTP-сервер, который я использую (proFTPd), использует пользователей linux в качестве учетной записи каждого участника. Поэтому мне нужно использовать html-форму с php, конечно, которая будет иметь доступ к серверу и сможет создать пользователя в системе.Создайте пользователя linux, используя php?

Прямо сейчас у меня есть форма, полностью настраиваемая с его проверкой имени/имени пользователя/пароля и сохранением его в моей базе данных sql. Единственное, чего мне не хватает, это создать нового пользователя, чтобы закончить его.

Я знаю, что это не всегда самое безопасное, однако я хочу, чтобы это сделать, и я знаю об опасности, так что любая помощь будет хорошо ...

Как прямо сейчас от того, что я всегда используется для создать пользователя на Linux (или моей версии Ubuntu по крайней мере) это:

useradd [username] -p [password] -d [/path_to_home_directory] -s [/bin/false] 

без скобок конечно.

Я также знаю команды php: shell_exec, exec, system() Однако я пробовал каждый из них с линией для создания пользователя в ней, и ничего не будет работать.

Я сделал немного больше исследований и заметил, что веб-сервер работает на www-data (каким он должен быть), и у него нет доступа к команде useradd. Так что я 'viduso' это и до сих пор не изменилось.

Из того, что я видел, я могу предоставить доступ к www-данным скрипту на сервере, который затем создаст пользователя как root, но я не знаю, как перенести переменные, хранящиеся в php, в скрипт.

Если вам нужна дополнительная информация, чтобы помочь просто спросить. Это последнее, что мне нужно, чтобы завершить мой последний 2-месячный проект, который включает настольное приложение и все такое. Это так близко, но я не могу понять.

+0

Посмотрите на это: http://stackoverflow.com/questions/7300299/how-to-run-cmd-as-root-from-apache-centos/7300402#7300402 Все советуют запускать shell-скрипт, который будет создайте пользователя как root. – Hast

+0

@Hast Я видел это, однако это восходит к проблеме, которую я испытывал с переменными. Я не уверен, как использовать переменные, определенные в php в сценарии оболочки в системе. –

+0

В чем проблема? Передайте переменную php как аргумент параметра shell-script. Как 'exec ('./ myscript.sh'. $ Var1. ''. $ Var2);' – Hast

ответ

3

Вы не должны создавать учетную запись пользователя Unix для службы FTP, вы должны интегрировать ваш сервер proFTP использовать MySQL для аутентификации (хранилище учетных записей в MySQL), так что в этом случае вам не нужно создавать учетную запись Unix и было бы гораздо лучше и безопасное решение:

proFTP with MySQL

+0

Это звучит как отличная идея, я даже не думал об этом, потому что ... большое спасибо! Я еще раз отвечу, если я смогу его запустить и запустить! –

+1

Это работало как шарм. У меня возникли проблемы с моим SQL-сервером в начале, но это не имело никакого отношения к учетным записям. Еще раз спасибо. Это очень ценится! –

2

Вы можете установить setuid bit в useradd, поэтому он запускается с доступом root (например). Но учтите, что: ЭТО ОЧЕНЬ РИСКИ. Это позволит любому пользователю на сервере создавать пользователей.

В любом случае, я думаю, что это дыра в безопасности, позволяющая веб-php-скрипту создавать учетные записи!

+0

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

-1

сценарий будет так:

<?php 

$user_name = "uuttyy"; 
$user_pass = "passwer9911"; 

$ret_useradd = 0; 
$ret_passwd = 0; 

passthru('useradd -m '.$user_name, $ret_useradd); 

if ($ret_useradd) { 
     printf("Something wrong with useradd, code: %d\n", $ret_useradd); 
     exit(); 
} 

passthru('echo "'.$user_name.':'.$user_pass.'" | chpasswd', $ret_passwd); 

if ($ret_passwd) { 
     printf("Something wrong with chpasswd, code: %d\n", $ret_passwd); 
     echo exec('userdel '.$user_name); 
     exit(); 
} 

printf("All done!\n"); 

?> 

Но правильный ответ не делать таким образом, это есть проблема безопасности s! Настройте (или измените) ваш FTP-сервер на использование пользовательских баз данных и добавьте пользователей в эту БД. Как говорят Satish, proftpd + mariadb (mariadb - лучшая вилка из mysql) хороша для этого

1

Просто примечание. При использовании типов панели управления вам иногда приходится выполнять действия с правами root. Я нашел, что лучшие способы сделать это - запустить панель управления PHP без каких-либо повышенных привилегий. Достаточно сложно сделать правильно защищенное веб-приложение PHP, так как оно не подвергает уязвимости хост-системе.

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

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

0

Я думаю, что самый безопасный способ сделать это - установить пользователя веб-сервера в качестве sudoer только для команд, начинающихся с useradd или adduser независимо от вашего дистрибутива. Поэтому вам не нужно делать свой веб-пользователь как root.

Смежные вопросы