IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 102 (torneu a la resta de temes)
Fitxers: LPI110.2_.pdf (LPI110.2_.odp)
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_102_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_102/110.2
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius del tema

110.2. Establir la seguretat d'una màquina
Objective.jpg
  • Objectiu: Els candidats han de ser capaços d'establir un nivell bàsic de seguretat de màquina
  • Pes: 3
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

Apunts: LPI 110.2. Establir la seguretat d'una màquina

Plantilla per prendre apunts

Paraules de pas shadow

Consulteu shadow suite

TCP wrappers

TCP Wrapper ("embolcall TCP") és un sistema de control d'accés per xarxa basat en llistes de control d'accés o ACL (Acces Control List) utilitzat en sistemes Unix-like com Linux. S'utilitza per filtrar l'accés a serveis de xarxa segons l'adreça IP, noms de terminal o consultes ident.

S'implementa utilitzant una llibrearia anomenada libwrap. Inicialment només aquells serveis que utilitzaven el super servidor inet (o xinet) i eren embolcallats amb el programa tcpd, d'aquí prové l'origen del nom. Avui en dia (--acacha 04:37, 11 maig 2010 (UTC)), la majoria de serveis poden utilitzar directament TCP Wrappers.

Un avantatge de TCP wrappers és que no cal tornar a iniciar el servei per aplicar els canvis.

Tot i que va ser escrit per filtrar paquets del protocols TCP i UDP, també existeixen exemples d'ús per a ICMP.

Els fitxers principals de configuració són:

Cal tenir en compte:

  • Primer s'apliquen les normes del fitxer hosts.allow i per tant si una màquina està permesa i denegada al mateix temps realment serà permesa.
  • Les normes es llegeixen de dalt a abaix i només la primera norma coincident és aplicada. L'ordre de les normes és molt important.
  • Si no existeixen normes a cap dels dos fitxers per a un servei concret (o si no existeixen els fitxers) aleshores és permet l'accés.
  • No hi ha cap mena de memòria cau i per tant qualsevol canvi als fitxers s'aplica automàticament sense necessitat de tornar a iniciar el servei.

El format de les normes dels dos fitxers és igual i és el següent:

<daemon list>: <client list> [: <option>: <option>: ...]

On:

  • <daemon list>: una llista de serveis (cal posar el nom del procés i no pas el del servei) separada per comes. També es poden utilitzar comodins i operadors.
  • <client list> : Un llista separada per comes de noms de màquina o adreces IP. Es poden utilitzar patrons, comodins i operadors.
  • <option>: Una acció opcional o una llista d'accions separades per (colon) que s'executaran si es compleix la norma. Es poden executar comandes, guions de shell, permetrà a o denegar l'accés o fins i tot fer logging.
  • Cada fila és una norma. Es pot continuar una norma en una línia extra utilitzant la contrabarra (\) al final de la línia
  • Es poden fer comentaris iniciant la línia amb #
  • Les línies en blanc són ignorades
  • Cal finalitzar el fitxers amb un salt de línia.

Vegem un exemple bàsic:

vsftpd : .example.com 

En aquest cas es filtren els accessos al servidor FTP (vsftpd) des de qualsevol màquina del domini example.com. Si l'exemple està al fitxer hosts.allow es permetra l'accés i si està a hosts.deny es denegarà l'accés.

Un altre exemple:

sshd : .example.com  \
: spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \
: deny

Primer vegem com és pot fer un exemple multilinia amb la contrabarra. En aquest cas si hi ha una connexió al servidor SSH (sshd) s'executarà un ordre i es denegarà la connexió (fins i tot si es posa a hosts.allow)

Comodins:

Permet que TCP wrappers indica grups de dimonis o màquines. Possibles comodins:

  • ALL: coincideix amb tot. Pot ser utilitzar a la llista de dimonis o la llista de clients.
  • LOCAL: coincideix amb qualsevol màquina que no contingui un punt al seu nom, per exemple localhost.
  • KNOWN: Coincideix amb qualsevol nom de màquina o adreça de màquina coneguda (segons el fitxer /etc/hosts)
  • UNKNOWN: Coincideix amb qualsevol nom de màquina o adreça de màquina no coneguda
  • PARANOID: Coincideix amb qualsevol màquina en la que el nom de màquina no correspongui a la seva IP.

