A la lliçó anterior vas llegir app.log i enviaments.csv sense problemes, però tard o d'hora et trobaràs amb un Permís denegat en intentar escriure a /var/log/veloz o en executar el teu primer script de ~/veloz-ops/bin. Els permisos no són un obstacle administratiu: són el mecanisme que impedeix que una fallada a veloz-api esborri les dades de negoci o que qualsevol usuari del sistema llegeixi les credencials de la passarel·la de pagament. En aquesta lliçó aprendràs a llegir-los, a modificar-los amb criteri i a deixar ~/veloz-ops i /srv/veloz/dades correctament protegits.

Contingut

  1. El model usuari / grup / altres
  2. Llegir la sortida d'ls -l camp a camp
  3. Què significa x en un fitxer i què significa en un directori
  4. chmod simbòlic
  5. chmod octal
  6. Propietat: chown, chgrp, id i groups
  7. umask: els permisos per defecte
  8. Bits especials: sticky, setgid i setuid
  9. sudo i el principi de mínim privilegi
  10. Cas pràctic: assegurar el toolkit i les dades de Veloz Envíos

  1. El model usuari / grup / altres

Tot fitxer i tot directori a Linux té un propietari (un usuari) i un grup. A partir d'aquí, els permisos es defineixen per a tres classes de subjectes:

Classe Lletra Qui és
Usuari (user) u El propietari del fitxer
Grup (group) g Els membres del grup assignat al fitxer
Altres (others) o Tots els altres usuaris del sistema

I per a cada classe existeixen tres permisos:

Permís Lletra En un fitxer En un directori
Lectura r Veure'n el contingut Llistar els noms que conté
Escriptura w Modificar-ne el contingut Crear, esborrar i reanomenar entrades
Execució x Executar-lo com a programa Travessar-lo per accedir al seu interior

La regla d'avaluació és important i sorprèn molta gent: el sistema comprova només la primera classe que coincideix. Si ets el propietari, s'apliquen els permisos d'u i no es miren els de g ni els d'o, encara que fossin més permissius. Un fitxer amb permisos ----rwxrwx és il·legible per al seu propietari i accessible per a tots els altres.

  1. Llegir la sortida d'ls -l camp a camp

ls -l /srv/veloz/dades/enviaments.csv
-rw-r----- 1 veloz veloz 21504 ago  3 09:14 enviaments.csv

Els camps, en ordre, són: tipus i permisos (-rw-r-----), nombre d'enllaços durs (1, tema de 05-01), propietari (veloz), grup (veloz), mida en bytes (21504), data de l'última modificació i nom. El que és interessant són els deu primers caràcters:

 -   rw-    r--    ---
tipus u      g      o
  • Tipus -: fitxer regular. Seria d per a un directori i l per a un enllaç simbòlic.
  • u = rw-: l'usuari veloz pot llegir i escriure, però no executar.
  • g = r--: els membres del grup veloz només poden llegir.
  • o = ---: la resta del sistema no el pot ni obrir.

Aquest és exactament el disseny que volem per a unes dades de negoci: l'aplicació escriu, l'equip d'operacions llegeix, ningú més no hi veu res.

  1. Què significa x en un fitxer i què significa en un directori

Aquesta distinció és la font número u de confusió amb els permisos.

En un fitxer, x significa «el sistema pot intentar executar-lo com a programa». Sense x, un script perfectament escrit falla amb bash: ./informe-diari.sh: Permís denegat.

En un directori, x significa una cosa completament diferent: permís de travessar-lo. Sense x en un directori no hi pots fer cd, ni accedir a res del seu interior, ni tan sols a fitxers per als quals sí que tens permís de lectura.

D'aquí se'n deriven tres combinacions que convé tenir clares:

Permisos del directori Què hi pots fer
r-- Llistar els noms amb ls, però no veure'n detalls ni entrar-hi
--x Entrar-hi i obrir fitxers si en coneixes el nom exacte, però no llistar
r-x El normal: llistar i accedir

