Gentoo Logo

1.  Apache

Apache (1.3.26) conţine un fişier de configuraţie chiar decent dar, din nou, trebuie să îmbunătăţim unele opţiuni, cum ar fi să determinăm apache să asculte pe o singură adresă şi să prevenim scurgerea de informaţii de la acesta. Mai jos sunt explicate opţiunile ce ar trebui aplicate fişierului de configurare.

Dacă nu aţi dezactivat ssl în fişierul dvs. /etc/make.conf înainte de a instala Apache, ar trebui să aveţi acces la un server ce are activat modul ssl. Trebuie doar să adăugaţi următoarea linie pentru a activa.

Cod 1.1: /etc/conf.d/apache

HTTPD_OPTS="-D SSL"

Cod 1.1: /etc/apache/conf/apache.conf

#Determinaţi-l să asculte pe adresa dvs. ip
Listen 127.0.0.1
BindAddress 127.0.0.1
#Nu este o idee bună să utilizaţi nobody sau nogroup - 
#pentru fiecare serviciu ce nu rulează ca root
#(trebuie doar să adăugaţi utilizatorul apache cu grupul apache)
User apache
Group apache
#Va opri apache să îşi afişeze versiunea
ServerSignature Off
ServerTokens Prod

Apache este compilat cu --enable-shared=max şi --enable-module=all. Implicit, aceasta va activa toate modulele, deci va trebui să comentaţi toate modulele din secţiunea LoadModule (LoadModule şi AddModule) pe care nu le utilizaţi. Reporniţi serviciul prin execuţia /etc/init.d/apache restart.

Documentaţie este disponibilă la http://www.apache.org.

1.  Bind

Puteţi găsi documentaţie pe pagina Internet Software Consortium. Manualu de Referinţă pentru Administrarea BIND 9 este, de asemenea, în doc/arm.

Pachetele ebuild mai noi pentru BIND suportă mediul chroot în afara sistemului. După ce instalaţi bind, urmaţi aceste instrucţiuni simple:

Cod 1.1: Mediul chroot pentru BIND