Patrons

Es poden utilitzar a la llista de clients per especificar de forma més precisa groups de màquines clients:

  • Nom de màquina que comença per punt (.): Per exemple per execificar totes les màquina d'un domini: .exemple.com
  • Nom de màquina que acaba en punt (.): Per exemple totes les màquines que tenen la IP que comença per "192.168."
  • Asteric: Es pot utilitzar per exemple com a: *.example.com
  • Barra (/): Indica que es tracta d'un nom de fitxer. Es pot utilitzar un fitxer per indicar una llista de màquines.

Recursos:

Aturar serveis de xarxa que no estiguin en ús

La majoria de distribucions modernes utilitzen SystemV i els seus scripts com a sistema per gestionar el serveis /dimonis de la màquina. Podeu utilitzar ordres com nmap, netstat o lsof per detectar quins serveis s'estan executant a la vostra màquina i després aturar-los amb:

$ sudo /etc/init.d/nom_servei stop

Cal tenir en compte que així només atureu el servei de forma temporal, un cop es torni a iniciar la màquina el servei es tornarà a activar (suposant que és un servei que s'activa durant l'arrancada del sistema). Per desactivar el servei de forma permanent cal esborrar tots els enllaços de les carpetes /etc/rcx.d que fan referència al servei. La comanda update-rc.d facilita aquest procés. Per exemple:

$ sudo update-rc.d -f samba remove 
Removing any system startup links for /etc/init.d/samba ...
  /etc/rc0.d/K19samba
  /etc/rc1.d/K19samba
  /etc/rc2.d/S20samba
  /etc/rc3.d/S20samba
  /etc/rc4.d/S20samba
  /etc/rc5.d/S20samba
  /etc/rc6.d/K19samba

Es pot tornar a activar el servei amb:

$ sudo update-rc.d samba defaults 
Adding system startup for /etc/init.d/samba ...
  /etc/rc0.d/K20samba -> ../init.d/samba
  /etc/rc1.d/K20samba -> ../init.d/samba
  /etc/rc6.d/K20samba -> ../init.d/samba
  /etc/rc2.d/S20samba -> ../init.d/samba
  /etc/rc3.d/S20samba -> ../init.d/samba
  /etc/rc4.d/S20samba -> ../init.d/samba
  /etc/rc5.d/S20samba -> ../init.d/samba

Comanda que crea enllaços al servei samba en els nivells per defecte. Els nivell per defecte estan indicats al propi fitxer d'inicialització:

$ cat /etc/init.d/samba | more
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6

També podeu utilitzar chkconfig per mostrar la llista de serveis en execució:

$ sudo chkconfig --list | more
acpi-support              0:off  1:off  2:on   3:on   4:on   5:on   6:off
acpid                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
alsa-utils                0:off  1:off  2:off  3:off  4:off  5:off  6:off
anacron                   0:off  1:off  2:off  3:off  4:off  5:off  6:off
apache2                   0:off  1:off  2:on   3:on   4:on   5:on   6:off
 apparmor                  0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on 
apport                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
atd                       0:off  1:off  2:off  3:off  4:off  5:off  6:off
...

Consulteu també:

Xinet

El dimoni o servidor xinet (xinet daemon) és un superservidor utilitzat en molts sistemes operatius Unix-like. Les sigles provenen de eXtended InterNET Daemon.

És una versió millorada de inetd, el dimoni d'Internet (Internet daemon).

Xinetd suporta entre d'altres, ACLs de TCP Wrappers, millores en la capacitat de logging, i la possibilitat de tenir serveis disponibles segons un calendari, pot especificar límits en el nombre de serveis que el sistema pot executar i també disposa de mecanismes de defensa contra escànners de ports o eines similars.

