<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Permessi on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/permessi/</link>
        <description>Recent content in Permessi on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 27 Jan 2026 09:00:00 +0100</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/permessi/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>I permessi dei file</title>
        <link>https://www.matteobianchi.eu/p/permessi-dei-file/</link>
        <pubDate>Tue, 27 Jan 2026 09:00:00 +0100</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/permessi-dei-file/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/permessi-dei-file/cover.png" alt="Featured image of post I permessi dei file" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Il &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/modello-sicurezza-linux/&#34; &gt;DAC di Linux&lt;/a&gt; si regge sui permessi dei file. Un
permesso troppo largo è una fuga di dati silenziosa: una chiave SSH privata leggibile dal gruppo, un
file di configurazione con una password del database aperto a tutti, uno script modificabile da chi
non dovrebbe. Nessun alert suona — finché qualcuno non ne approfitta. Padroneggiare i permessi è
l&amp;rsquo;abilità più elementare e più sbagliata dell&amp;rsquo;amministrazione.&lt;/p&gt;
&lt;h2 id=&#34;leggere-ls--l&#34;&gt;Leggere &lt;code&gt;ls -l&lt;/code&gt;
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r-----  1  matteo  devs   1240  gen 10 12:00  config.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│└┬┘└┬┘└┬┘   │    │      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ │  │  └ altri: ---     │      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ │  └── gruppo: r--     │      └ gruppo proprietario
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ └───── utente: rw-     └ utente proprietario
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└ tipo: - file, d dir, l link
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Tre terzine: &lt;strong&gt;utente&lt;/strong&gt; (owner), &lt;strong&gt;gruppo&lt;/strong&gt;, &lt;strong&gt;altri&lt;/strong&gt;. Ogni terzina è &lt;code&gt;r&lt;/code&gt; (lettura), &lt;code&gt;w&lt;/code&gt;
(scrittura), &lt;code&gt;x&lt;/code&gt; (esecuzione). Il kernel sceglie &lt;em&gt;una sola&lt;/em&gt; terzina: se sei l&amp;rsquo;owner usa la prima; se no
ma sei nel gruppo, la seconda; altrimenti la terza. Non si sommano.&lt;/p&gt;
&lt;h2 id=&#34;lottale-velocemente&#34;&gt;L&amp;rsquo;ottale, velocemente
&lt;/h2&gt;&lt;p&gt;Ogni terzina è un numero: &lt;code&gt;r=4&lt;/code&gt;, &lt;code&gt;w=2&lt;/code&gt;, &lt;code&gt;x=1&lt;/code&gt;, sommati.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rwx = 7   r-x = 5   r-- = 4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rw- = 6   -wx = 3   -w- = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;644 = rw-r--r--   (file leggibile da tutti, scrivibile dall&amp;#39;owner)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;600 = rw-------   (solo l&amp;#39;owner: giusto per chiavi e segreti)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;755 = rwxr-xr-x   (eseguibile/dir accessibile a tutti)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;750 = rwxr-x---   (owner pieno, gruppo esegue, altri niente)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;chmod-e-chown-in-pratica&#34;&gt;chmod e chown in pratica
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; ~/.ssh/id_ed25519          &lt;span class=&#34;c1&#34;&gt;# chiave privata: solo tu (SSH lo pretende)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /etc/motd                  &lt;span class=&#34;c1&#34;&gt;# leggibile da tutti, scrivibile solo da root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod -R &lt;span class=&#34;nv&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;rwX,g&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;rX,o&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /srv/app      &lt;span class=&#34;c1&#34;&gt;# X = esegui solo se è dir o già eseguibile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R appuser:appgrp /srv/app     &lt;span class=&#34;c1&#34;&gt;# proprietario utente:gruppo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La &lt;code&gt;X&lt;/code&gt; maiuscola è un trucco utile: applica &lt;code&gt;x&lt;/code&gt; alle directory (che vanno attraversate) ma non ai file
di dati, evitando di rendere eseguibile per errore un file di testo.&lt;/p&gt;
&lt;h2 id=&#34;umask-i-permessi-di-default&#34;&gt;umask: i permessi di default
&lt;/h2&gt;&lt;p&gt;Quando crei un file, i suoi permessi sono &lt;code&gt;666 &amp;amp; ~umask&lt;/code&gt; (per i file) e &lt;code&gt;777 &amp;amp; ~umask&lt;/code&gt; (per le dir).
La umask &lt;em&gt;sottrae&lt;/em&gt; permessi.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;umask&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# tipico: 0022  → i nuovi file nascono 644, le dir 755&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;umask&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;027&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;# più stretto: file 640, dir 750 (gli &amp;#34;altri&amp;#34; non leggono)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Impostare &lt;code&gt;umask 027&lt;/code&gt; per gli account di sistema e i servizi fa sì che i file nuovi non siano leggibili
dal mondo per default — una difesa passiva che non richiede di ricordarsi &lt;code&gt;chmod&lt;/code&gt; ogni volta.&lt;/p&gt;
&lt;h2 id=&#34;i-file-che-devono-essere-stretti&#34;&gt;I file che DEVONO essere stretti
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# audit rapido dei permessi su file sensibili&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;%a %U:%G %n&amp;#39;&lt;/span&gt; /etc/shadow /etc/gshadow        &lt;span class=&#34;c1&#34;&gt;# atteso: 640 o 000, root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;%a %U:%G %n&amp;#39;&lt;/span&gt; ~/.ssh/id_* 2&amp;gt;/dev/null         &lt;span class=&#34;c1&#34;&gt;# atteso: 600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find / -xdev -type f -perm -0002 2&amp;gt;/dev/null          &lt;span class=&#34;c1&#34;&gt;# file scrivibili da TUTTI (world-writable): da indagare&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /etc -type f -perm -0004 -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.key&amp;#39;&lt;/span&gt; 2&amp;gt;/dev/null  &lt;span class=&#34;c1&#34;&gt;# chiavi leggibili da altri: male&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I &lt;strong&gt;world-writable&lt;/strong&gt; (&lt;code&gt;-perm -0002&lt;/code&gt;) sono il sospetto classico: un file che chiunque può modificare è
un file di cui non puoi fidarti — soprattutto se è uno script eseguito da root.&lt;/p&gt;
&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;I permessi rwx, letti bene e stretti dove serve (600 per i segreti, umask 027 come default), chiudono
la fuga di dati più banale e più comune. Restano tre bit che cambiano le regole del gioco e sono
sorgente di vulnerabilità gravi quando usati male: SUID, SGID e lo sticky bit. Sono il prossimo
capitolo, &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/permessi-speciali-suid-sgid/&#34; &gt;i permessi speciali&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
