proftp i mysql w 15 minut

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

proftp i mysql w 15 minut

Post autor: dhapollo »

Witam.

Jest to mój pierwszy temat więc proszę o wyrozumiałość
Wzorowałem się na opisie http://www.debianek.jachpol.net/index.php?id=b203

Pakiety do zainstalowania (może niektóre są zbędne teraz, ale przydadzą się na serwerze):
ssh, mc, mysql-server-5.0, mysql-client-5.0, mysql-common, libmysql15off, apache2, phpmyadmin, php5, proftpd-mod-mysql
Pakiety instalujemy poleceniem:

Kod: Zaznacz cały

 apt-get install  nazwa_pakietu
np.:

Kod: Zaznacz cały

 apt-get install ssh
Teraz edytujemy plik:

Kod: Zaznacz cały

/etc/proftpd/proftpd.conf
dodając na końcu kilka linijek:

Kod: Zaznacz cały

DefaultRoot                    ~

<IfModule !mod_sql_mysql.c>
      # If mod_sql_mysql is not yet loaded, load it!
      LoadModule mod_sql_mysql.c
    </IfModule>



SQLConnectInfo  proftpd@localhost:3306 proftpd naszehaslo
SQLUserInfo     users name pass uid gid home shell
SQLGroupInfo    groups name gid members
SQLAuthenticate         users* groups*
SQLAuthTypes    PlainText
SQLLogFile /var/log/proftpd/mod_sql.log
Teraz zmieniamy plik:

Kod: Zaznacz cały

 /etc/proftpd/modules.conf
w poniższy sposób:

Kod: Zaznacz cały

# Install proftpd-mod-mysql or proftpd-mod-pgsql to use this
LoadModule mod_sql.c
Wykonujemy restart serwera poleceniem:

Kod: Zaznacz cały

 /etc/init.d/proftpd restart
Już mamy przygotowany serwer do obsługi bazy danych. Tworzymy naszą bazę danych za pomocą phpmyadmina. Panel znajdziemy pod adresem: http://localhost/phpmyadmin/ logujemy się na konto root.

Za pomocą kodu SQL dodajemy nowego użytkownika, bazę, tabele i pierwsze testowe konto.

Ważne: Pamiętaj aby nadać użytkownikowi proftpd prawa odczytu, zapisu, modyfikacji, usuwania danych z bazy proftpd!

Kod: Zaznacz cały

 USE mysql;
INSERT INTO user (Host, User, Password) VALUES  ('localhost','proftpd',password('naszehaslo'));
  CREATE DATABASE proftpd;
  USE proftpd;
CREATE TABLE users (
name varchar(30) NOT NULL default '',
pass varchar(30) NOT NULL default '',
uid int(11) NOT NULL auto_increment,
gid int(11) NOT NULL,
home varchar(255) NOT NULL,
shell varchar(255) NOT NULL,
PRIMARY KEY (uid),
UNIQUE KEY name (name)
) TYPE=MyISAM AUTO_INCREMENT=50 ;
  USE proftpd;
CREATE TABLE groups (
name varchar(30) NOT NULL default '',
gid int(11) NOT NULL,
members text NOT NULL,
PRIMARY KEY (gid),
UNIQUE KEY name (name)
) TYPE=MyISAM AUTO_INCREMENT=50 ;
Dodajemy 1 konto testowe.

Kod: Zaznacz cały

USE proftpd;
 INSERT INTO users (name,pass,gid,home,shell) VALUES  ('konto1','haslo','2000','/home/ftp/konto1','/bin/sh');
 INSERT INTO groups (name,gid,members) VALUES  ('grupa1','2000','konto1');
Musimy jeszcze utworzyć katalog domowy naszego użytkownika w lokalizacji:

Kod: Zaznacz cały

 /home/ftp/
Dodajemy nowy folder o nazwie konto1 i nadajemy uprawnienia:

Kod: Zaznacz cały

