<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Capabilities on Marcello Barnaba</title>
    <link>https://sindro.me/it/tags/capabilities/</link>
    <description>Recent content in Capabilities on Marcello Barnaba</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Thu, 07 Jul 2011 14:00:00 +0000</lastBuildDate>
    <atom:link href="https://sindro.me/it/tags/capabilities/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Fare il bind della porta 80/TCP come non-root sul server di sviluppo</title>
      <link>https://sindro.me/it/posts/2011-07-07-binding-port-80-for-your-development-application-server/</link>
      <pubDate>Thu, 07 Jul 2011 14:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-07-07-binding-port-80-for-your-development-application-server/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2011-07-07-binding-port-80-for-your-development-application-server/neo-tux.png&#34; alt=&#34;Neo Tux&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quindi hai una VM Linux che usi per lo sviluppo, perché vuoi replicare&#xA;l&amp;rsquo;ambiente di produzione il più fedelmente possibile. Hai molte applicazioni da&#xA;gestire, devono girare tutte contemporaneamente perché sono dei bei web service&#xA;REST JSON.&lt;/p&gt;&#xA;&lt;p&gt;Sei stanchissimo di ricordarti quale hai messo sulla porta &lt;code&gt;8081&lt;/code&gt;, e i tuoi file&#xA;di configurazione stanno diventando un vero casino. Quindi configuri degli alias&#xA;per gli indirizzi IP sull&amp;rsquo;interfaccia di rete e decidi di assegnare persino dei&#xA;nomi host — &lt;code&gt;/etc/hosts&lt;/code&gt; va benissimo — per ogni applicazione.&lt;/p&gt;&#xA;&lt;p&gt;Poi, in una configurazione del genere, perché dovresti ancora farle girare su&#xA;porte superiori a &lt;code&gt;1024&lt;/code&gt;? Non sarebbe fantastico digitare il nome&#xA;dell&amp;rsquo;applicazione nella barra degli indirizzi del browser? Sì che lo sarebbe, ma&#xA;è meglio non farle girare come &lt;code&gt;root&lt;/code&gt;, comunque.&lt;/p&gt;&#xA;&lt;p&gt;La soluzione sono le &lt;a href=&#34;http://www.kernel.org/doc/man-pages/online/pages/man7/capabilities.7.html&#34; target=&#34;_blank&#34;&gt;Linux&#xA;capabilities&lt;/a&gt;&#xA;(vedi anche &lt;a href=&#34;http://www.friedhoff.org/posixfilecaps.html&#34; target=&#34;_blank&#34;&gt;qui&lt;/a&gt;). Quella che ci&#xA;interessa è &lt;code&gt;cap_net_bind_service&lt;/code&gt;: dà a un processo il diritto di fare il bind&#xA;su porte well-known (&amp;lt; 1024). Se usi un linguaggio interpretato, ovviamente&#xA;dovrai aggiungere la capability all&amp;rsquo;interprete stesso. Ecco perché c&amp;rsquo;è&#xA;&lt;strong&gt;sviluppo&lt;/strong&gt; nel titolo di questo articolo — non dovresti configurare questo su&#xA;un server di produzione, se non sai cosa stai facendo.&lt;/p&gt;&#xA;&lt;p&gt;Un&amp;rsquo;ultima stranezza: se ti capita di fare &lt;code&gt;dlopen()&lt;/code&gt; su shared object che&#xA;linkano dinamicamente verso librerie fuori dai path canonici, non puoi caricarli&#xA;tramite &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; (ad es. il &lt;code&gt;SYBASE.sh&lt;/code&gt;) perché viene ignorato per i&#xA;processi con &lt;code&gt;setcap&lt;/code&gt;. Meglio spostare i path delle librerie in uno snippet&#xA;dentro &lt;code&gt;/etc/ld.so.conf.d&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;&#xA;&lt;p&gt;Assumendo che tu sia l&amp;rsquo;ultimo e più grande sviluppatore Rails, dovresti&#xA;diventare root — o usare sudo, come preferisci — e&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
