Strona 1 z 1
skrypt php adduser + reser ftp
: 03 kwie 2012, 11:04
autor: wujeksamozuo
Hej, w trakcie pisania skryptu php napotkałem problem mianowicie jak za pomocą php moge w limuxie dodać użytkownika z konkretnym loginem i katalogiem domowym?
Czy należy np napisać jakis plik wykonywalny w którym bedą komendy dodawania usera i w skrypcie php dać polecenie uruchomienia go? czy jak? i kolejne pytanie, jak zrestartować proftpd z poziomu skryptu php?
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 11:19
autor: ethanak
Jeśli to ma być wykonane z poziomu serwera HTTP to zapomnij o takiej możliwości.
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 11:25
autor: wujeksamozuo
Dlaczego? w windowsie była możliwość uruchamiania np plikow bat z poziomu php.
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 11:53
autor: soulreaver1
Możesz przekazać dowolne polecenie z php do konsoli Linuxa za pomocą funkcji php "exec" lub "system".
Kod: Zaznacz cały
$sysquery = system("sh ~/scripts/useradd.sh $user $pass", $result);
useradd.sh:
#!/bin/bash
useradd $1
passwd $1 $2
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 12:11
autor: wujeksamozuo
No i własnie takiej odpowiedzi oczekiwałem

Jakiś przykład działania?
Kod: Zaznacz cały
<?php
echo exec("adduser NAZWA_USERA");
echo exec ("/opt/lampp/lampp stopftp");
echo exec ("/opt/lampp/lampp startftp");
Czy to będzie poprawne? a co z prawami admina? Pewnie bedzie wymagane podanie hasła administratora, jak to uzupełnic?
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 12:40
autor: ethanak
No i właśnie w tym problem że nie odpalisz bezpośrednio programu z prawami roota z poziomu serwera. Po prostu serwer uruchamiając zewnętrzne polecenie ignoruje bit SUID.
Jest możliwe obejście tego (sam to stosowałem), ale nie w php. Stąd moja odpowiedź że się nie da.
BTW. nie useradd ani adduser tylko newusers, soulreaver1 nie wpuszczaj ludzi w kanał próbując wyważać otwarte drzwi.
Tu masz przykładowy kod w C:
Kod: Zaznacz cały
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
seteuid(0);
setegid(0);
setuid(0);
setgid(0);
system("/tu/polecenie/coś/robiące/z/prawami/roota");
}
Kompilujesz to, zmieniasz właściciela na root.root, dajesz chmoda 6755 i wywołujesz pośrednio przez skrypt w bashu.
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 13:14
autor: soulreaver1
ethanak pisze:
BTW. nie useradd ani adduser tylko newusers, soulreaver1 nie wpuszczaj ludzi w kanał próbując wyważać otwarte drzwi.
Bardzo przepraszam że próbowałem pomóc