chmod 777 -R /home/ftp/
Powyższy opis działa w 100%. Testowałem kilkakrotnie, na pewno można to zrobić inaczej, prościej, lepiej ale niestety ja nie potrafię.

Mam nadzieję, że powyższy opis przyda się początkującym użytkownikom.

Postanowiłem uzupełnić opis o dodawanie kont z poziomu www oraz połączenie z serwerem www (apache2)

Więc zaczynamy od edycji pliku /etc/apache2/mods-available/alias.conf, dopisując:

Kod: Zaznacz cały

Alias /www/ "/home/ftp/"

<Directory "/home/ftp/">
    Options Indexes MultiViews
        AllowOverride none
            Order allow,deny
                Allow from deny
                </Directory>
Strony użytkowników będą teraz dostępne pod adresem:

Kod: Zaznacz cały

[url=http://domena.pl/www/nazwa_u%C5%BCytkownika/www/]http://domena.pl/www/nazwa_użytkownika/www/[/URL]
Stronę domową umieszczamy w /home/jakiś_folder/www/ Dodatkowo edytujemy plik /etc/apache2/sites-available/default zmieniając na:

Kod: Zaznacz cały

        DocumentRoot /home/[B]jakiś_folder[/B]/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/[B]jakiś_folder[/B]/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
Teraz w folderze /home/jakiś_folder/www/ tworzymy dwa pliki:
Pierwszy: dodaj.html (zbiera informacje)

Kod: Zaznacz cały

<form action="dodaj.php" method="post">
Nick:

<input type="text" name="nick" />

Hasło:

<input type="text" name="haslo" />


<input type="submit" value="dodaj" />
</form>
Drugi: dodaj.php (dodaje dane do bazy, tworzy foldery użytkowników):

Kod: Zaznacz cały

<?php

// odbieramy dane z formularza
$nick = $_POST['nick'];
$haslo = $_POST['haslo'];
$home = "/home/ftp/$nick";

    
// łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'proftpd', 'naszehaslo')
    or die('Brak połączenia z serwerem MySQL');
    mysql_select_db('proftpd')
    or die('Nie mogę połączyć się z bazą danych');
    
// dodajemy rekord do bazy
    $insert = "INSERT INTO users (name, pass, home)" .
        "VALUES ('$nick', '$haslo', '$home')";
    
    $results = mysql_query($insert)
or die(mysql_error());

 echo "<h1>Nowe konto zostało utworzone</h1>";
   
    
    mysql_close($connection);


$dir1 = "../../ftp/$nick";
mkdir($dir1, 0777);
$dir2 = "../../ftp/$nick/www";
mkdir($dir2, 0777);

chmod("../../ftp/$nick/", 0777);
chmod("../../ftp/$nick/www", 0777);

echo "
<b>Login:</b> $nick  

<b>Hasło:</b> $haslo  

 <b>Adres serwera FTP:</b> domena.pl  
 
<b>Aders strony www:</b>  www.domena.pl/www/$nick/www/ 
 

";


?>
Już prawie koniec :) pozostało tylko za pomocą phpmyadmin edytować w tabeli użytkowników (ang. users) dwa pola:
  1. shell dodajemy żeby domyślnie było wstawiane /bin/sh
  2. gid dodajemy żeby domyślnie było wstawiane 2000
Otwieramy stronę:

Kod: Zaznacz cały

[URL]http://domena.pl/dodaj.html[/URL]
podajemy nick i hasło, klikamy dodaj i już mamy utworzonego nowego użytkownika, teraz pozostało sprawdzić za pomocą ulubionego klienta FTP czy wszystko działa poprawnie.

Jeszcze przydałoby się narzędzie do edycji i zarządzania użytkownikami

Kod: Zaznacz cały

