RHCSA-serien: Installation, konfiguration og sikring af en web- og FTP-server - Del 9


En webserver (også kendt som en HTTP-server) er en tjeneste, der håndterer indhold (oftest websider, men også andre typer dokumenter) til en klient i et netværk.

En FTP-server er en af de ældste og mest anvendte ressourcer (selv den dag i dag) til at gøre filer tilgængelige for klienter på et netværk i tilfælde, hvor ingen godkendelse er nødvendig, da FTP bruger brugernavn og adgangskode uden kryptering.

Den tilgængelige webserver i RHEL 7 er version 2.4 af Apache HTTP-serveren. Hvad angår FTP-serveren, bruger vi Very Secure Ftp Daemon (aka vsftpd) til at etablere forbindelser, der er sikret med TLS.

I denne artikel forklarer vi, hvordan du installerer, konfigurerer og sikrer en webserver og en FTP-server i RHEL 7.

Installation af Apache og FTP-server

I denne vejledning bruger vi en RHEL 7-server med en statisk IP-adresse på 192.168.0.18/24. For at installere Apache og VSFTPD skal du køre følgende kommando:

# yum update && yum install httpd vsftpd

Når installationen er afsluttet, deaktiveres begge tjenester oprindeligt, så vi er nødt til at starte dem manuelt indtil videre og gøre det muligt for dem at starte automatisk med den næste opstart:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

Derudover skal vi åbne porte 80 og 21, hvor henholdsvis internet- og ftp-dæmoner lytter for at give adgang til disse tjenester udefra:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

For at bekræfte, at webserveren fungerer korrekt, skal du starte din browser og indtaste serverens IP. Du skal se testsiden:

Hvad angår ftp-serveren, bliver vi nødt til at konfigurere den yderligere, hvilket vi vil gøre om et øjeblik, før vi bekræfter, at den fungerer som forventet.

Konfiguration og sikring af Apache-webserver

Hovedkonfigurationsfilen til Apache er placeret i /etc/httpd/conf/httpd.conf , men den kan stole på andre filer, der findes i /etc/httpd/conf.d.

Selvom standardkonfigurationen i de fleste tilfælde skal være tilstrækkelig, er det en god ide at blive fortrolig med alle de tilgængelige muligheder som beskrevet i den officielle dokumentation.

Lav som altid en sikkerhedskopi af hovedkonfigurationsfilen, før du redigerer den:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Åbn den derefter med din foretrukne teksteditor og se efter følgende variabler:

  1. ServerRoot: det bibliotek, hvor serverens konfiguration, fejl og logfiler opbevares.
  2. Lyt: beder Apache om at lytte til specifik IP-adresse og/eller porte.
  3. Inkluder: tillader inkludering af andre konfigurationsfiler, som skal eksistere. Ellers mislykkes serveren i modsætning til IncludeOptional-direktivet, som ignoreres lydløst, hvis de angivne konfigurationsfiler ikke findes.
  4. Bruger og gruppe: navnet på den bruger/gruppe, der skal køre httpd-tjenesten som.
  5. DocumentRoot: Den mappe, hvoraf Apache serverer dine dokumenter. Som standard er alle anmodninger taget fra denne mappe, men symbolske links og aliaser kan bruges til at pege på andre placeringer.
  6. Servernavn: dette direktiv indstiller værtsnavnet (eller IP-adressen) og porten, som serveren bruger til at identificere sig selv.

Den første sikkerhedsforanstaltning består i at oprette en dedikeret bruger og gruppe (dvs. tecmint/tecmint) til at køre webserveren og ændre standardporten til en højere (9000 i dette tilfælde):

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Du kan teste konfigurationsfilen med.

# apachectl configtest

og hvis alt er OK, skal du genstarte webserveren.

# systemctl restart httpd

og glem ikke at aktivere den nye port (og deaktivere den gamle) i firewallen:

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

Bemærk, at du på grund af SELinux-politikker kun kan bruge de porte, der returneres af

# semanage port -l | grep -w '^http_port_t'

til webserveren.

Hvis du vil bruge en anden port (dvs. TCP-port 8100), skal du tilføje den til SELinux-portkontekst til httpd-tjenesten:

# semanage port -a -t http_port_t -p tcp 8100

For yderligere at sikre din Apache-installation skal du følge disse trin:

1. Brugeren Apache kører som ikke burde have adgang til en shell:

# usermod -s /sbin/nologin tecmint

2. Deaktiver telefonliste for at forhindre browseren i at vise indholdet af en mappe, hvis der ikke er nogen index.html til stede i den mappe.

Rediger /etc/httpd/conf/httpd.conf (og eventuelt konfigurationsfilerne til virtuelle værter) og sørg for, at indstillingsdirektivet, både øverst og på Directory-blokniveauer, er indstillet til Ingen:

Options None

3. Skjul oplysninger om webserveren og operativsystemet i HTTP-svar. Rediger /etc/httpd/conf/httpd.conf som følger:

ServerTokens Prod 
ServerSignature Off

Nu er du klar til at begynde at servere indhold fra din/var/www/html-mappe.

Konfiguration og sikring af FTP-server

Som i tilfældet med Apache er hovedkonfigurationsfilen til Vsftpd (/etc/vsftpd/vsftpd.conf) godt kommenteret, og selvom standardkonfigurationen skal være tilstrækkelig for de fleste applikationer, skal du stifte bekendtskab med dokumentation og mandsiden (man vsftpd.conf) for at kunne betjene ftp-serveren mere effektivt (jeg kan ikke understrege det nok!).

I vores tilfælde er det de anvendte direktiver:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Ved at bruge chroot_local_user = YES placeres lokale brugere (som standard) i en chroot'ed fængsel i deres hjemmekatalog lige efter login. Dette betyder, at lokale brugere ikke kan få adgang til filer uden for deres tilsvarende hjemmekataloger.

Endelig, for at tillade ftp at læse filer i brugerens hjemmekatalog, skal du indstille følgende SELinux boolske:

# setsebool -P ftp_home_dir on

Du kan nu oprette forbindelse til ftp-serveren ved hjælp af en klient som Filezilla:

Bemærk, at loggen /var/log/xferlog registrerer downloads og uploads, som stemmer overens med ovenstående katalogliste:

Resumé

I denne vejledning har vi forklaret, hvordan man opretter et web og en ftp-server. På grund af emnets store omfang er det ikke muligt at dække alle aspekterne af disse emner (dvs. virtuelle webhosts). Således anbefaler jeg, at du også tjekker andre fremragende artikler på dette websted om Apache.