ftp (proftpd) konta przez PHP

Konfiguracja serwerów, usług, itp.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

ftp (proftpd) konta przez PHP

Post autor: Robert007 »

Witam.

Mam problem bo właśnie nie wiem jak zrobić by można byłoby przez php utworzyć poleceniem przez funkcję exec konta ftp na root.

Gdy tworzę ręcznie to tworzę poleceniem:

Kod: Zaznacz cały

adduser login
Po czym kilka linijek za tym wyskakuje informacja podania hasła i następnie potwierdzenie. A jak to zrobić przez php?
Awatar użytkownika
Yuji
Posty: 27
Rejestracja: 17 maja 2009, 13:34

Post autor: Yuji »

O temat pod moją pracę inżynierską (biorę się za to w wakacje). Z tego co wiem to będą problemy z uprawnieniami.
Serwer (apache) pracuje z uprawnieniami www-data. A na dodanie użytkownika potrzeba uprawnień admina (roota).

Musiałbyś utworzyć skrypty basha (lub programy w C, C++, ...), które na czas trwania skryptu (dodającego użytkownika) ustawiałby uprawnienia roota (na serwer apache), wtedy exec zadziała.
Albo bezpieczniej:
1. Utworzyć skrypt dodający użytkownika (z 'sudo adduser $1' w środku - nick jako argument sczytać)
2. Dodać skrypt do sudoers (aby nie wymagał hasła).
3. W php skrypt z: exec ("skrypt.sh $login $pass1 $pass2") - ewentualnie dodatkowo z innymi parametrami i lekko zmodyfikować kod, aby sprawdzać czy system może dodać użytkownika (czy istniał wcześniej).
Drugi parametr exec zawiera wyjście jakie zwraca skrypt (tablicę), a trzeci kod wyjścia programu.

Spróbuj Google:

Kod: Zaznacz cały

php exec root privilege
To tyle co ogólnie wiem (przed obroną pracy powinienem to wiedzieć już na 100%). Może jest prostszy sposób.
Daj cynk co i jak, jak sobie z tym poradzisz.

Może pomoże: http://algorytmy.pl/doc/php/function.exec.php (poczytaj niżej posty z przykładami). Chyba (na 99.9%) to są nawet te same posty co z php references [http://php.net/manual/en/function.exec.php].

Ciekawy jest post "p dot koeman at wittenborg-university dot com" z 29-Aug-2005 03:22 (gdzieś środek strony).

Inny przykład: http://www.cyberciti.biz/tips/change-li ... cript.html

A co do hasła to pokombinuję. Próbowałeś strumieniami?

Edycja:
Ok lekko pokombinowałem:

myadd:

Kod: Zaznacz cały

#!/bin/bash
if [ $# -ne 3 ]; then print "Zła liczba argumentów!"; exit 1; fi
//$2, $3 - zawierają hasło podane z pliku php (exec)
echo "$2\n$3" | sudo adduser $1
Chowasz plik do np. /usr/bin (uprawnienia i grupę tylko dla roota dajesz) (np. 700), dodajesz plik do sudoers, tak aby apache (www-data) mógł odpalić.

Kod: Zaznacz cały

chmod 700 myadd
mv myadd /usr/bin/myadd
Wpis w sudoers:

Kod: Zaznacz cały

www-data    ALL=NOPASSWD: /usr/bin/myadd
Plik edytujesz za pomocą polecenia:

Kod: Zaznacz cały

visudo
A w pliku php:

Kod: Zaznacz cały

...
	$pass1="pass1234";
	$pass2="pass1234";
	$login="login1111";
	$cmd="sudo /home/silver/myadd $login $pass1 $pass2";
//	echo "'$cmd'";// debugowanie :)
	exec("$cmd", $out);
...
Mam nadzieję, że ogólną ideę dałem.

P.S. Polecenie adduser pozwala na zapisanie więcej danych (imię, telefon, itp.), które możesz też dodać (wystarczy dodać więcej zmiennych[wczytanych z parametrów] do myadd.sh i przy exec dodać kolejne argumenty).

mariaczi, MySQL oczywiście tez można połączyć, ale tu chodzi raczej o sam problem dodania użytkownika do systemu.
Tworzenie użytkowników w systemie za pomocą polecenia adduser login jaki podał przy ,,rejestracji'' w formularzu do PHP, a PHP ma dodać użytkownika do systemu i automatycznie dostał dostęp do danych za pośrednictwem ftp.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Robert0007, jeśli to mają być konta tylko ftp (tzn. nie muszą być równocześnie kontami systemowymi) to możesz wykorzystać połączenie proftpd+mysql (czy inna baza danych).
kaworu
Posty: 72
Rejestracja: 05 lutego 2009, 20:20

Post autor: kaworu »

http://www.suphp.org/Home.html zamiast bawić z uprawnieniami, są odpowiednie moduły do apache.

Jeśli to ma być tylko konto ftp to albo należy zmienić powłokę użytkownika co by nie mógł się logować przez ssh na /bin/false, albo jak już zostało wspomniane baza danych.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Yuji pisze:... ale tu chodzi raczej o sam problem dodania użytkownika do systemu.
Tworzenie użytkowników w systemie za pomocą polecenia adduser login jaki podał przy ,,rejestracji'' w formularzu do PHP, a PHP ma dodać użytkownika do systemu i automatycznie dostał dostęp do danych za pośrednictwem ftp.
Tu chodzi o to jakie to konto ma spełniać potem zadania. Czy będzie to konto np. tylko pocztowe, czy będzie to konto tylko dla ftp (i wtedy należało by zrobić jak wspomniał kaworu). Są to tak zwane konta wirtualne. A może, czy będzie/ma być to konto użytkownika w systemie. W zależności który z wariantów ma być zastosowany należy dobrać odpowiednie rozwiązanie.
Do poruszonego problemu przez autora wątku można np. użyć skryptu w cron, który co X czasu uruchamia się i sprawdza czy np. w odpowiednim pliku nie ma danych do utworzenia konta. Również jest to rozwiązanie.
ODPOWIEDZ