Starta filserver
Vi ska sätta upp en filserver med hjälp av Nginx och Vsftp. Den här guiden visar hur man gör det på Lubuntu 14.04, men med viss modifikation kan man göra det på Fedora och Centos eller någon annan Linuxvariant. Som root installerar vi till att börja med båda programmen.
# apt-get install nginx vsftpd
Sen gör jag kopior på konfigurationsfilerna.
# cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
# cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
Om du inte har sites-available och sites-enabled så gör dem manuellt för vi kommer att behöva dem senare.
# mkdir /etc/nginx/sites-available
# mkdir /etc/nginx/sites-enabled
# mkdir /var/www/vsftp
Sen gör vi ftp-användaren som kan heta vad som helst men det är bäst att använda ett namn som man kan associera med ftp, och ett lösenord. Så här kan det se ut. Vi gör också en fil som innehåller de användare som ska få använda ftp-servern.
Vi fortsätter med att lägga till grupper och ordna med rättigheter.
Sen gör vi ändringar i konfigurationsfilen för Nginx. Den har jag i /etc/nginx/sites-enabled/ och filen heter default. Eller rättare sagt är filen i /etc/nginx/sites-available/default men från sites-enabled har man en länk till filen jag nämnde tidigare.
Jag har inte tagit upp allt om Nginx, men det ska inte vara mycket att ändra. Det viktiga är att Nginx vet var den ska leta efter rotfilsystemet och att "autoindex on" finns med. Jag hoppas det framgår av nedanstående skärmdump.
Nu närmar vi oss den svårare biten: att konfigurera vsftpd.conf
listen=YES Den här är YES i standardläge men vi sätter den i alla fall. Om det skulle stå NO kommer servern inte att vara tillgänglig.
anonymous_enable=NO På den här servern tillåter vi inte anonym inloggning. Skulle vi däremot vilja distribuera något program eller operativsystem till allmänheten ska vi skriva YES här.
local_enable=YES Lokala användare tillåts logga in; dvs de måste ha ett konto på servern. Det här öppnar inte för användaren vsftpuser som vi lade till utan för dem användare som vanligtvis finns i systemet och som läggs till på vanligt sätt. De får tillgång till sina hemmakataloger: /home/linuxuser
use_localtime=YES Filservern kommer att visa klockslag när man ti ex listar katalogerna på servern
xferlog_enable=YES Visa upp- och nedladdningar i loggfilerna Standardstället för loggfilen är /var/log/vsftpd.log och behöver inte anges. Den som vill ändra kan givetvis göra det i konfigurationsfilen
connect_from_port_20=YES Försäkra dig om att överföringskontakt sker via port 20
ftpd_banner=Welcome to Ingos FTP-service Du kan sätta ett eget välkomstmeddelande med hjäp av detta direktiv
secure_chroot_dir=/var/run/vsftpd/empty En katalog för säkerhets skull och den ska inte vara skrivbar för ftp-användaren
local_umask=022 Inte så hårda begränsningar vad gäller rättigheter men ändå fullt tillräckliga för vsftp ska vara den allra säkraste ftp-servern
Här är resten av direktiven. Tänk på att lägga in namnet på ftp-användaren i vsftpd.userlist och det gör man bara rakt av: vsftpuser Direktivet userlist_deny=NO gör att lokala användare inte kan logga in förutsatt att de inte finns i filen vsftpd.userlist. Tar du med den lokala användaren där kommer han dock att komma in i sin hemmamapp; i det här fallet /home/ingemar. Jag får ta reda på längre fram om det går att ordna så att lokalanvändaren också hamnar i /var/www/vsftp
userlist_enable=YES
userlist_file=/etc/vsftpd/vsftpd.userlist
userlist_deny=NO
pasv_addr_resolve=NO
pasv_max_port=55000
pasv_min_port=50000
port_enable=YES
passwd_chroot_enable=YES
pam_service_name=vsftpd Namnet på den inloggningstjänst filservern ska använda. Notera att det är viktigt att användaren har ett virtuellt inloggningsskal; det som vi angav i kommandot useradd ... -s /sbin/nologin Vi måste också ange nologin-skalet annars går det inte att logga in på ftp-servern utan att vara en vanlig lokal användare; alltså hindrar det användaren vsftpuser i vår guide från att logga in. Kolla först om skalet finns i /etc/shells
Ovanför kan du se att filservern kommunicerar över portarna mellan 50000 och 55000 efter att den första kontakten tagits. Det naturliga vore att öppna upp för detta i Ubuntus brandvägg med UFW. Så här gör man det:
# ufw allow proto tcp from any to any port 50000:55000
Men konstigt nog fungerar det utan att öppna dessa portar. Hur det kommer sig har jag inte fördjupat mig i.
Det här behöver vi lägga till i konfigurationsfilen för att få krypterad överföring, speciellt av användarnamn och lösenord.
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Problemet med egengjorda certifikat, eller som i det här fallet, certifikat gjorda av Ubuntu vilka INTE Är utfärdade av officiella certifikatutfärdare som Thawte, Comodo och Digicert, är att de som besöker din webbsida, och som i det här fallet ftp-siten, får upp en varningssida för siten. Ju längre certifikatutfärdaren har funnits desto troligare är det att din webbläsare tror på krypterade siter med certifikat från dem. Om du inte har ett officiellt certifikat får du antingen skaffa ett eller importera och lägga till undantag för de egengjorda. Om du själv eller dina anställda är de enda som använder siten, kan man installera undantag för certifikaten i webbläsarna och slippa utsätta användarna för otäcka varningar om opålitliga siter. Men skulle du ha en officiell site är rådet att skaffa ett certifikat som duger i de flesta webbläsare. Jag ska i slutet av denna guide visa hur du installerar ett undantag i Firefox.
Okej, nu går vi vidare! Längst ner ser ni att /sbin/nologin-skalet finns med. Det beror på att jag lade in det tidigare. Utan raden /sbin/nologin går det inte att logga in som vsftpuser-användaren. Jag lade in det med följande kommando:
# echo "/sbin/nologin" >> /etc/shells
Nu kan vi försöka logga in med ftp-klienten från terminalen.
Som ni ser fungerar det att logga in. Nu ska vi försöka få det att fungera med krav på namn och lösenord även i webbläsaren. Om det inte skulle gå att logga in finns det förstås flera orsaker till att det felar. En är att vissa rättigheter saknas. Jag hade själv problem när jag provade att ta bort körrättigheterna på katalogerna som ligger ovanför den katalog som användaren ska logga in i. Den katalog som min specielle ftpanvändare skulle logga in i är /var/www/vsftp. För att det ska fungera måste även katalogerna ovanför ha körrättigheter (eller execute på engelska). Det ordnar vi på följande sätt:
# chmod go+x /var
# chmod go+x /var/www
Givetvis måste mappen /var/www/vsftp också ha det.
Nästa problem var att ftp-användaren; både vsftpuser som hade sin mapp i /var/www/vsftp och de lokala användarna på servern som hade sina hemmamappar i /home visserligen hamnade rätt, när de loggade in, men de kunde både se och byta katalog var som helst i hela systemet. Lösningen var att lägga till chroot_local_user och allow_writeable_chroot
Nu hamnar användarna i sina respektive hemmamappar och kan varken byta eller se mappar uppåt, eller någon annanstans i hierarkin. Problemet som kvarstår att lösa är att ge flera användare rättighet att gå till en gemensam mapp, i det här fallet /var/www/vsftp
Vi provar med att montera vsftp-mappen i användarens hemmamapp.
# mount -o bind /var/www/vsftp/ /home/ingemar/Publikt
Och sen lägger vi till användaren i samma grupp som ftpanvändaren, så här:
# chmod -a -G vsftpusers ingemar
Sen måste nog rättigheterna för den mapp som är delad ändras till att vara r-x för gruppen, dvs vsftpusers
# chmod g+rx /var/www/vsftp
Nu fungerar det att ha en säkrad ftpserver med användare som dels kan ha en egen hemmakatalog, dels en delad mapp. I vårt fall finns den i /var/www/vsftp och hemmamapparna är som vanligt i Linux i /home/användare. Detr kluriga är att montera med --bind eller --rbind så att det består över omstarter. Vi behöver lägga till monteringspunkten i /etc/fstab. Så här ska det se ut när det är färdigt.
Guide för ftp-server på Centos 7
[root@krizna ~]# yum check-update
[root@krizna ~]# yum -y install vsftpd
Step 2 » After installation you can find /etc/vsftpd/vsftpd.conf file which is the main configuration file for VSFTP.
Take a backup copy before making changes .
[root@krizna ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
Now open the file and make changes as below
[root@krizna ~]# nano /etc/vsftpd/vsftpd.conf
Find this line anonymous_enable=YES ( Line no : 12 ) and change value to NO to disable anonymous FTP access.
anonymous_enable=NO
Uncomment the below line ( Line no : 100 ) to restrict users to their home directory.
chroot_local_user=YES
and add the below lines at the end of the file to enable passive mode and allow chroot writable.
allow_writeable_chroot=YES
pasv_enable=Yes
pasv_min_port=40000
pasv_max_port=40100
Step 3 » Now restart vsftpd service and make it start automatically after reboot.
[root@krizna ~]# systemctl restart vsftpd.service
[root@krizna ~]# systemctl enable vsftpd.service
Step 4 » Add FTP service in firewall to allow ftp ports .
[root@krizna ~]# firewall-cmd --permanent --add-service=ftp
[root@krizna ~]# firewall-cmd --reload
Step 5 » Setup SEinux to allow ftp access to the users home directories .
[root@krizna ~]# setsebool -P ftp_home_dir on
Step 6 » Now create an User for ftp access. Here /sbin/nologin shell is used to prevent shell access to the server .
[root@krizna ~]# useradd -m dave -s /sbin/nologin
Now user dave can able to login ftp on port 21 .
[root@krizna ~]# passwd dave