Debian: Serveis

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:

  1. Port 5432 TCP de l’interficie localhost
  2. 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.

Deixa un comentari