. Widzę że przyjmujesz że celowo sugeruję komuś trudniejszy sposób rozwiązania problemu, a ja po prostu nie znałem wcześniej polecenia newusers, więc zaproponowałem rozwiązanie które znam.
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 13:19
autor: ethanak
Nic takiego nie sugeruję - po prostu zaznaczyłem że skoro istnieje polecenie robiące dokładnie to co jest potrzebne nie ma potrzeby tworzyć protez.
Zresztą Twój sposób i tak nie będzie działać (uprawnienia)...
Re: skrypt php adduser + reser ftp
: 03 kwie 2012, 22:46
autor: wujeksamozuo
Chłopaki zamiast sie kłócić lepiej powiedzieli byście mi krok po kroku jak sie do tego zabrac ;>
Moze zapytam jeszcze tak: Czy do utworzenia usera wymagane bedzie hasło admina i di restartu proftpd?
Re: skrypt php adduser + reser ftp
: 04 kwie 2012, 06:14
autor: ethanak
Przecież Ci napisałem wyraźnie. Jeśli nie zrozumiałeś to znaczy, że zadanie Cię przerasta.
Re: skrypt php adduser + reser ftp
: 04 kwie 2012, 07:41
autor: jacekalex
A ja tylko dodam, że wrzucanie skryptów z setuid 0 na serwer www jest delikatnie piszac niemądre (mam na myśli bezpieczeństwo), raczej radziłbym komunkację z zewnętrznym demonem przez soket, albo najprostsza opcja odpowiedni wpis wysłany do pliku logu i z drugiej strony
Swatch, który zczytuje log i wykonuje odpowiednie akcje.
W dodatku, obecnie w Ubuntu Apache ma wbudowaną funkcję chroot, i jest chroniony Apparmorem, a jak appparmor i chroot pozwolą wykonać skrypt z setuid 0 z poziomu apacha, to mnie na ręku kaktus wyrośnie.
Poza tym pewno lamerstwo totalne wyłazi z samego problemu:
Czemu nie zastosujesz
pam-mysql albo pam-postgresql, sktrypt php insertuje usera do bazy, serwer ftp korzysta z uwierzytelnienia pam (też wykorzystuje pam-*sql), przy próbie zalogowania automatycznie tworzy folder domowy pacjenta ( w
Proftpd to jest wykonalne, w
Pure-ftpd też), i gotowe.
To by było na tyle

Re: skrypt php adduser + reser ftp
: 04 kwie 2012, 08:30
autor: ethanak
jacekalex pisze: a jak appparmor i chroot pozwolą wykonać skrypt z setuid 0 z poziomu apacha, to mnie na ręku kaktus wyrośnie.
Pytanie: co ma chroot wspólnego z suidem? Bo może czegoś nie wiem...
Pytanie drugie: jak często sukulenta podlewasz? Podobno za często nie można... A ładnie kwitnie?

(uprzedzając: właśnie udało mi się z poziomu apacza wykonać jako root 'touch cośtam.txt')
Poza tym pewno lamerstwo totalne wyłazi z samego problemu:
To inna sprawa - ale może ktoś chce to zrobić właśnie w taki lamerski sposób?
Re: skrypt php adduser + reser ftp
: 04 kwie 2012, 09:02
autor: jacekalex
Właśnie jako root stworzyleś plik txt? gratulacje, widocznie nie masz włączonego apparmora dla Apacha, co wymaga zaistalowania libapache2-mod-apparmor (o ile pamiętam).
I jeśli ktoś zamierza wystawić Apacha na świat, to lepiej go włączyć.
Z resztą tu masz znacznie lepsze wyjaśnienie problemu shell_exec i takich skryptów:
http://forums.gentoo.org/viewtopic-p-6801366.html
Pozdrawiam

Re: skrypt php adduser + reser ftp
: 04 kwie 2012, 09:36
autor: ethanak
jacekalex pisze:Właśnie jako root stworzyleś plik txt? gratulacje, widocznie nie masz włączonego apparmora dla Apacha, co wymaga zaistalowania libapache2-mod-apparmor (o ile pamiętam).
Mam - specjalnie na Twoją cześć włączyłem (konkretnie aby sprawdzić czy mi się to uda). Co do problemów z shell_exec i takich tam to walczyłem z tym ładnych parę lat temu, stąd conieco tricków w pamięci zostało
Zresztą - może coś zrobiłem źle, jeśli chcesz to sprawdź sam i mnie popraw (sposób podany parę postów wyżej).
Re: skrypt php adduser + reser ftp
: 11 kwie 2012, 23:49
autor: ekitowski
Jak by się uparł to można skorzystać z
http://www.libssh2.org/,
http://pecl.php.net/package/ssh2 i odpalamy sobie shella w php-ie i działamy - tylko czy w tym przypadku to jest sensowne rozwiązanie? Oczywiście to pytanie należy to tych z gatunku retorycznych...
Pozdrawiam