IT profesionalų portalas: Content / *BSD / Proftpd + MySQL

[root@IT profesionalų portalas:~$]


Proftpd + MySQL



by KOZERIS

Šis HOW-TO skirtas norintiems daryti virtualius ftp vartotojus MySQL duomenų bazėje
Taip pat veikia ir sisteminiai vartotojai


Šis HOW-TO skirtas norintiems daryti virtualius ftp vartotojus MySQL duomenų bazėje
Taip pat veikia ir sisteminiai vartotojai

Viskas daryta su FreeBSD 5.3 RELEASE.

DIEGIMAS

Proftpd versija diegimo metu: 1.2.10

# cd /usr/ports/ftp/proftpd-mysql
# make install


Pažymime options: MySQL

KONFIGŪRACIJA

Sukuriame failą ftp.sql su tokiu turiniu:


-- Sukuriame duombaze ftp
CREATE DATABASE ftp;

-- sukuriam vartotoja ftpuser
-- nurodome slaptazodi, siuo atveju tai ftppass
-- prisijungimas is localhost`o

GRANT ALL ON ftp.* TO ftpuser@localhost IDENTIFIED BY 'ftppass';

-- pasirenkame ftp duomenu baze
USE ftp;

-- Sukuriame ftp vartotoju lentele

CREATE TABLE users
(
userid VARCHAR(20) NOT NULL,
password VARCHAR(50) NOT NULL,
uid int(4) NOT NULL,
gid int(4) NOT NULL,
homedir VARCHAR(50) NOT NULL,
count VARCHAR(4) NOT NULL,
PRIMARY KEY (userid)
);



Sukuriame duomenų bazę ftp ir vartotojų lentelę
# mysql -p < ftp.sql

Jei naudojome inetd ftp serverį, tai užkomentuojame inetd.conf eilute:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

arba išvis atjungiame inetd į failą rc.conf įrašę eilutę:
inetd_enable="NO"

Jei jau buvo pas jus ftp vartotojas jį pašaliname:
# rmuser ftp

Sukuriame ftp grupę
# pw group add ftp -g 120

Sukuriame ftp vartotoją
# pw user add ftp -c "ProFTPD" -d "/nonexistent" -s "/sbin/nologin" -u 120 -g 120

Sukuriame reikalingus katalogus ir failus

# mkdir /usr/local/ftp
# chown -R ftp:ftp /usr/local/ftp
# mkdir /var/log/proftpd
# touch /var/log/proftpd/system.log
# touch /var/log/proftpd/transfer.log


Redaguojame proftpd.conf failą
# ee /usr/local/etc/proftpd.conf


ServerName "Kazkoks serveris"
ServerType standalone
DefaultServer on
Port 21
ScoreboardFile /var/run/proftpd.scoreboard
#######################
# Loginimas
LogFormat default "%h %l %u %t "%r" %s %b"
LogFormat auth "%v [%P] %h %t "%r" %s"
LogFormat write "%h %l %u %t "%r" %s %b"

SystemLog /var/log/proftpd/system.log
TransferLog /var/log/proftpd/transfer.log
DefaultTransferMode binary

#####

AllowForeignAddress on
MaxInstances 30
User ftp
Group ftp
HiddenStor off
DefaultRoot ~

<Global>
#######################################
# Prisijungimas prie duombazes
# Duomeu baze - ftp@localhost
# vartotojas - ftpuser
# slaptazodis - ftppass

SQLConnectInfo ftp@localhost ftpuser ftppass

# Ijungiame slaptazodzio sifravima
# slaptazodi galime uzkoduoti PHP funkcija crypt()
SQLAuthTypes Crypt

SQLUserInfo users userid password uid gid homedir NULL
SQLAuthenticate users

#################
SQLNamedQuery getcount SELECT "count, userid from users where userid='%u'"
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE userid='%u'" users
SQLShowInfo PASS "230" "Tu buvai isilogines %{getcount} kartus, %u"
SQLLog PASS updatecount
#################

#######################################

RequireValidShell off
Umask 022
AllowStoreRestart on
AllowRetrieveRestart on

<Directory /*>
AllowOverwrite off
HideNoAccess on
<Limit READ>
AllowAll
</Limit>
<Limit Write>
DenyAll
</Limit>
</Directory>

# Viska leidziame savo lokaliuose kataloguose
<Directory ~>
AllowOverwrite on
<Limit STOR CMD MKD WRITE RETR DELE RMD>
AllowALL
</Limit>
</Directory>
</Global>



Į failą rc.conf įrašome

proftpd_enable="YES"

Paleidžiame Proftpd
# /usr/local/etc/rc.d/proftpd.sh start

Pažiūrime ar be klaidų startavo proftpd
# tail /var/log/proftpd/system.log

Jei viskas gerai turime pamatyti kažką panašaus į tai:

May 08 15:17:47 data.koz.lt proftpd[725] data.koz.lt: ProFTPD 1.2.10 (stable) (built Sun May 8 12:59:48 EEST 2005) standalone mode
STARTUP

VARTOTOJO PRIDĖJIMAS

Sakykime:
Vartotojo katalogas bus - /usr/local/ftp/test
vartotojo UID - 1100
Vartotojo GID - 1100
Vartotojo vardas bus - test
Vartotojo slaptažodis - testpass

Slaptažodį užkoduoti galime kad ir php funkcija crypt()

<?
echo crypt('testpass');
?>

Šiuo atveju mūsų slaptažodis testpass užkoduotas gausis "$1$cLnsVEzq$e5Rb9XHRcf5t9ERr2cs6d/"

Sukuriame vartotojui katalogą

# mkdir -p /usr/local/ftp/test
# chown 1100:1100 /usr/local/ftp/test

Sukuriame vartotoją duomenų bazėje

Prisijungiame prie mysql
# mysql -p

Pasirenkame duomenų bazę ftp ir įterpiame vartotoją
mysql> use ftp;


mysql> INSERT INTO users (userid, password, uid, gid, homedir, count) VALUES
-> ('test', '$1$cLnsVEzq$e5Rb9XHRcf5t9ERr2cs6d/', '1100', '1100', '/usr/local/ftp/test', '0');

mysql> exit;


Sekančio vartotojo UID ir GID turi būti jau 1101 ir 1101

Bandome jungtis.
Galima pasidaryti php scriptą kurio pagalba pridėtume vartotojus.
Laukiu jūsų komentarų :)

Pakoreguota pagal pasiūlimus:

User ftp
Group ftp

Pakeista uid, gid Integer tipo
***
Pataisyta vieta:

# mkdir -p /usr/local/ftp/test
# chown 1100:1100 /usr/local/ftp/test




Kad galėtumėte skelbti komentarus Jūs privalote būti prisijungęs prie tinklalapio - prašome prisijungti arba jei Jūs esate neprisiregistravęs spauskite čia užsiregistruoti
Atvaizdavimo laikas0.1910sek,0.0106iš to užklausomsDB užklausos:32.