En hyffsat säker FTP server är aldrig fel att ha. För lite extra säkerhet, så kan det vara en bra idé att i pf.conf bestämma vilka IPs som får gå igenom brandväggen:
pass in log quick on $ext_if proto TCP from $allowed_in to $ext_if port 21 pass in on $ext_if proto tcp from $allowed_in to $ext_if port >= 10000
Eller om du vill tillåta vem som helst utifrån att göra inloggningsförsök på FTP servern:
pass in on $ext_if proto TCP from any to any port 21 keep state pass in on $ext_if proto tcp from any to any port >= 10000 keep state
I och med att mysql finns installerat på servern, så är det enklare och mer flexibelt att lägga FTP användarna i en MySQL databas.
cd /usr/local/src wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3rc1.tar.gz tar xfz proftpd-1.3.3rc1.tar.gz cd proftpd-1.3.3rc1 ./configure --prefix=/usr/local --with-modules=mod_sql:mod_sql_mysql:mod_tls \ --with-includes=/usr/local/mysql/include/mysql \ --with-libraries=/usr/local/mysql/lib/mysql make sh sample-configurations/PFTEST.install ./proftpd -n -d 5 -c /tmp/PFTEST/PFTEST.conf
Testa att ProFTPd fungerar (gör det från ett annat shell på samma dator):
# echo > testfil "aaaaaaaaaa" # ftp localhost 2021 Trying ::1... ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost.bsd-guide.net. 220 ProFTPD 1.3.3rc1 Server (ProFTPD TEST Installation) [127.0.0.1] Name (localhost:root): proftpd 331 Password required for proftpd Password: 230 User proftpd logged in Remote system type is UNIX. Using binary mode to transfer files. ftp> put testfil local: testfil remote: testfil 150 Opening BINARY mode data connection for testfil 100% |***********************************************| 11 00:00 226 Transfer complete 11 bytes sent in 0.20 seconds (0.05 KB/s) ftp> get testfil local: testfil remote: testfil 150 Opening BINARY mode data connection for testfil (11 bytes) 100% |***********************************************| 11 00:00 226 Transfer complete 11 bytes received in 0.19 seconds (0.05 KB/s) ftp> quit 221 Goodbye. #Exemplet ovan körs från ett annat shell på samma dator. Om du kan logga in med "proftpd" användaren och det fungerar att ladda upp och ner filer, så är det bara att installera (stoppa först ProFTPd genom att trycka ctrl-c i shellet den körs):
make install
Konfigurationsfilen hamnar i /usr/local/etc (proftpd.conf) ändra/lägg till:
ServerName "Min FTP server" // redigera
För att SQL auth ska fungera (lägg in ex. efter DefaultServer on
SQLAuthenticate on SQLAuthTypes Backend Plaintext SQLConnectInfo proftpd@localhost proftpd proftpd RequireValidShell off PassivePorts 10000 60000 // för att gå genom brandväggen IdentLookups off // lägg till - snabbar upp inloggning ScoreboardFile /var/run/proftpd.score PIDFile /var/run/proftpd.pid LogFormat extend "%t %l@%h \(%a\) %m %F %s %b %T" ExtendedLog "/var/log/proftpd_xfer.log" read,write extend
Ändra ev. umask, så att grupp får skrivrättighet:
Umask 002
Ändra ev. MaxInstances för att tillåta fler samtidiga användare
MaxInstances 100
Lås fast användaren i sin hemkatalog
DefaultRoot ~
Kommentera bort SITE_CHMOD begränsning (tillåt användare att ändra accessmod)
#<Limit SITE_CHMOD> # DenyAll #</Limit>
Ta ev bort hela <Anonymous> sektionen för att inte ha FTP servern öppen för alla.
Skapa databaesen 'proftpd' (använd mysql klienten):
/usr/local/mysql/bin/mysql -u root -pditt_passwordInne i MySQL klienten skriver du sen:
create database proftpd; grant all on proftpd.* to proftpd@localhost identified by 'proftpd'; flush privileges; use proftpd;
skapa tabeller
CREATE TABLE `groups` ( `groupname` varchar(30) NOT NULL default '', `gid` int(11) NOT NULL default '0', `members` varchar(255) default NULL ); CREATE TABLE `users` ( `userid` varchar(30) NOT NULL default '', `passwd` varchar(80) NOT NULL default '', `uid` int(11) NOT NULL default '0', `gid` int(11) default '3000', `homedir` varchar(255) default NULL, `shell` varchar(255) default '/bin/false', UNIQUE KEY `userid` (`userid`), UNIQUE KEY `uid` (`uid`) );
lägg in en användare för test
insert into groups values("ftpuser",3000,''); insert into users values("webmaster", password("07web2007"), 3001,3000, "/home/www","/bin/false"); quit;
För att FTP användaren ska kunna ladda upp filer måste du se till att de befintliga filerna i det som sätts till 'homedir' ägs av den användare du skapat:
chown -R 3001:3000 /home/www
Ovanstående användare är tänkt att kunna komma åt allt inne i /home/www, med skrivrättigheter. För att detta ska fungera måste gruppen (ftpusers) ha rätt att skriva överallt. Detta måste också uppdateras då det läggs till fler vhosts på servern:
chmod -R g+w /home/www
Om du skapar fler FTP konton, och dessa konton ska ha rätt att ändra i sina filer för sin virtualhost, så måste du se till att ägaren (uid) på alla filer är satt till samma som FTP användarens uid.