Menu:
  :. HomePage
  :. Linux
  :. Solaris
  :. Windows
  :. Programování
  :. Java + Tomcat
  :. HW obecně
  :. VoIP - Asterisk
  :. Cisco - Mikrotik - Síť
  :. O mě
  :. Fotogalerie

 Testovací:
  :. ASP projekt
  :. JSP projekt



 Doporučuji:

Savvy - profesionální webhosting, webdesign a serverhosting
Internetový obchod Stromeček.cz - hardware, software a mobily za super ceny
AirCon Miroslav
Galerie fotek
Notebooky
Webdesign Praha

www.eprdel.cz
www.root.cz
Lumimont

NAVRCHOLU.cz
A



Vaše IP:
18.223.172.252

ProFTPd server s MySQL + SSL/TLS

Jako FTP server jsem vybral proFTPd. Jedná se o velice výkonný nástroj s množstvím funkcí. Jednou z funkcí je právě například podpora mysql databáze. Proč právě podpora mysql? Odpověď je velice jednoduchá. Při velkém množství ftp účtů začíná být celkově nepřehledné tyto účty spravovat. Pokud použijeme mysql databázi, nějaký webový interface a ftp server, umožňující pracovat s databází, práce se velice usnadní.
Poskytovatele hostingových služeb to mají takto vyřešené. Oni mají většinou v databázi i poštovní účty, DNS záznamy apod.

Instalce ProFTPd:

Pro instalci ProFTPd pouzivam standartni ProFTPd dodavany v distribuci. Pokud ho nemate jiz nainstalovanty, musite si ho nejprve nainstalovat napr pomoci yum v CentOS 5.

yum install proftpd
yum install proftpd-mysql



Uprava systemu:

V systému musíme založit novou skupinu a uživatele, pod kterým budou zakladány všechny FTP účty.

groupadd -g 5500 ftpgroup
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser




MySQL konfigurace:

mysql -u root -p
create database ftpdb;
grant select, insert, update on ftpdb.* to proftpd@localhost identified by 'password';

use ftpdb;

#
# Table structure for table `ftpgroup`
#

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';

#
# Dumping data for table `ftpgroup`
#

INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');
INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpguest');

# --------------------------------------------------------

#
# Table structure for table `ftpuser`
#

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(64) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';

INSERT INTO `ftpuser` VALUES (1, 'testaccount', 'ftppasswd', 5500, 5500, '/home/testdomain.com', '/sbin/nologin',0,'','');

CREATE TABLE IF NOT EXISTS `accesslog` (
  `date` datetime NOT NULL,
  `userid` varchar(60) NOT NULL,
  `remoteip` varchar(60) NOT NULL,
  KEY `userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;;

exit;



Pokud převádíme účty již y existujicího systemu, tak musíme změnit prava souborů na ftpuser a ftpgroup. Zde je dobre jen u souborů, které např nezapsal apache. Toto můžeme udělat jednoduše pomocí ě příkazů.

find /home/webhosting/ -not -user apache -print0 | xargs -0 chown ftpuser
find /home/webhosting/ -not -group apache -print0 | xargs -0 chown .ftpgroup



nebo s kombinaci apache a tomcat

find /home/webhosting/ -not -user apache -a -not -user tomcat -print0 | xargs -0 chown ftpuser
find /home/webhosting/ -not -group apache -a -not -group tomcat -print0 | xargs -0 chown .ftpgroup



Konfigurace proftpd.conf:

# /etc/proftpd.conf

ServerName "Proftpd Server"
ServerType Standalone
ServerAdmin aaaa@bb.cc

# Hide as much as possible to outside users
ServerIdent on "Welcome to the FTP server. Please login..."
DeferWelcome on

DefaultServer on

# Allow FTP resuming.
# Remember to set to off if you have an incoming ftp for upload.
AllowStoreRestart on

# Port 21 is the standard FTP port.
Port 21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30

# Set the user and group under which the server will run.
User nobody
Group nogroup

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~

# Normally, we want files to be overwriteable.

AllowOverwrite on

# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users* groups*

# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo ftpdb@localhost proftpd password

# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID 5000

# create a user's home directory on demand if it doesn't exist
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Zalogovani uzivatele do db po pristupu na FTP
SQLLog PASS accesslog
SQLNamedQuery accesslog INSERT "now(), '%u', '%a'" accesslog

# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

RootLogin off
RequireValidShell off



Konfigurace SSL:



Vytvoření certifikátu

Před samotným spuštěním musíme mít vygenerován příslušný certifikát a privátní klíč. Využijeme k tomu rozhraní Openssl knihovny. Následující příkaz nám vygeneruje certifikát a privátní klíč.

#openssl req -new -x509 -days 365 -nodes -out ftpd-rsa.pem -keyout ftpd-rsa-key.pem

A pokud chcete využít dsa šifrování pak příkaz pro vygenerování certifikátu a klíče bude následující:

#openssl dsaparam -out dsap-tmp 1024 #openssl req -newkey dsa:dsap-tmp -x509 -days 365 -nodes -out ftpd-dsa.pem -keyout ftpd-dsa-key.pem

Uprava proftpd.conf


TLSEngine on
TLSLog /var/log/proftpd/tls.log
#TLSProtocol TLSv1
TLSProtocol SSLv3

# Are clients required to use FTP over TLS when talking to this server?
TLSRequired Off

# Server's certificate
TLSRSACertificateFile /etc/proftpd/ftpd-rsa.pem
TLSRSACertificateKeyFile /etc/proftpd/ftpd-rsa-key.pem

# Authenticate clients that want to use FTP over TLS?
#TLSVerifyClient off

TLSOptions NoCertRequest





  • TLSEngine on/off – direktiva pro aktivaci/deaktivaci ssl/tsl. (Použití: Tato direktiva se obvykle použije vně direktivy VirtualHost i Global).



  • TLSLog file – direktiva pro určení plné cesty k log souboru. (Použití: VirtualHost, Global, Parametr: Plná cesta k souboru).



  • TLSProtocol protokol – direktiva pro nastavení použití protokolu při vytváření spojení.(Parametr: podporován je TLSv1 protokol a SSLv2,3).



  • TSLRequired on/off/ctrl/data – direktiva, která definuje použití tsl buď na komunikační nebo datový kanál, popřípadě oba dva najednou. (Parametr: on/off – zapnutá/vypnutá podpora tsl pro oba kanály, ctrl/data – použití tsl na komunikační nebo datový kanál).



  • TLSRSACertificateFile, TLSRSACertificateKeyFile – direktiva pro určení souboru s certifikátem a privátním klíčem serveru.(Použití: VirtualHost, Global)



  • TLSVerifyClient on/off – direktiva, pro dotázání na klientův certifikát. Pokud modul certifikát přijme, vytvoří spojení s klientem, v opačném případě spojení ukončí. Pokud je direktiva nastavená na on pak server ověřuje klientův certifikát, pokud je direktiva nastavená na off toto opatření server neprovádí. Ověřování klientova certifikátu lze vypnout parametrem NoCertRequest v direktivě TLSOptions.






FTP klienti podporujici SSL

IglooFTP PRO

http://www.iglooftp.com/linux/index.html


Zdroje:
http://www.khoosys.net/single.htm?ipg=848
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html
http://www.linuxsoft.cz/article.php?id_article=764
 
« Zpět na seznam