proftp i mysql w 15 minut
: 25 czerwca 2010, 13:17
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: np.:Teraz edytujemy plik:dodając na końcu kilka linijek:
Teraz zmieniamy plik:w poniższy sposób:
Wykonujemy restart serwera poleceniem:
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!
Dodajemy 1 konto testowe.
Musimy jeszcze utworzyć katalog domowy naszego użytkownika w lokalizacji:
Dodajemy nowy folder o nazwie konto1 i nadajemy uprawnienia:
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:
Strony użytkowników będą teraz dostępne pod adresem:
Stronę domową umieszczamy w /home/jakiś_folder/www/ Dodatkowo edytujemy plik /etc/apache2/sites-available/default zmieniając na:
Teraz w folderze /home/jakiś_folder/www/ tworzymy dwa pliki:
Pierwszy: dodaj.html (zbiera informacje)
Drugi: dodaj.php (dodaje dane do bazy, tworzy foldery użytkowników):
Już prawie koniec
pozostało tylko za pomocą phpmyadmin edytować w tabeli użytkowników (ang. users) dwa pola:
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
Zaczynamy od stworzenia pliku edit.php w tym samym katalogu co poprzednie pliki.
Tworzymy plik o nazwie form.php (w nim będziemy mogli edytować dane):
Tworzymy plik update.php:
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:
Mam nadzieję, że przepis się przyda.
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
Kod: Zaznacz cały
apt-get install ssh
Kod: Zaznacz cały
/etc/proftpd/proftpd.conf
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
Kod: Zaznacz cały
/etc/proftpd/modules.conf
Kod: Zaznacz cały
# Install proftpd-mod-mysql or proftpd-mod-pgsql to use this
LoadModule mod_sql.c
Kod: Zaznacz cały
/etc/init.d/proftpd restart
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 ;
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');
Kod: Zaznacz cały
/home/ftp/
Kod: Zaznacz cały
chmod 777 -R /home/ftp/
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>
Kod: Zaznacz cały
[url=http://domena.pl/www/nazwa_u%C5%BCytkownika/www/]http://domena.pl/www/nazwa_użytkownika/www/[/URL]
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>
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>
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/
";
?>

- shell dodajemy żeby domyślnie było wstawiane /bin/sh
- gid dodajemy żeby domyślnie było wstawiane 2000
Kod: Zaznacz cały
[URL]http://domena.pl/dodaj.html[/URL]
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]
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>";
}
?>
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>";
?>
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>";
?>
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>";
?>