skrypt php adduser + reser ftp

Instalacja i konfiguracja oprogramowania sieciowego.
wujeksamozuo
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 31 gru 2011, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Kontakt:

skrypt php adduser + reser ftp

Post 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?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post autor: ethanak »

Jeśli to ma być wykonane z poziomu serwera HTTP to zapomnij o takiej możliwości.
wujeksamozuo
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 31 gru 2011, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Kontakt:

Re: skrypt php adduser + reser ftp

Post autor: wujeksamozuo »

Dlaczego? w windowsie była możliwość uruchamiania np plikow bat z poziomu php.
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

Re: skrypt php adduser + reser ftp

Post 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
Ostatnio zmieniony 03 kwie 2012, 13:14 przez soulreaver1, łącznie zmieniany 2 razy.
wujeksamozuo
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 31 gru 2011, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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.
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

Re: skrypt php adduser + reser ftp

Post 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 :evil: . 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.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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)...
wujeksamozuo
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 31 gru 2011, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post autor: ethanak »

Przecież Ci napisałem wyraźnie. Jeśli nie zrozumiałeś to znaczy, że zadanie Cię przerasta.
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: skrypt php adduser + reser ftp

Post 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. :rotfl:

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
:craz:
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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. :rotfl:
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?
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: skrypt php adduser + reser ftp

Post 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
:craz:
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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).
Awatar użytkownika
ekitowski
Sędziwy Jeż
Sędziwy Jeż
Posty: 51
Rejestracja: 25 sie 2008, 15:03
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Re: skrypt php adduser + reser ftp

Post 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
ODPOWIEDZ

Wróć do „Sieci, serwery, Internet”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 11 gości