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
- El model usuari / grup / altres
- Llegir la sortida d'
ls -lcamp a camp - Què significa
xen un fitxer i què significa en un directori chmodsimbòlicchmodoctal- Propietat:
chown,chgrp,idigroups umask: els permisos per defecte- Bits especials: sticky, setgid i setuid
sudoi el principi de mínim privilegi- Cas pràctic: assegurar el toolkit i les dades de Veloz Envíos
- 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.
- Llegir la sortida d'
ls -l camp a camp
ls -l camp a campEls 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:
- Tipus
-: fitxer regular. Seriadper a un directori ilper a un enllaç simbòlic. u=rw-: l'usuarivelozpot llegir i escriure, però no executar.g=r--: els membres del grupveloznomé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.
- Què significa
x en un fitxer i què significa en un directori
x en un fitxer i què significa en un directoriAquesta 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.
chmod simbòlic
chmod simbòlicchmod (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 comaLa 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.
chmod octal
chmod octalLa 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.
- Propietat:
chown, chgrp, id i groups
chown, chgrp, id i groupsAbans de canviar la propietat, comprova qui ets:
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 # recursiuDues 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.
umask: els permisos per defecte
umask: els permisos per defecteQuan 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.
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.
- 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:
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 derootamb 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.
sudo i el principi de mínim privilegi
sudo i el principi de mínim privilegisudo 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
sudonomé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 grupveloz, no de privilegis d'administrador. - Desconfia de
chmod 777. És la resposta ràpida a unPermís denegati 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.
- 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.csvdrwxrwsr-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ó:
755a l'script: necessitaxper executar-se. No porta secrets, així quer-xper a grup i altres és inofensiu i facilita que un company l'auditi.600a 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.2775al directori:775dóna control al grupvelozsobre el contingut; el2inicial (setgid) garanteix que els fitxers nous heretin aquest grup automàticament.640al 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 denegatambchmod 777. Funciona, i obre un forat. Pregunta't primer qui hauria de tenir accés i arregla-ho amb propietari o grup. - Oblidar la
xdels directoris del camí. Sicat /srv/veloz/dades/enviaments.csvfalla tot i tenir permís de lectura sobre el fitxer, comprovals -ld /srvils -ld /srv/veloz. - Fer servir
chmod -R 755sobre un arbre mixt. Converteix en executables fitxers de dades. Aplica permisos diferents a fitxers i directoris (ambfind, 05-01). - Confondre
+ramb=r. El primer afegeix, el segon fixa l'estat exacte. usermod -Gsense-a. Reemplaça els grups secundaris en lloc d'afegir-hi i pot deixar-te fora desudo.- 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.shCausa: 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/informesDesglossament del 3770:
770: propietari i grupveloztenenrwx(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 grupvelozsense importar el grup principal de qui els creï, així que tot l'equip els pot llegir.1(sticky): encara que tothom téwsobre 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
- Què és Bash?
- Configurar el teu Entorn
- Navegació Bàsica per la Línia d'Ordres
- Entendre el Shell
- Trobar Ajuda: man, help i --help
Mòdul 2: Ordres Bàsiques de Bash
- Operacions amb Fitxers i Directoris
- Ordres de Processament de Text
- Permisos i Propietat dels Fitxers
- Redirecció i Canonades
- Comodins i Expansió de Rutes
- Historial i Dreceres de Teclat
Mòdul 3: Fonaments de Scripting
- Crear i Executar un Script
- Variables i Constants
- Operadors Bàsics
- Sentències Condicionals
- Arguments i Entrada de l'Usuari
- Cometes, Expansió i Substitució
Mòdul 4: Scripting Intermedi
- Bucles en Bash
- Funcions en Bash
- Arrays i Arrays Associatius
- Manipulació de Cadenes
- La Sentència case i els Menús Interactius
- Aritmètica i Càlculs Numèrics
Mòdul 5: Tècniques Avançades de Scripting
- Operacions Avançades amb Fitxers
- Gestió de Processos
- Gestió d'Errors i Depuració
- Expressions Regulars
- Entrada/Sortida Avançada: Descriptors i Here-Documents
- Scripts Modulars i Llibreries Reutilitzables
Mòdul 6: Treballar amb Eines Externes
Mòdul 7: Automatització i Programació
- Tasques Cron
- Automatitzar Tasques
- Scripts de Còpia i Restauració
- Monitoratge i Registre
- Serveis i Temporitzadors amb systemd
- Automatització Remota amb SSH
Mòdul 8: Bones Pràctiques i Optimització
- Escriure Codi Llegible
- Optimitzar Scripts en Bash
- Consideracions de Seguretat
- Control de Versions amb Git
- Anàlisi Estàtica amb ShellCheck i shfmt
- Proves Automatitzades amb Bats
- Portabilitat: POSIX sh enfront de Bashismes
