Índex
Configuració
Systemd és el sistema responsable de la seqüència de boot i de gestionar els serveis, iniciar-los i monitorar-los. Aquest sistema es pot controlar amb la comanda systemctl, que si s’executa sense atributs, mostra totes les unitats actives:
nadki@debian:~$ systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point
sys-devices-pci0000:00-0000:00:01.1-ata3-host2-target2:0:0-2:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM
sys-devices-pci0000:00-0000:00:03.0-net-eth0.device loaded active plugged 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)
sys-devices-pci0000:00-0000:00:05.0-sound-card0-controlC0.device loaded active plugged /sys/devices/pci0000:00/0000:00:05.0/sound/card0/controlC0
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loaded active plugged VBOX_HARDDISK root
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda.device loaded active plugged VBOX_HARDDISK
sys-devices-platform-serial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-virtual-misc-rfkill.device loaded active plugged /sys/devices/virtual/misc/rfkill
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-module-fuse.device loaded active plugged /sys/module/fuse
sys-subsystem-net-devices-eth0.device
[...]
Si l’executes amb l’atribut status, mostra en forma jeràrquica els serveis que estan corrent:
nadki@debian:~$ systemctl status
● kali
State: degraded
Units: 264 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 1 units
Since: Thu 2023-01-19 05:10:43 EST; 5min ago
systemd: 252-2
CGroup: /
├─init.scope
│ └─1 /sbin/init splash
├─system.slice
│ ├─ModemManager.service
│ │ └─610 /usr/sbin/ModemManager
│ ├─NetworkManager.service
│ │ └─594 /usr/sbin/NetworkManager --no-daemon
│ ├─colord.service
│ │ └─1364 /usr/libexec/colord
│ ├─cron.service
│ │ └─450 /usr/sbin/cron -f
│ ├─dbus.service
│ │ └─451 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
│ ├─haveged.service
│ │ └─376 /usr/sbin/haveged --Foreground --verbose=1
│ ├─lightdm.service
│ │ ├─717 /usr/sbin/lightdm
│ │ └─735 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
│ ├─polkit.service
│ │ └─453 /usr/lib/polkit-1/polkitd --no-debug
│ ├─rsyslog.service
│ │ └─461 /usr/sbin/rsyslogd -n -iNONE
│ ├─rtkit-daemon.service
│ │ └─843 /usr/libexec/rtkit-daemon
│ ├─system-getty.slice
│ │ └─getty@tty1.service
│ │ └─734 /sbin/agetty -o "-p -- \\u" --noclear - linux
│ ├─systemd-journald.service
│ │ └─305 /lib/systemd/systemd-journald
│ ├─systemd-logind.service
│ │ └─462 /lib/systemd/systemd-logind
│ ├─systemd-udevd.service
│ │ └─udev
│ │ └─334 /lib/systemd/systemd-udevd
│ ├─udisks2.service
│ │ └─1261 /usr/libexec/udisks2/udisksd
│ ├─upower.service
│ │ └─1118 /usr/libexec/upowerd
│ └─virtualbox-guest-utils.service
│ └─622 /usr/sbin/VBoxService
[...]
Cada servei està representat per la seva unitat de servei, que és un fitxer que descriu el servei. Aquests fitxers estan emmagatzemats a /lib/systemd/system.
Per exemple, la unitat de servei d’Apache és:
nadki@debian:~$ cat /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl graceful-stop
ExecReload=/usr/sbin/apachectl graceful
KillMode=mixed
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
Pots utilitzar la comanda systemctl amb els atributs start, stop, restart,, enable, disable o status per executar accions sobre el servei (iniciar, aturar, reiniciar, iniciar permanentment, aturar permanentment o estat, respectivament).
nadki@debian:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; preset: disabled)
Active: active (running) since Thu 2023-01-19 05:24:49 EST; 10s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 5188 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 5205 (apache2)
Tasks: 6 (limit: 2291)
Memory: 19.1M
CPU: 40ms
CGroup: /system.slice/apache2.service
├─5205 /usr/sbin/apache2 -k start
├─5211 /usr/sbin/apache2 -k start
├─5212 /usr/sbin/apache2 -k start
├─5213 /usr/sbin/apache2 -k start
├─5214 /usr/sbin/apache2 -k start
└─5215 /usr/sbin/apache2 -k start
Jan 19 05:24:49 kali systemd[1]: Starting The Apache HTTP Server...
Jan 19 05:24:49 kali apachectl[5204]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Jan 19 05:24:49 kali systemd[1]: Started The Apache HTTP Server.
SSH
SSH és un servei que et permet iniciar sessió remotament a una màquina, transferir fitxers i executar comandes. La comanda és ssh i el servei sshd.
Per defecte, ja ve instal·lat el paquet oppenssh-server, però el servei està deshabilitat. Pots engegar-lo manualment amb la següent comanda:
nadki@debian:~$ systemctl start ssh
Si vols que s’iniciï automàticament, ho pots fer així:
nadki@debian:~$ systemctl enable ssh
Pots veure i editar la configuració del servei al fitxer /etc/ssh/sshd_config. Per defecte, permet inicis de sessió amb contrasenya. Si volguessis incrementar la seguretat i utilitzar claus, pots desactivar l’opció PasswordAuthentication. També pots canviar el port on està exposat el servei a l’opció Port (per defecte està al 22).
Sempre que facis canvis de configuració de qualsevol servei, recorda reiniciar-lo. Sinó no s’aplicaran:
nadki@debian:~$ systemctl reload ssh
Les claus criptogràfiques s’emmagatzemen a /etc/ssh/ssh_host. Aquestes claus s’han de mantenir en secret i no s’han de compartir amb altres màquines.
PostgreSQL
És una base de dades que serveix per emmagatzemar informació. El port per defecte és el 5433 i el nom del servei és postgresql. Així que per iniciar-lo es fa així:
nadki@debian:~$ systemctl start postgresql
El sistema de paquets de PostgreSQL permet tenir diverses instal·lades diverses versions a la vegada. També és possible gestionar diversos clusters (col·lecció de bases de dades amb el nom postmaster). Tota aquesta configuració està a /etc/postgresql/version/NOM_DEL_CLUSTER/.
Per defecte, PostgreSQL escolta les connexions entrants de dues maneres:
- Port 5432 TCP de l’interficie localhost
- Sockets /var/run/postgresql/.s.PGSQL.5432
Ambdues connexions es poden configurar al fitxer postgresql.conf:
- listen_address: direcció on escoltar
- port: port TCP
- unix_socket_directories: definir el directori on es crearan els fitxers basats en sockets
Depenent de com es connectin els clients, s’utilitzen diferents formes d’autenticació. El fitxer pg_hba.conf defineix a qui se li permet connectar-se a cada socket i com s’autentiquen.
Per defecte, les connexions basades en sockets fan servir l’usuari d’Unix com a nom d’usuari de PostgreSQL i no demana res més per autenticar-se. A les connexions TCP, PostgreSQL obliga a l’usuari autenticar-se amb usuari i contrasenya.
L’usuari postgres és un usuari especial que té tots els privilegis d’administració sobre totes les bases de dades. S’utilitza per crear nos usuaris i noves bases de dades.
Crear bases de dades i usuaris
Primer de tot, t’has de connectar al servei PostgreSQL de manera local. La millor forma de fer-ho és fent servir la comanda postgres.
Algunes comandes:
- createuser: crea un nou usuari
- dropuser: elimina un usuari
- createdb: crea una base de dades, on -T és la plantilla, -E és l’encoding i -O és l’usuari que serà propietari de la base de dades
- dropdb: elimina una base de dades
nadki@debian:~$ sudo su - postgres
nadki@debian:~$ createuser -P projecteNadki
Enter password for new role:
Enter it again:
nadki@debian:~$ createdb -T template0 -E UTF-8 -O projecteNadki nadkiDB
nadki@debian:~$ exit
Per connectar-se remotament, ho pots fer amb la comanda psql. On -h indica el hostname/IP del servidor i -U l’usuari.
nadki@debian:~$ sudo psql -h localhost -U projecteNadki nadkiDB
Password for user projecteNadki:
psql (9.5.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
nadkiDB=>
Apache
Apache és un servei que et permet aixecar fàcilment un servidor web. El nom del servei és apache2.
nadki@debian:~$ sudo systemctl start apache2
Una vegada Apache està corrent, pots accedir a http://localhost i, si s’ha iniciat correctament, veuràs la pàgina per defecte d’Apache.
Apache és un servidor modular, moltes coses estan implementades per mòduls externs al programa principal Els mòduls els pots trobar a /etc/apache2/mods-available. Per defecte, només s’activen els mòduls més comuns, però pots habilitar-ne de nous executant a2enmod:
nadki@debian:~$ sudo a2enmod NOM_MODUL
Per desactivar un mòdul pots utilitzar a2dismod:
nadki@debian:~$ sudo a2dismod NOM_MODUL
N’hi ha molts de disponibles. Uns dels més comuns són el mòdul PHP (libapache-mod-php) i SSL/TLS (ssl). Si actives SSL/TLS, hauràs d’afegir el fitxer de configuració. Pots trobar un exemple a /etc/apache2/sites-available/default-ssl.conf.
Hosts virtuals
Els hosts virtuals permeten que un mateix servei Apache pugui processar més d’una pàgina web. Per exemple, www.nadki.com i www.projectenadki.com.
La configuració per defecte d’Apache2 habilita automàticament els hosts virutals. Per defecte, el fitxer /etc/apache2/sites-enabled/000-default.conf conté el primer host virtual. És el que utilitzarà Apache si no se’n configuren més o el host demanat pel client no coincideix amb cap dels virtuals.
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
Per afegir nous hosts virtuals, has de crear un fitxer de configuració a /etc/apache2/sites-available/ que té com a nom el nom de la pàgina, per exemple www.nadki.com.conf.
nadki@debian:~$ cat www.nadki.com.conf
<VirtualHost *:80>
ServerName www.nadki.com
ServerAlias nadki.com
DocumentRoot /var/www/html2/
</VirtualHost>
En aquest cas he indicat que la carpeta on hi ha la pàgina web és /var/www/html2/, així que toca crear-la i fer l’html:
nadki@debian:~$ sudo mkdir html2
nadki@debian:~$ cat html2/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<t1>NADKI Apache Test</t1>
</body>
</html>
Finalment, només queda habilitar el host virtual i reiniciar Apache:
nadki@debian:~$ sudo a2ensite www.nadki.com
Enabling site www.nadki.com.
To activate the new configuration, you need to run:
systemctl reload apache2
nadki@debian:~$ systemctl reload apache2
IMPORTANT: Si estàs fent proves en local, recorda modificar el fitxer hosts perquè el DNS resolgui a localhost!
nadki@debian:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 www.nadki.com
Directoris
Al fitxer /etc/apache2/apache2.conf trobaràs el fitxer de configuració d’Apache. Hi ha un bloc anomenat Directory que és on has de configurar diverses opcions. Per defecte és així:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
DirectoryIndex index.php index.html index.htm
</Directory>
Primer de tot, indica la carpeta on hi haurà els fitxers de la pàgina web. Si vols que la pàgina estigui a un altre lloc, per exemple a /srv, però no modifiques el fitxer, el servidor retornarà un error de Forbidden quan intenti carregar la web.
A l’opció DirectoryIndex has d’indicar quin fitxer carregarà si l’usuari no ho especifica. Normalment, és index.html o index.php. Per exemple, http://www.nadki.com/index.html serà el mateix que http://www.nadki.com.
L’opció Options et permet habilitar o deshabilitar certes característiques:
- ExecCGI: permet l’execució d’scripts CGI.
- FollowSymLinks: indica al servidor que segueixi als enllaços simbòlics, si n’hi ha.
- SymLinksIfOwnerMatch: el mateix que l’anterior, però el propietari del fitxer destí ha de ser el mateix que el de l’enllaç.
- Includes: permet Server Side Includes (SSI).
- Indexes: indica al servidor que mostri el contingut de la carpeta si l’usuari accedeix a una en lloc d’un fitxer en concret.
- MultiViews: permet la negociació de contingut. D’aquesta manera, el servidor pot mostrar la pàgina depenent de l’idioma que tingui el navegador de l’usuari.
Seguretat
En certes situacions potser t’interessa restringir l’accés a certes parts de la web. Per fer-ho, has de crear el fitxer .htaccess a la carpeta que vulguis protegir. Tingues en compte que és un fitxer ocult, així que no apareixerà a no ser que llistis amb l’opció ls -a.
Un exemple de .htaccess seria aquest:
Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
Indica que s’utilitzarà Basic Authentication per protegir el contingut i que només els usuaris vàlids podran accedir.
Hauràs de modificar l’opció AllowOverride i canviar de None a All del fitxer de configuració d’Apache per habilitar .htaccess.
Per crear els usuaris pots utilitzar la comanda htpasswd:
# Crea la carpeta si és la primera vegada
nadki@debian:~$ sudo mkdir authfiles
nadki@debian:~$ sudo htpasswd -c /etc/apache2/authfiles/htpasswd-private nadki
New password:
Re-type new password:
Adding password for user nadki
nadki@debian:~$ sudo systemctl reload apache2
Pots aplicar polítiques encara més restrictives a través de l’atribut Require, com bloquejar certes IPs.