Abans era molt utilitzat com a suport per a executar la majoria de serveis/dimonis del sistema. Actualment és força més comú que cada dimoni s'executi a si mateix i porti el control ell mateix.

Podeu instal·lar xinet amb:

$ sudo apt-get install xinetd

Els fitxers instal·lats són:

$ dpkg -L xinetd
/.
/etc
/etc/xinetd.d
/etc/xinetd.d/chargen
/etc/xinetd.d/echo
/etc/xinetd.d/discard
/etc/xinetd.d/daytime
/etc/xinetd.d/time
/etc/default
/etc/default/xinetd
/etc/init.d
/etc/init.d/xinetd
/etc/xinetd.conf
/usr
/usr/sbin
/usr/sbin/xinetd
/usr/sbin/itox
/usr/sbin/xconv.pl
/usr/share
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/xinetd.log.5.gz
/usr/share/man/man5/xinetd.conf.5.gz
/usr/share/man/man8
/usr/share/man/man8/xconv.pl.8.gz
/usr/share/man/man8/xinetd.8.gz
/usr/share/man/man8/itox.8.gz
/usr/share/doc
/usr/share/doc/xinetd
/usr/share/doc/xinetd/NEWS.Debian.gz
/usr/share/doc/xinetd/changelog.gz
/usr/share/doc/xinetd/README.gz
/usr/share/doc/xinetd/README.update-inetd
/usr/share/doc/xinetd/xinetd.org-FAQ.html
/usr/share/doc/xinetd/README.Debian
/usr/share/doc/xinetd/copyright
/usr/share/doc/xinetd/examples
/usr/share/doc/xinetd/examples/sample.conf.gz
/usr/share/doc/xinetd/changelog.Debian.gz 

Podeu consultar el manual amb:

$ man xinetd

Els fitxers principals de configuració són:

  • /etc/xinetd.conf: Fitxer principal de configuració
  • /etc/default/xinetd: Conté les configuracions per defecte del servidor xinetd
  • /etc/init.d/xinetd: script Systemv que controla el superservidor.
  • /etc/xinetd.d: Aquí els serveis que volen utilitzar xinet, poden instal·lar un fitxer de configuració del servei. Cal tornar a carregar o iniciar xinetd per aplicar els canvis.

Fixeu-vos que al instal·lar xinetd se us ha instal·lat per defecte la configuració de certs serveis:

/etc/xinetd.d/chargen
/etc/xinetd.d/echo
/etc/xinetd.d/discard
/etc/xinetd.d/daytime
/etc/xinetd.d/time

Per exemple podem consultar el fitxer de configuració del servei intern echo:

$ cat /etc/xinetd.d/echo 
# default: off
# description: An xinetd internal service which echo's characters back to
# clients.
# This is the tcp version.
service echo
{  
	disable		= yes
	type		= INTERNAL
	id		= echo-stream
	socket_type	= stream
	protocol	= tcp
	user		= root
	wait		= no
}                                                                                

# This is the udp version.
service echo
{
	disable		= yes
	type		= INTERNAL
	id		= echo-dgram
	socket_type	= dgram
	protocol	= udp
	user		= root
	wait		= yes
}

Activeu el servei (canviant disable a no) i torneu a iniciar xinet:

$ sudo /etc/init.d/xinetd restart

El servei d'echo segons el fitxer /etc/services:

$ cat /etc/services | grep echo
echo		7/tcp
echo		7/udp

Utilitza el port 7.

El podeu provar amb telnet:

$ telnet localhost 7
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hola
hola



Recursos:

Inet

El dimoni o servidor inet (inet daemon) és un superservidor utilitzat en molts sistemes operatius Unix-like. Les sigles provenen de InterNET Daemon.

openbsd-inetd

És una de les implementacions (basada en BSD) del dimoni inet. Es pot instal·lar amb:

$ sudo apt-get install openbsd-inetd

Us donarà un missatge de que no hi ha configurat cap servei i que per tant no executa cap servei.