[url=http://domena.pl/dodaj.html]http://domena.pl/edit.php[/URL]
Zaczynamy od stworzenia pliku edit.php w tym samym katalogu co poprzednie pliki.

Kod: Zaznacz cały

 <?php
// łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'proftpd', 'naszehaslo')
    or die('Brak połączenia z serwerem MySQL');
    mysql_select_db('proftpd')
    or die('Nie mogę połączyć się z bazą danych');

/* zapytanie do konkretnej tabeli */
$wynik = mysql_query("SELECT * FROM users")
or die('Błąd zapytania');

/*
wyświetlamy wyniki, sprawdzamy,
czy zapytanie zwróciło wartość większą od 0
*/
if(mysql_num_rows($wynik) > 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
    echo "<table cellpadding=\"2\" border=1>";
    echo "<tr>";
    echo "<td><a href=dodaj.html>Dodaj nowe</a></td>";
    echo "</tr>";
    while($r = mysql_fetch_assoc($wynik)) {
    echo "<tr>";
        echo "<td>".$r['name']."</td>";        
    echo "<td>".$r['home']."</td>";
    echo "<td>".$r['uid']."</td>";
        echo "<td>
       <a href=\"del.php?a=del&uid={$r['uid']}\">DEL</a>
       <a href=\"form.php?uid={$r['uid']}&name={$r['name']}&pass={$r['pass']}&home={$r['home']}\">EDIT</a>
       </td>";
        echo "</tr>";
    }
    echo "</table>";
}

?> 
Tworzymy plik o nazwie form.php (w nim będziemy mogli edytować dane):

Kod: Zaznacz cały

<?php 
$uid = $_GET['uid'];
$name = $_GET['name'];
$pass = $_GET['pass'];
$home = $_GET['home'];
echo $uid;
echo "
";


 echo "<table border=\"0\"><form action=\"update.php\" method=\"post\"> 
<tr> 
<td>NR ID</td> 
<td><input type=\"text\" name=\"uid\" style=\"width: 250px\" value=\"$uid\"></td> 
</tr>
<tr> 
<td>Email</td> 
<td><input type=\"text\" name=\"name\" style=\"width: 250px\" value=\"$name\"></td> 
</tr> 
<tr> 
<td>Hasło</td> 
<td><input type=\"password\" name=\"pass\" style=\"width: 250px\" value=\"$pass\"></td> 
</tr> 
<tr> 
<td>Katalog domowy</td> 
<td><input type=\"text\" name=\"home\" style=\"width: 250px\" value=\"$home\"></td> 
</tr>
<tr> 
<td> </td> 
<td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">  
<input type=\"reset\" value=\"Od nowa\"></td></form> 
</tr> 
</table>"; 
?>
Tworzymy plik update.php:

Kod: Zaznacz cały

<?php
$name = $_POST["name"]; 
$pass = $_POST["pass"]; 
$home = $_POST["home"]; 
$uid = $_POST["uid"]; 

// łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'proftpd', 'naszehaslo')
    or die('Brak połączenia z serwerem MySQL');
    mysql_select_db('proftpd')
    or die('Nie mogę połączyć się z bazą danych');
 
$query="UPDATE users SET name='$name', pass='$pass', home='$home' WHERE uid='$uid'";

mysql_query($query);
echo "Rekord zaktualizowany";
mysql_close();

echo "

Nazwa konta: $name";
echo "
Hasło: $pass";
echo "
Katalog użytkownika: $home";
echo "

<a href=edit.php>Powrót</a>";

?>
Już możemy edytować dane w bazie, teraz za zajmiemy się ich usuwaniem (niestety nie usuwa katalogu, tylko dane z bazy). W tym celu otwórzmy plik del.php:

Kod: Zaznacz cały

<?php
//łączymy się z bazą danych
    $connection = mysql_connect('localhost', 'proftpd', 'naszehaslo')
    or die('Brak połączenia z serwerem MySQL');
    mysql_select_db('proftpd')
    or die('Nie mogę połączyć się z bazą danych'); 
mysql_query("DELETE FROM users WHERE `uid`='".mysql_real_escape_string($_GET['uid'])."'");

echo "Dane zostały usunięte z bazy,
 Usuń folder użytkownika <a href=edit.php>Powrót</a>";
?>
Mam nadzieję, że przepis się przyda.
Zablokowany