Skip to main content
  1. Concetti/

Etc Passwd Anatomy

·2 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cos'è
#

File di testo pubblico che definisce tutti gli account del sistema — utenti umani, utenti di sistema e demoni. Per ogni account specifica username, UID, GID, home directory e shell da lanciare alla connessione. Leggibile da tutti perché molti programmi ne hanno bisogno, ma le password stanno in /etc/shadow che è accessibile solo a root.

Anatomia di una riga
#

Ogni riga è composta da 7 campi separati da due punti (:).

getent passwd barno 
barno:x:1000:1000:barno,,,:/home/barno:/usr/bin/zsh
  root : x : 0 : 0 : root : /root : /bin/bash
   │     │   │   │     │       │         └─ 7. Shell (il guscio)
   │     │   │   │     │       └─────────── 6. Home Directory
   │     │   │   │     └─────────────────── 5. Info (GECOS)
   │     │   │   └───────────────────────── 4. GID Primario
   │     │   └───────────────────────────── 3. UID (0 = ROOT)
   │     └───────────────────────────────── 2. Password Placeholder (x)
   └─────────────────────────────────────── 1. Username

Campi critici per la sicurezza
#

  1. UID 0: Qualsiasi utente con UID 0 è, per il kernel, l'utente Root, indipendentemente dal nome.
  2. Password (x): Se vedi una x, significa che l'hash della password è protetto nel file /etc/shadow. Se vedessi un hash o un campo vuoto, il sistema sarebbe vulnerabile.
    1. Shell (/bin/bash vs /usr/sbin/nologin): Gli utenti di sistema hanno solitamente nologin o false come shell per impedire il login. Ma la shell può essere qualsiasi eseguibile — non solo bash o zsh. Quando ti connetti via SSH, il server lancia esattamente quel programma. Se quel programma non è una shell interattiva, non ottieni un prompt — ottieni qualunque cosa il programma faccia prima di uscire.
      Per vedere la shell di un utente specifico: grep "^bandit26" /etc/passwd | cut -d: -f7

Scenario Reale (Privilege Escalation)
#

Un attaccante che ottiene permessi di scrittura su questo file può:

  1. Cambiare il proprio UID a 0.

  2. Creare un nuovo utente "backdoor" con UID 0.

  3. Cambiare la propria shell in una shell privilegiata.

Collegato a
#

Related