Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie kont ftp z poziomu php
Forum PHP.pl > Forum > PHP
krocio
Witam serdecznie jestem posiadaczem linuxa Ubuntu i mam pewien problem.

Gdy tworzę komendą która tworzyć użytkownika z poziomu php linux nie odpowiada i nie dodaje konta

  1. ssh2_exec($connection, "adduser nazwa_uzytkownika -p haslo");
  2.  


I nie tworzy konta
Proszę o pomoc.

Może teraz będzie wam ławiej pomóc.

Posiadam skrypt php który ma dodawać uusera:

  1. <form method="post">
  2. <p>Login:<br />
  3. <input name="username" type="text" id="login"><br />
  4. </p>
  5. <p>Full Name:<br />
  6. </p>
  7. <p>Password:<br />
  8. <input name="password" type="password" id="pwd"><br />
  9. </p>
  10. <p>
  11. <input type="submit" name="Submit" value="Create">
  12. </p>
  13. </form>
  14. </body>
  15. </html>
  16.  
  17. <?php
  18. if (isset($_POST['Submit'])) {
  19.  
  20. $login=$_POST['username'];
  21. $passwd_crypt=crypt($_POST['password']);
  22.  
  23. $res=`bash /var/www/cgi-bin/user.sh $login '$passwd_crypt'`;
  24. }
  25. ?>