La combinació --x és la que fan servir els webs per als directoris de configuració: hi saps accedir si coneixes el camí, però no pots explorar. I la conseqüència pràctica més útil: si un permís de lectura sobre un fitxer no funciona, revisa la x de tots els directoris del camí. N'hi ha prou que falti en un perquè el camí sencer sigui inaccessible.

  1. chmod simbòlic

chmod (change mode) modifica els permisos. En la seva forma simbòlica es llegeix gairebé com una frase: chmod [qui][operador][permisos] fitxer.

Qui Operador Permisos
u usuari, g grup, o altres, a tots + afegir, - treure, = fixar exactament r, w, x
chmod u+x ~/veloz-ops/bin/informe-diari.sh    # fer-lo executable per al propietari
chmod go-w /srv/veloz/dades                    # treure escriptura a grup i altres
chmod a=r /srv/veloz/dades/historic/*.csv      # tots NOMÉS lectura (fixa, no afegeix)
chmod u+rw,go-rwx ~/veloz-ops/etc/veloz-ops.conf  # diverses regles separades per coma

La diferència entre + i = és crucial: +r afegeix lectura conservant la resta, mentre que =r fixa els permisos d'aquesta classe exactament a lectura, i n'elimina escriptura i execució si les tenia. Quan vulguis un estat determinista, fes servir =.

chmod accepta -R per aplicar-lo recursivament, però fes-lo servir amb compte: chmod -R 755 sobre un arbre converteix en executables fitxers de dades que no ho haurien de ser. Més endavant, amb find (05-01), aprendràs a aplicar permisos diferents a fitxers i directoris en una sola passada.

  1. chmod octal

La forma octal és la que veuràs en documentació i scripts, perquè és compacta i determinista. Cada permís té un valor numèric i se sumen:

r val 4, w val 2 i x val 1. Sumant aquests valors surten els vuit dígits possibles:

Dígit 0 1 2 3 4 5 6 7
Permisos --- --x -w- -wx r-- r-x rw- rwx

S'escriuen tres dígits, un per classe: usuari, grup, altres. Els casos que cobreixen el 95 % de la pràctica:

Octal Simbòlic Ús típic
644 rw-r--r-- Fitxers normals: dades, registres, documents
755 rwxr-xr-x Scripts i directoris: executables per tothom
600 rw------- Fitxers amb secrets: claus, credencials
700 rwx------ Directoris privats i scripts personals
640 rw-r----- Dades que el grup llegeix i ningú més no veu

Una regla mental ràpida per convertir: pensa en rwx com tres interruptors que valen 4, 2 i 1. rw- = 4+2 = 6; r-x = 4+1 = 5; r-- = 4.

  1. Propietat: chown, chgrp, id i groups

Abans de canviar la propietat, comprova qui ets:

id
uid=1000(joan) gid=1000(joan) grups=1000(joan),27(sudo),1002(veloz)

id mostra el teu usuari, el teu grup principal i tots els grups secundaris als quals pertanys. groups en dóna la versió curta. Que joan sigui al grup veloz és el que li permet llegir els fitxers amb permisos 640 propietat de veloz.

sudo chown veloz /srv/veloz/dades/enviaments.csv        # canviar propietari
sudo chgrp veloz /srv/veloz/dades/enviaments.csv        # canviar grup
sudo chown veloz:veloz /srv/veloz/dades/enviaments.csv  # tots dos alhora
sudo chown -R veloz:veloz /srv/veloz/dades              # recursiu

Dues notes importants:

  • Canviar el propietari requereix root. Un usuari normal no pot «regalar» un fitxer a un altre, perquè això permetria burlar les quotes de disc i colar fitxers en l'espai aliè.
  • Canviar el grup sí que ho pot fer el propietari, sempre que ell mateix pertanyi al grup de destí.

Afegir un usuari a un grup es fa amb sudo usermod -aG veloz joan. L'-a (append) és obligatori: sense ell, usermod reemplaça la llista de grups secundaris en lloc d'afegir-hi, un error clàssic que deixa algú fora de sudo. Els canvis de grup no afecten sessions ja obertes: cal tancar la sessió i tornar a entrar.

  1. umask: els permisos per defecte

Quan crees un fitxer, per què surt amb 644 i no amb 777? Perquè el sistema parteix d'uns permisos base i els resta els bits indicats a la umask.

umask
0022

El permís base és 666 (rw-rw-rw-) per a fitxers i 777 per a directoris; la umask desactiva bits sobre aquesta base (no resta aritmèticament). Fixa't que els fitxers no neixen mai executables: la seva base no inclou x. Això és deliberat, i per això cal fer chmod +x explícitament a cada script nou.

umask Fitxers Directoris Escenari
022 644 755 Per defecte a la majoria de sistemes
002 664 775 Equips que treballen sobre un directori compartit
077 600 700 Màquines amb dades sensibles: ningú més no hi veu res

Es canvia amb umask 077, i perquè sigui permanent s'afegeix a ~/.bashrc (lliçó 01-02). Compte: la umask només afecta els fitxers creats després; no modifica els existents.

  1. Bits especials: sticky, setgid i setuid

A més dels nou bits rwx hi ha tres bits especials, que apareixen com un quart dígit octal a l'esquerra.

Sticky bit (1000) — En un directori amb escriptura per a tothom, impedeix que un usuari esborri fitxers d'un altre. És el que protegeix /tmp:

ls -ld /tmp mostra drwxrwxrwt. Aquesta t final és el sticky bit: sense ell, qualsevol usuari podria esborrar els fitxers temporals dels altres. S'aplica amb chmod 1777 dir o chmod +t dir.

Setgid (2000) — Sobre un directori, fa que tot el que s'hi creï a dins hereti el grup del directori en lloc del grup principal de qui el crea. És la peça clau dels directoris compartits:

sudo chgrp veloz /srv/veloz/dades
sudo chmod 2775 /srv/veloz/dades
ls -ld /srv/veloz/dades
drwxrwsr-x 3 root veloz 4096 ago  3 11:32 /srv/veloz/dades

La s a la posició de la x del grup indica setgid. A partir d'ara, qualsevol CSV que hi deixi veloz-api o qualsevol membre de l'equip pertanyerà al grup veloz i serà llegible per tot l'equip sense intervenció manual.

Setuid (4000) — Sobre un executable, fa que s'executi amb els privilegis del seu propietari, no de qui el llança. És com passwd pot modificar /etc/shadow sent tu un usuari normal.

Advertiment seriós: setuid és un vector d'atac de primer ordre. Un executable setuid de root amb una fallada de programació lliura el sistema sencer. No posis mai setuid a un script de shell —molts sistemes l'ignoren precisament per això— i no l'apliquis als teus propis programes tret que sàpigues exactament què fas. La seguretat en profunditat es tracta a 08-03.

  1. sudo i el principi de mínim privilegi

sudo executa una ordre concreta amb privilegis de root, i deixa registre a /var/log/auth.log de qui va fer què i quan. Aquest rastre és la raó principal per la qual es prefereix a iniciar sessió com a root.

El principi de mínim privilegi diu que cada procés i cada persona ha de tenir exactament els permisos que necessita, ni un més. Traduït al teu dia a dia:

  • Treballa sempre com a usuari normal; fes servir sudo només per a l'ordre que ho requereix.
  • Evita sudo su - i les sessions de root prolongades: es perd el registre i desapareix la xarxa de seguretat.
  • Resol els problemes d'accés amb grups, no repartint sudo. Que operacions llegeixi /srv/veloz/dades és un problema de pertinença al grup veloz, no de privilegis d'administrador.
  • Desconfia de chmod 777. És la resposta ràpida a un Permís denegat i gairebé sempre la incorrecta: deixa el fitxer escrivible per qualsevol procés de la màquina. La solució correcta és ajustar el propietari o el grup.

  1. Cas pràctic: assegurar el toolkit i les dades de Veloz Envíos

# 1. L'script ha de ser executable pel seu amo i llegible per la resta
chmod 755 ~/veloz-ops/bin/informe-diari.sh

# 2. La configuració contindrà credencials de la passarel·la: només l'amo
chmod 600 ~/veloz-ops/etc/veloz-ops.conf

# 3. El directori de dades pertany al grup veloz i n'hereta el grup (setgid)
sudo chgrp -R veloz /srv/veloz/dades
sudo chmod 2775 /srv/veloz/dades
sudo chmod 640 /srv/veloz/dades/enviaments.csv

# 4. Comprovar el resultat
ls -ld /srv/veloz/dades && ls -l /srv/veloz/dades/enviaments.csv
drwxrwsr-x 3 root  veloz 4096 ago  3 11:32 /srv/veloz/dades
-rw-r----- 1 veloz veloz 21504 ago  3 09:14 /srv/veloz/dades/enviaments.csv

El raonament de cada decisió:

  • 755 a l'script: necessita x per executar-se. No porta secrets, així que r-x per a grup i altres és inofensiu i facilita que un company l'auditi.
  • 600 a la configuració: així que hi desi una clau d'API, qualsevol permís de lectura per a «altres» equival a publicar-la. 600 és innegociable en fitxers amb credencials.
  • 2775 al directori: 775 dóna control al grup veloz sobre el contingut; el 2 inicial (setgid) garanteix que els fitxers nous heretin aquest grup automàticament.
  • 640 al CSV: el propietari (l'aplicació) escriu, l'equip llegeix, ningú més no veu les dades de negoci.

Errors Habituals i Consells

  • Respondre a un Permís denegat amb chmod 777. Funciona, i obre un forat. Pregunta't primer qui hauria de tenir accés i arregla-ho amb propietari o grup.
  • Oblidar la x dels directoris del camí. Si cat /srv/veloz/dades/enviaments.csv falla tot i tenir permís de lectura sobre el fitxer, comprova ls -ld /srv i ls -ld /srv/veloz.
  • Fer servir chmod -R 755 sobre un arbre mixt. Converteix en executables fitxers de dades. Aplica permisos diferents a fitxers i directoris (amb find, 05-01).
  • Confondre +r amb =r. El primer afegeix, el segon fixa l'estat exacte.
  • usermod -G sense -a. Reemplaça els grups secundaris en lloc d'afegir-hi i pot deixar-te fora de sudo.
  • Esperar que un canvi de grup tingui efecte immediat. Cal tancar la sessió i tornar-la a obrir.
  • Deixar un fitxer de credencials amb 644. És la fallada de seguretat més freqüent i la més fàcil d'evitar.

Exercicis

Exercici 1 — Llegir permisos. Interpreta aquestes tres línies d'ls -l dient, per a cadascuna, què pot fer el propietari, què el grup i què la resta, i expressa'n els permisos en octal:

-rwxr-x---  1 joan  veloz   512 ago  3 11:20 informe-diari.sh
drwxrwsr-x  3 root  veloz  4096 ago  3 11:32 dades
-rw-------  1 joan  joan     84 ago  3 11:22 veloz-ops.conf

Exercici 2 — L'script que no arrenca. Has creat ~/veloz-ops/bin/resum-enviaments.sh amb un editor i en llançar-lo obtens Permís denegat. ls -l mostra -rw-rw-r--. Explica'n la causa, corregeix-ho de dues maneres (simbòlica i octal) i justifica per què el fitxer va néixer sense x.

Exercici 3 — Dissenyar els permisos d'un directori compartit. L'equip d'operacions (grup veloz, tres persones) necessita un directori /srv/veloz/informes on tothom pugui crear informes i llegir els dels altres, però on ningú no pugui esborrar l'informe d'un altre i on els usuaris aliens al grup no vegin res. Escriu les ordres i explica cada bit.

Solucions

Solució a l'Exercici 1

Fitxer Octal Propietari Grup Altres
informe-diari.sh 750 rwx: llegeix, modifica i executa r-x: llegeix i executa, no modifica ---: res
dades 2775 rwx: llista, crea i entra rws: igual, i hereta el grup (setgid) r-x: llista i entra, no crea
veloz-ops.conf 600 rw-: llegeix i escriu ---: res ---: res

A dades, la s ocupa el lloc de la x del grup: la x continua activa (si no ho estigués es veuria una S majúscula) i a més hi ha el bit setgid, que en octal és el 2 inicial.

Solució a l'Exercici 2

chmod u+x ~/veloz-ops/bin/resum-enviaments.sh   # simbòlica: mínim imprescindible
chmod 755 ~/veloz-ops/bin/resum-enviaments.sh   # octal: executable també per l'equip
ls -l ~/veloz-ops/bin/resum-enviaments.sh
-rwxr-xr-x 1 joan joan 340 ago  3 11:40 /home/joan/veloz-ops/bin/resum-enviaments.sh

Causa: el fitxer no té el bit x en cap classe, així que el kernel es nega a executar-lo, encara que el seu contingut sigui un script vàlid. Per què va néixer sense x: els fitxers es creen amb permisos base 666 (rw-rw-rw-), sense execució en cap cas, i la umask 022 en retira a més l'escriptura de grup i altres, i deixa 644. El sistema no marca mai un fitxer com a executable pel seu compte: és una decisió conscient que ha de prendre una persona, i aquesta és precisament la protecció.

Solució a l'Exercici 3

sudo mkdir -p /srv/veloz/informes
sudo chgrp veloz /srv/veloz/informes
sudo chmod 3770 /srv/veloz/informes
ls -ld /srv/veloz/informes
drwxrws--T 2 root veloz 4096 ago  3 11:45 /srv/veloz/informes

Desglossament del 3770:

  • 770: propietari i grup veloz tenen rwx (llistar, crear, entrar); altres no tenen res, cosa que compleix el requisit d'invisibilitat per a usuaris aliens.
  • 3 = 2 + 1, és a dir, dos bits especials alhora:
    • 2 (setgid): els informes creats a dins pertanyeran al grup veloz sense importar el grup principal de qui els creï, així que tot l'equip els pot llegir.
    • 1 (sticky): encara que tothom té w sobre el directori, cada usuari només pot esborrar o reanomenar els seus propis fitxers. És el mateix mecanisme que protegeix /tmp.

La T majúscula final indica sticky bit sense permís x per a altres; si altres tingués x hi apareixeria una t minúscula. Aquest directori és l'exemple canònic de com els bits especials resolen un requisit de col·laboració que els nou bits rwx no poden expressar.

Conclusió

Ja saps llegir una línia d'ls -l camp a camp, distingir el paper del bit x en fitxers i en directoris —la causa oculta de tants «permís denegat»—, i modificar permisos tant en forma simbòlica com octal, amb els quatre patrons que resolen gairebé tot: 644, 755, 600 i 700. Controles la propietat amb chown i chgrp, saps consultar els teus grups amb id, entens per què la umask decideix els permisos de cada fitxer nou i coneixes els tres bits especials, inclòs el setgid que fa funcionar un directori compartit de debò. I, sobretot, tens el criteri: mínim privilegi, grups abans que sudo, i mai 777.

~/veloz-ops queda amb el seu script executable i la seva configuració blindada a 600, i /srv/veloz/dades amb el grup veloz i herència automàtica. La seguretat en profunditat —injecció d'ordres, fitxers temporals segurs, gestió de secrets— s'aborda a 08-03.

A la lliçó 02-04 arriba la peça que multiplica tot el que has après: la redirecció i les canonades. Aprendràs a separar la sortida normal dels errors, a desar resultats en fitxers, a descartar soroll amb /dev/null i a encadenar els filtres del Mòdul 2 en cadenes que responen preguntes complexes sobre acces.log en una sola línia.

Curs de Programació en Bash

Mòdul 1: Introducció a Bash

Mòdul 2: Ordres Bàsiques de Bash

Mòdul 3: Fonaments de Scripting

Mòdul 4: Scripting Intermedi

Mòdul 5: Tècniques Avançades de Scripting

Mòdul 6: Treballar amb Eines Externes

Mòdul 7: Automatització i Programació

Mòdul 8: Bones Pràctiques i Optimització

Mòdul 9: Projectes del Món Real

© Copyright 2026. Tots els drets reservats