ebuild /var/db/pkg/net-dns/bind-9.2.2-r2/bind-9.2.2-r2.ebuild config\`"
(Înainte de a rula comanda de mai sus, ar trebui să modificaţi directorul chroot
/etc/conf.d/named. Altfel, va fi utilizat /chroot/dns.)
(Este posibil să trebuiască să înlocuiţi numărul versiunii cu numărul celei curente)

1.  Djbdns

Djbdns este o implementare DNS pe a cărei securitate, autorul este dispus să parieze pe bani. Este foarte diferit de modul de funcţionare al Bind 9, dar merită încercat. Mai multe informaţii pot fi obţinute de la http://www.djbdns.org.

1.  FTP

În general, utilizarea FTP (File Transfer Protocol - Protocolul de Transfer de Fişiere) nu este o idee bună. Acesta utilizează date necriptate (spre ex. parolele sunt transmise în text clar), ascultă pe două porturi (în mod normal, porturile 20 şi 21) şi atacatorii caută frecvent autentificări anonime pentru tranzitul warez. Deoarece protocolul FTP conţine câteva probleme de securitate, ar trebui să utilizaţi în loc sftp sau HTTP. Dacă această soluţie este posibilă, securizaţi-vă serviciile în orice mod posibil şi pregătiţi-vă.

1.  Mysql

Dacă doriţi ca doar aplicaţii locale să vă acceseze baza de date mysql, decomentaţi următoarea linie din /etc/mysql/my.cnf.

Cod 1.1: Dezactivaţi accesul la reţea

skip-networking

Apoi, trebuie să dezactivăm utilizarea comenzii LOAD DATA LOCAL INFILE. Aceasta, pentru a preveni accesul neautorizat la citirea fişierelor locale. Aceasta este relevantă când sunt găsite noi vulnerabilităţi de tipul SQL Injection în aplicaţiile PHP.

Cod 1.1: Dezactivarea LOAD DATA LOCAL INFILE în secţiunea [mysqld]

set-variable=local-infile=0

Apoi, trebuie să ştergem baza de date exemplu (test) şi toate conturile, cu excepţia contului root local.

Cod 1.1: Ştergerea bazei de date exemplu şi tuturor utilizatorilor nenecesari

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;

Atenţie: Fiţi atenţi la comenzile anterioare, dacă deja aveţi configurate conturi de utilizator.

Notă: Dacă aţi modificat parolele din promptul MYSQL, ar trebui întotdeauna să ştergeţi ~/.mysql_history şi /var/log/mysql/mysql.log deoarece acestea stochează comenzile SQL executate cu parolele în text clar.

1.  Proftpd

Proftpd a avut câteva probleme de securitate, dar majoritatea se pare că au fost rezolvate. Chiar şi aşa, este o idee bună să aplicăm unele îmbunătăţiri:

Cod 1.1: /etc/proftpd/proftpd.conf

ServerName "My ftp daemon"
#Nu afişaţi identificarea server-ului
ServerIdent on "Go away"

#Înlesneşte crearea de utilizatori virtuali
RequireValidShell off

#Utilizaţi fişierele de parolă şi grup (passwd utilizează formatul crypt)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Permisiuni
Umask 077

# Timpi de expirare şi limitări
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

#Toţi trebuie să efectueze chroot
DefaultRoot ~

#nu rulaţi ca root
User  nobody
Group nogroup

#înregistraţi fiecare transfer
TransferLog /var/log/transferlog

#Probleme cu globalizarea
DenyFilter \*.*/

Puteţi găsi documentaţie la http://www.proftpd.org.

1.  Pure-ftpd

Pure-ftpd este o ramură a originalului trollftpd, modificat pentru scopuri de securitate şi funcţionalitate de Frank Dennis.

Folosiţi utilizatori virtuali (niciodată conturi de sistem) prin activarea opţiunii AUTH. Setaţi-o cu valoarea -lpuredb:/etc/pureftpd.pdb şi creaţi utilizatorii prin comanda /usr/bin/pure-pw.

Cod 1.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Configuraţi setarea dvs. MISC_OTHER pentru a interzice autentificările anonime (-E), toţi trebuie să utilizeze chroot (-A), preveniţi ca utilizatorii să poată citi sau scrie în fişierele ce încep cu un . (punct) (-X), timpul maxim de inactivitate (-I), limitaţi recursia (-L), şi o mască de utilizator rezonabilă cu umask.

Atenţie: Nu utilizaţi opţiunile -w sau -W! Dacă doriţi să aveţi un site warez, încetaţi consultarea acestui ghid!

Se poate găsi documentaţie la http://www.pureftpd.org.

1.  Vsftpd

Vsftpd (prescurtarea de la very secure ftp - ftp foarte securizat) este o aplicaţie daemon foarte mică ce conţine o configuraţie implicită rezonabilă. Este simplă şi nu are aşa multe funcţionalităţi ca pureftp şi proftp.

Cod 1.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#doar pentru citire
write_enable=NO

#activarea înregistrării transferurilor
xferlog_std_format=YES

idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

Aşa cum puteţi observa, nu există nici o soluţie ca acest serviciu să deţină permisiuni individuale, dar deţine unele setări pentru accesul anonim pentru care este chiar bun. Uneori poate fi un lucru bun să avem un server ftp anonim (pentru partajarea aplicaţiilor open source), iar vsftpd se descurcă chiar bine.

1.  Netqmail

Netqmail este adesea considerat ca fiind un server de poştă electronică foarte bun. Este scris având securitatea (şi paranoia) în minte. Nu permite relay implicit şi nu a avut nici o breşă de securitate din 1996. Pur şi simplu instalaţi rulând emerge netqmail şi configuraţi-l!

1.  Samba

Samba este un protocol pentru partajarea fişierelor cu reţele Microsoft/Novell şi nu ar trebui utilizat pe internet. Chiar şi aşa, mai are nevoie de securizare.

Cod 1.1: /etc/samba/smb.conf

[global]
  #Ascultă pe o interfaţă
  interfaces = eth0 10.0.0.1/32

  #Asiguraţi-vă că utilizaţi parole criptate
  encrypt passwords = yes
  directory security mask = 0700

  #permiteţi traficul de la 10.0.0.*
  hosts allow = 10.0.0.

  #Activează autentificarea utilizatorilor
  #(nu utilizaţi modul share)
  security = user

  #Interzice conturile privilegiate
  invalid users = root @wheel

  #Mărimea maximă afişată de smb pentru o resursă partajată (nu este o limită)
  max disk size = 102400

  #Confirmaţi politica de securitate
  min password length = 8
  null passwords = no

  #Utilizaţi PAM (dacă aţi adăugat suport)
  obey pam restrictions = yes
  pam password change = yes

Asiguraţi-vă că permisiunile sunt setate corect pe fiecare resursă partajată şi amintiţi-vă să consultaţi documentaţia.

Acum, reporniţi server-ul şi adăugaţi utilizatorii care ar trebui să aibă acces la acest serviciu. Aceasta poate fi efectuată prin intermediul comenzii /usr/bin/smbpasswd cu parametrul -a.

1.  ssh

Singura securizare pe care o necesită OpenSSH este activarea unei autentificări mai puternice bazată pe encripţia cu chei publice. Prea multe site-uri (cum ar fi http://www.sourceforge.net, http://www.php.net şi http://www.apache.org) au suferit intruziuni neautorizate din cauza pierderii parolei sau parolelor proaste.

Cod 1.1: /etc/ssh/sshd_config

#Activaţi doar versiunea 2
Protocol 2

#Dezactivaţi autentificarea root. Utilizatorii trebuie să ruleze su pentru root
PermitRootLogin no

#Activaţi autentificarea cu chei publice
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Dezactivaţi .rhost şi autentificarea cu parolă normală
RhostsAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Permiteţi doar utilizatorilor din grupul wheel sau admin să se autentifice
AllowGroups wheel admin

#În aceste grupuri, permiteţi doar următorilor utilizatori
#Opţiunea @<domainname> este opţională dar înlocuieşte
#vechea directivă AllowHosts
AllowUsers kn@gentoo.org bs@gentoo.org

#Înregistrarea în jurnal
SyslogFacility AUTH
LogLevel INFO

ListenAddress 127.0.0.1

De asemenea, verificaţi că nu aveţi UsePAM yes în fişierul dvs. de configurare deoarece suprascrie mecanismul de autentificare cu chei publice.

Acum, tot ceea ce utilizatorii dvs. trebuie să facă este să-şi creeze o cheie (pe maşina de pe care doresc să se autentifice) cu următoarea comandă:

Cod 1.1: Creaţi o pereche de chei DSA

# /usr/bin/ssh-keygen -t dsa

Şi tastaţi fraza de autentificare.

Cod 1.1: Ce afişează ssh-keygen

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Apăsaţi Enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Introduceţi fraza]
Enter same passphrase again: [Introduceţi fraza din nou]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Aceasta va adăuga două fişiere în directorul dvs. ~/.ssh/ denumite id_dsa şi id_dsa.pub. Fişierul denumit id_dsa reprezintă cheia dvs. privată şi ar trebui ferită de alţi utilizatori decât dvs. Celălalt fişier id_dsa.pub trebuie distribuit pe fiecare server pe care aveţi acces. Adăugaţi cheia în directorul home al utilizatorilor în ~/.ssh/authorized_keys şi utilizatorul ar trebui să poată să se autentifice.

Cod 1.1: Adăugarea fişierului id_dsa.pub în fişierul authorized_keys

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys

Acum, utilizatorii ar trebui să îşi păzească şi cheia lor privată. Stocaţi-o pe un suport media pe care îl purtaţi mereu cu dvs. sau păstraţi-o pe staţia de lucru (puneţi acest paragraf în politica pentu (parole)).

Pentru mai multe informaţii vizitaţi site-ul OpenSSH.

1.  Utilizarea xinetd

xinetd înlocuieşte inetd (care nu este conţinut în Gentoo), aplicaţia daemon pentru servicii internet. Suportă controlul accesului pe baza adresei sistemului apelant şi timpului de acces. De asemenea, oferă capabilităţi extinse de jurnalizare, incluzând timpul la care a pornit aplicaţia server, adresa sistemului gazdă apelant, numele utilizatorului de la distanţă, timpul de rulare şi acţiunile executate.

Ca şi cu celelalte servicii, este important să avem o configuraţie implicită bună. Dar, deoarece xinetd este rulat ca root şi suportă protocoale ce este posibil să nu le cunoaşteţi, vă recomandăm să nu îl utilizaţi. Totuşi, dacă doriţi să-l utilizaţi, iată cum puteţi adăuga unele funcţionalităţi de securitate în acesta:

Cod 1.1: Instalarea xinetd

# emerge xinetd tcp-wrappers

Şi apoi editaţi fişierul de configurare:

Cod 1.1: /etc/xinetd.conf

defaults
{
 only_from = localhost
 instances = 10
 log_type = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps = 25 30
}

# Aceasta va rula pserver (cvs) prin xinetd cu următoarele setări:
# maxim 10 instanţe (10 conexiuni în acelaşi timp)
# limitaţi pserver doar la tcp
# folosiţi utilizatorul cvs pentru a rula acest serviciu
# ascultaţi pe o singură adresă ip
# permiteţi accesul de la 10.0.0.*
# limitaţi timpul în care dezvoltatorii pot utiliza dvs de la 8am la 5pm
# utilizaţi aplicaţii wrapper tcp (controlul accesului se poate face din
# /etc/hosts.allow şi /etc/hosts.deny)
# variabila max_load pentru maşină este setată la 1.0
# Indicatorul disable este setat implicit pe no, dar mi-ar plăcea
# cazul în care ar trebui să fie dezactivat
service cvspserver
{
 socket_type = stream
 protocol = tcp
 instances = 10
 protocol = tcp
 wait = no
 user = cvs
 bind = 10.0.0.2
 only_from = 10.0.0.0
 access_times = 8:00-17:00
 server = /usr/sbin/tcpd
 server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load = 1.0
 log_on_failure += RECORD
 disable = no
}

Pentru mai multe informaţii consultaţi man 5 xinetd.conf.

1.  X

Implicit, Xorg este configurat ca aplicaţie Xserver. Aceasta poate fi periculos, deoarece X utilizează conexiuni TCP necriptate şi ascultă pentru aplicaţiile xclients.

Important: Dacă nu aveţi nevoie de acest serviciu, dezactivaţi-l!

Dar, dacă depindeţi de utilizarea staţiei dvs. de lucru ca Xserver, utilizaţi comanda /usr/X11R6/bin/xhost cu atenţie. Această comandă permite clienţilor de pe alte sisteme gazdă să se conecteze şi să utilizeze terminalul. Aceasta poate fi la îndemână dacă aveţi nevoie de o aplicaţie X de pe altă maşină şi singura modalitate de rulare este prin intermediul reţelei, dar poate fi, de asemenea, exploatată de un atacator. Sintaxa acestei comenzi este /usr/X11R6/bin/xhost +hostname

Atenţie: Nu utilizaţi niciodată xhost +! Aceasta va permite oricărui client să se conecteze şi să preia controlul asupra aplicaţiei X. Dacă un atacator vă poate accesa aplicaţiaX, vă poate înregistra tastele apăsate şi prelua controlul asupra aplicaţiei dvs. desktop. Dacă trebuie să-l utilizaţi, amintiţi-vă mereu să adăugaţi un nume de sistem gazdă.

O soluţie mult mai securizată este să dezactivaţi această funcţionalitate definitiv, prin pornirea X cu startx -- -nolisten tcp sau să o dezactivaţi permanent din configuraţie.

Cod 1.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Pentru a vă asigura că startx nu va fi suprascris la instalarea unei noi versiuni de Xorg, trebuie să îi protejaţi locaţia. Adăugaţi următoarea linie în /etc/make.conf:

Cod 1.1: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Dacă utilizaţi un manager de login grafic, trebuie să luaţi în considerare altă abordare.

Pentru gdm (Gnome Display Manager)

Cod 1.1: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

Pentru xdm (X Display Manager) şi kdm (Kde Display Manager)

Cod 1.1: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp 

Actualizat la 11 Martie 2006

Versiunea originală a acestui document a fost actualizată ultima dată la 13 Iunie 2008

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.