Następnie łączy się z user.sh i niechce dodać użytkownika oto skrypt user.sh
  1. #!/bin/bash
  2. # Script to add a user to Linux system
  3. if [ $(id -u) -eq 0 ]; then
  4. read -p "Enter username : " $1
  5. read -s -p "Enter password : " $2
  6. egrep "^$username" /etc/passwd >/dev/null
  7. if [ $? -eq 0 ]; then
  8. echo "$1 exists!"
  9. exit 1
  10. else
  11. pass=$(perl -e 'print crypt($ARGV[0], "$2")' $2)
  12. useradd -m -p $2 $1
  13. [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
  14. fi
  15. else
  16. echo "Only root may add a user to the system"
  17. exit 2
  18. fi


Proszę o pomoc sad.gif
skowron-line
A nie widzę u ciebie
http://www.php.net/manual/pl/book.exec.php
krocio
  1. exec($res);


nic nie pomogło sad.gif

troszkę uprościłem user.sh
  1. sudo /usr/sbin/useradd $1 -g users -c "$2" -d /home/$1 -s /bin/bash -p $3
  2. sudo /bin/mkdir /home/$1
  3.  
  4.  
  5. sudo /bin/chown -R $1:users /home/$1


dalej nie działa
skowron-line
Jak z pziomu konsoli próbujesz odpalić swoj skrypt .sh to działa questionmark.gif Coś pokazuje questionmark.gif W phpie daje jakąś odpowiedz questionmark.gif

Edit:
Przeciecież, jeżeli nie jesteś rutem to po wywołaniu sudo zapyta o hasło ruta i tu pewnie jest problem. Uprawinienia ! czy user na którym odpalasz skrypt ma wystarczające prawa
gothye
tylko po co dodawać przez shell ?

zainstaluj proftpd + dodatek mysql , dzięki temu będziesz mógł zarządzać serwerem przez bazę mysql

to rozwiązanie ma same zalety oraz dostarcza wiecej opcji
krocio
mam zainstalowane proftpd


a dokładniej jak nazwya sie ten dodatek? mysql?

odnośnie konta root to jest on odpalany z konta root

  1.  
  2. <html>
  3. <head>
  4. <title>Useradd</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6. </head>
  7. <body>
  8. <form name="form1" method="post">
  9. <p>Login:<br />
  10. <input name="login" type="text" id="login"><br />
  11. </p>
  12. <p>Full Name:<br />
  13. <input name="name" type="text" id="name"><br />
  14. </p>
  15. <p>Password:<br />
  16. <input name="pwd" type="password" id="pwd"><br />
  17. </p>
  18. <p>
  19. <input type="submit" name="ok" value="Create">
  20. </p>
  21. </form>
  22. </body>
  23. </html>
  24.  
  25. <?php
  26. if (isset($_POST['ok'])) {
  27. if (isset($_POST['login'])) {
  28. $connection = ssh2_connect('ip.adress', 22);
  29. ssh2_auth_password($connection, 'root', 'pass');
  30. if ($connection) {
  31. $login=$_POST['login'];
  32. $nombre=$_POST['name'];
  33. $passwd_crypt=crypt($_POST['pwd']);
  34.  
  35. $res=`bash /var/www/cgi-bin/user.sh $login "$name" '$passwd_crypt'`;
  36. exec($res);
  37. echo "<br><br>User stworzony";
  38. }
  39. }
  40. }
  41. ?>
gothye
Wszystko masz tutaj :

http://www.howtoforge.com/virtual-hosting-...sql-ubuntu-8.04

smile.gif
krocio
i czy w momencie dodanie użytkownika do bazy katalog dla użytkownika w /home sie utworzy?

Czy trzeba ręcznie ewnetualnie zostaje

  1. ssh2_exec($connection, "mkdir /home/nazwa");


Proszę o krótką odpowiedź smile.gif
gothye
katalog użytkownika musisz już wykonać za pomocą shell'a + nadanie praw (w przypadku proftpd+mysql użytkownika w systemie linux nie ma ,więc nadajesz prawa dla katalogu , takie samo jakie posiada proftpd), nie koniecznie w /home , proponuje osobna partycję + chroot proftpd
prz3kus
ewentualnie dodać do pliczku sudoers wpisik:

www-data ALL=(ALL) NOPASSWD: ALL

i bawić się poleceniem exec() dalej smile.gif
erix
Też mu poradziłeś. Najlepiej, jak się dało... Jeśli jedziesz na takim serwerze, to podaj adres... tongue.gif

Rozwiązanie: skrypt w bashu, właściciel: root, prawa do wykonywania grupa (www-data) i ustawiasz sticky bit na odpalanie z prawami właściciela.

prz3kus
Cytat(erix @ 3.02.2012, 14:40:27 ) *
Też mu poradziłeś. Najlepiej, jak się dało... Jeśli jedziesz na takim serwerze, to podaj adres... tongue.gif

Rozwiązanie: skrypt w bashu, właściciel: root, prawa do wykonywania grupa (www-data) i ustawiasz sticky bit na odpalanie z prawami właściciela.


po. 1 to był przykładzik można to sparametryzować w tym pliczku bezpieczniej smile.gif
po. 2 zapewne po zawartości można stwierdzić że to serwer wewnętrzny więc nawet po wpisie bez hasełka ryzyko niewielkie
po. 3 twoja propozycja nie jest najgorsza co nie znaczy, że o jej bezpieczeństwie również można by było podyskutować tongue.gif
erix
Cytat
po. 1 to był przykładzik można to sparametryzować w tym pliczku bezpieczniej

W żadnym wypadku. Wystarczy, że będzie dziura w jakimkolwiek skrypcie i już proces demona httpd kontroluje cały system. Coś takiego jest niedopuszczalne.

Cytat
po. 2 zapewne po zawartości można stwierdzić że to serwer wewnętrzny więc nawet po wpisie bez hasełka ryzyko niewielkie

Prawa Murphy'ego zna?

Cytat
po. 3 twoja propozycja nie jest najgorsza co nie znaczy, że o jej bezpieczeństwie również można by było podyskutować

Jeśli masz możliwość nadpisania skryptu, to wówczas jest problem. Ale to zupełnie co innego niż przydzielenie pełnych uprawnień usłudze, która jest dość ryzykowna w działaniu.
krocio
Witam wszystko poszło gładko jednak pojawił sie problem przy konfigurowaniu pliku

/etc/proftpd/proftpd.conf

Musiałem dodać następujaca linię kodu

  1. DefaultRoot ~
  2.  
  3. SQLBackend mysql
  4. # The passwords in MySQL are encrypted using CRYPT
  5. SQLAuthTypes Plaintext Crypt
  6. SQLAuthenticate users groups
  7.  
  8.  
  9. # used to connect to the database
  10. # databasename@host database_user user_password
  11. SQLConnectInfo ftp@localhost root *******


Po restarcie serwera pojawił się błąd:


- Fatal: unknown configuration directive 'SQLBackend' on line 181 of '/etc/proftpd/proftpd.conf'



Sorka moja nie uwaga problem rozwiązałem, a leżał on w pliku:
/etc/proftpd/modules.conf

Konfiguracja lini:
  1. # Install proftpd-mod-mysql or proftpd-mod-pgsql to use this
  2. LoadModule mod_sql.c
  3. # Install proftpd-mod-mysql to use this
  4. LoadModule mod_sql_mysql.c
  5. # mod_sql_postgres.c


pomogło smile.gif

Napotkałem kolejny problem sad.gif

Proszę o pomoc

  1. if ($_GET['akcja']=="wlacz") {
  2.  
  3.  
  4.  
  5.  
  6. $nazwa = "serwer1";
  7. $user = "krocio1";
  8. $game = "cstrike"; // Gra
  9. $ip = "ip"; // IP SRV CS
  10. $port = "27112"; // SRV PORT
  11. $lan = "0"; // Server lan 1/0
  12. $maxplayers = "23"; // Sloty
  13. $map = "de_dust2"; // Mapa
  14.  
  15. $connection = ssh2_connect('ip', 22);
  16. ssh2_auth_password($connection, 'root', 'haslo');
  17. $stream1 = ssh2_exec($connection, 'cd /home/$user/hlds_l;screen -A -m -d $nazwa ./hlds_run -game $game +ip $ip +port $port +sv_lan $lan +maxplayers $maxplayers +map $map');
  18. if($connection) {
  19.  
  20. if($stream1) {
  21. echo 'Serwer wyłączony';
  22. } else {
  23. echo 'Wystąpił nie spotykany problem';
  24. }
  25.  
  26. } else {
  27. echo 'Problem połączenia z serwerem';
  28. }
  29.  
  30. }


Nie odpala się screen :/ tak jak by nie wchodził do katalogu próbowałem już na różne sposoby
  1. $stream1 = ssh2_exec($connection, 'cd /home/$user/hlds_l && screen -A -m -d $nazwa ./hlds_run -game $game +ip $ip +port $port +sv_lan $lan +maxplayers

  1. $stream1 = ssh2_exec($connection, 'cd /home/$user/hlds_l | screen -A -m -d $nazwa ./hlds_run -game $game +ip $ip +port $port +sv_lan $lan +maxplayers


I nic nie daje serwer nie startuje.
Ale jak w putty odpala z katalogu /home/user/hlds_l wszystko działa i screen się zapisuje.
gothye
pokaż co masz w logach
krocio
Wszystko już działa restart serwera apache pomógł smile.gif

dzięki bardzo za pomoc.

gothye +1 pomogłeś smile.gif
marekge
Czy przy takim rozwiązaniu pad bazy = brak dostępu do kont FTP snitch.gif?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.