Un cop instal·lat els fitxers instal·lats són:

$ dpkg -L openbsd-inetd
/.
/usr
/usr/sbin
/usr/sbin/inetd
/usr/share
/usr/share/man
/usr/share/man/man5
/usr/share/man/man8
/usr/share/man/man8/inetd.8.gz
/usr/share/doc
/usr/share/doc/openbsd-inetd
/usr/share/doc/openbsd-inetd/copyright
/usr/share/doc/openbsd-inetd/changelog.gz
/usr/share/doc/openbsd-inetd/changelog.Debian.gz
/etc
/etc/init.d
/etc/init.d/openbsd-inetd
/usr/share/man/man5/inetd.conf.5.gz

Podeu consultar el manual amb:

$ man inetd

Tot i que no apareix a la llista de fitxers instal·lats (això ens indica que és un fitxer que es genera de forma dinàmica durant la instal·lació del paquet), el fitxer de configuració principal és:

$ sudo joe /etc/inetd.conf

Inicialment el tindreu buit.

Ara podeu instal·lar un servei com per exemple un servidor de Telnet:

$ sudo apt-get install telnetd

Ara si consulteu el fitxer /etc/inetd.conf un altre cop:

$ sudo joe /etc/inetd.conf
#<off># netbios-ssn     stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/smbd
telnet          stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd

Vegeu que s'ha afegiu una línia que control l'execució del servidor de telnet. El servidor de Telnet no té el seu propi script SystemV i per exemple heu d'aturar el servidor de telnet comentant la línia i executant:

$ sudo /etc/init.d/openbsd-inetd restart

Vegeu també l'article sobre Telnet.

Fitxers

/etc/nologin

Si es crea aquest fitxer, per exemple utilitzant l'ordre touch:

$ sudo touch /etc/nologin

Fixeu-vos que no cal que tingui cap mena de dades al seu interior. Ara no es podran iniciar noves sessions.

IMPORTANT: Teniu en compte que les sessions ja existents continuaran funcionant i entre elles la sessió gràfica i totes les noves sessions que creeu des de la sessió gràfica. Per comprovar l'efecte del fitxer /etc/nologin hauríeu de provar-ho des de una consola virtual, p. ex. Ctrl+Alt+F1

També es pot utilitzar l'ordre usermod per tal d'establir que certs usuaris no tinguin accés a l'interpret d'ordres, en sistemes de la família Red Hat s'utilitza:

$ sudo usermod -s /sbin/nologin tom

NOTA: En sistemes de la família Debian s'utilitza: /bin/false en comptes de /sbin/nologin (que de fet no existeix en alguns sistemes)

A l'exemple anterior establim com a interpret d'ordres el executable nologin per a l'usuari tom.

IMPORTANT: Compte no us equivoqueu i establiu la bash del root a /bin/false ja que us deixaria el sistema inaccessible

.

El manual d'aquest fitxer el podeu consultar amb:

$ man 5 nologin

També existeix l'ordre nologin, segons el manual:

$ man nologin
NOLOGIN(8)                System Management Commands                NOLOGIN(8)

NAME
       nologin - politely refuse a login 

SYNOPSIS
       nologin

L'ordre la trobareu a:

$ whereis nologin
nologin: /usr/sbin/nologin /usr/share/man/man8/nologin.8.gz /usr/share/man/man5/nologin.5.gz

I s'utilitza per establir una bash de no login (mostra un missatge indicant que no es té accés). També

/etc/passwd

Consulteu /etc/passwd.

/etc/shadow

Consulteu /etc/shadow.

/etc/xinetd.d/*

Consulteu xinetd

/etc/xinetd.conf

Consulteu xinetd

/etc/inet.d/*

Consulteu xinetd

/etc/inetd.conf

Consulteu xinetd

/etc/inittab

Consulteu /etc/inittab

/etc/init.d/*

/etc/hosts.allow

Consulteu TCP Wrappers.

/etc/hosts.deny

Consulteu TCP Wrappers.

Vegeu també

Enllaços externs