Da molti giorni ormai kernel.org, http://linux.com e http://www.linuxfoundation.org sono inaccessibilii per manutenzione a causa di problemi di security.
In un articolo su The Register, si racconta che negli ultimi tempi ci sono state intrusioni anche in altri autorevoli siti che distribuiscono software open source come apache.org, violato in aprile 2010, e savannah.gnu.org, repository di GNU, violato nel dicembre 2010.
Questo significa che e` importante controllare l'autenticita` del software anche quando lo si scarica da siti autorevoli e percio` considerati sicuri. Quasi sempre il software distribuito da questi siti e` dotato di firma digitale: bisogna controllarla usando gpg.
Il caso piu` frequente e` che la firma sia in un file separato rispetto al software, con estensione .asc. Per verificare la firma devo scaricare anche questo file:
wget http://sito.autorevole.ma.meglio.controllare/pacchetto.software wget http://sito.autorevole.ma.meglio.controllare/pacchetto.software.asc
A questo punto per verificare la firma:
gpg --verify software.pkg.asc
Se non avete mai scaricato la chiave pubblica di chi ha firmato il software otterrete:
gpg: Signature made Fri 09 Sep 2011 04:34:49 PM CEST using RSA key ID nnn gpg: Can't check signature: public key not found
In questo caso si deve scaricare la chiave pubblica con ID nnn da un qualunque keyserver:
gpg --keyserver nome.di.un.keyserver --recv-keys nnn
Poi si usa di nuovo il comando precedente:
gpg --verify software.pkg.asc
Se tutto va bene dovremmo ottenere il responso "Good signature" (oltre ad altre informazioni).
I keyserver sono sincronizzati tra loro, quindi uno vale l'altro. Ecco da wikipedia l'elenco dei piu` usati (notare che a volte il protocollo e` hkp, ma comunque pare che funzioni anche senza specificarlo):
Esiste anche il keyserver italiano del PLUG: http://keyserver.linux.it.
Ecco un esempio reale:
$ wget http://apache.bfeel.it//httpd/httpd-2.2.21.tar.gz .... 2011-09-19 10:35:06 (9.81 MB/s) - `httpd-2.2.21.tar.gz' saved $ wget http://apache.bfeel.it//httpd/httpd-2.2.21.tar.gz.asc .... 2011-09-19 10:35:31 (11.0 MB/s) - `httpd-2.2.21.tar.gz.asc' saved $ gpg --verify httpd-2.2.21.tar.gz.asc gpg: Signature made Fri 09 Sep 2011 04:34:49 PM CEST using RSA key ID 60C5442D gpg: Can't check signature: public key not found $ gpg --keyserver pgp.mit.edu --recv-keys 60C5442D gpg: requesting key 60C5442D from hkp server pgp.mit.edu gpg: key B55D9977: public key "William A. Rowe, Jr. <wrowe@rowe-clan.net>" imported gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) $ gpg --verify httpd-2.2.21.tar.gz.asc gpg: Signature made Fri 09 Sep 2011 04:34:49 PM CEST using RSA key ID 60C5442D gpg: Good signature from "William A. Rowe, Jr. <wrowe@rowe-clan.net>" gpg: aka "William A. Rowe, Jr. <wrowe@apache.org>" gpg: aka "William A. Rowe, Jr. <wrowe@vmware.com>" gpg: aka "William A. Rowe, Jr. <william.rowe@springsource.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: B1B9 6F45 DFBD CCF9 7401 9235 193F 180A B55D 9977 Subkey fingerprint: 627B E9D7 D7C6 9D30 A2F5 B008 5593 BCA9 60C5 442DVediamo che la firma digitale e` valida (Good signature), anche se la chiave pubblica non e` garantita da una certification authority o da un'altra firma che consideriamo affidabile.
Nel caso si utilizzino i packages di redhat, il controllo della firma si
fa con rpm -K nome_package
. Se la chiave non e` presente nel database di rpm, si deve scaricarla da un keyserver e importarla con rmp --import nomefile
.
Ecco un esempio:
$ wget ftp://fr2.rpmfind.net/linux/dag/fedora/3/en/i386/dag/RPMS/xosview-1.8.3-1.fc3.rf.i386.rpm ...... 11:56:54 (894.58 KB/s) - `xosview-1.8.3-1.fc3.rf.i386.rpm' saved [101763] $ rpm -K xosview-1.8.3-1.fc3.rf.i386.rpm xosview-1.8.3-1.fc3.rf.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#6b8d79e6)
A questo punto si deve andare col browser su un keyserver dotato di interfaccia web (ad es. http://keyserver.linux.it/) e estrarre la chiave 6b8d79e6, copiandola in un file. Va fatta attenzione ad anteporre 0x all'ID esadecimale della chiave da inserire nella maschera di ricerca.
In genere il risultato della ricerca propone un link che punta alla chiave in formato pem:
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: SKS 1.1.1 mQGiBD9JMT0RBAC9Q2B0AloUMTxaK73sD0cOu1MMdD8yuDagbMlDtUYA1aGeJVO6TV02JLGr 67OBY+UkYuC1c3PUwmb3+jakZd5bW1L8E2L705wS0129xQOZPz6J+alF5rTzVkiefg8ch1yE cMayK20NdyOmhDGXQXNQS8OJFLTIC6bJs+7MZL83/wCg3cG33q7MWHm3IpJb+6QKpB9YH58D /2WjPDK+7YIky/JbFBT4JPgTSBy611+bLqHA6PXq39tzY6un8KDznAMNtm+NAsr6FEG8PHe4 06+tbgd7tBkecz3HPX8nR5v0JtDT+gzN8fM3kAiAzjCHUAFWVAMAZLr5TXuoq4lGTTxvZbwT jZfyjCm7gIieCu8+qnPWh6hm30NgA/0ZyEHG6I4rOWqPks4vZuD+wlp5XL8moBXEKfEVOMh2 MCNDRGnvVHu1P3eDoHOooVMt9sWrGcgxpYuupPNL4Uf6B6smiLlH6D4tEg+qCxC17zABI557 2XJTJ170JklZJrPGtnkPrrKMamnN9MU4RjGmjh9JZPa7rKjZHyWP/z/CBrQ1RGFnIFdpZWVy cyAoRGFnIEFwdCBSZXBvc2l0b3J5IHYxLjApIDxkYWdAd2llZXJzLmNvbT6IRgQQEQIABgUC P0kxYAAKCRCiPaJc+qeZ6+c4AJ9FBpqB4xwRIdUTX5FK4/e3E9S+gQCgkC04eieD7dLNU1Jk uf+Dv8uN/D6IRgQQEQIABgUCQDGJEwAKCRA08qm92SVBjTq7AJ9BB+z/KfUrGbCxRk+DXMmB C+x/tgCdHt3Zk163FW5TuLLhvCD5Q/8Tf0uIRgQQEQIABgUCQDJX3wAKCRCMYHtXouNMgGY8 AKCHc62MIHpOAtDRCKt4BqwOOYu0AQCfS7WCaAFGdQXlr8fuEP+qB7y6HwiIRgQSEQIABgUC QMklswAKCRCgOnFnLIp2kfHoAJoCf+b0VT6gWjC1ZEDqDTPOi2GJbACePFdwnFmhQvIF7A5h o90r5+nGfOCIWQQTEQIAGQUCP0kxPQQLBwMCAxUCAwMWAgECHgECF4AACgkQog5SFGuNeeYv DQCeKHSThIq/WzFBXtJOnQkJGSqAoHoAnRtsJVWYmzYKHqzkRx1qAzL18Sd0uQENBD9JMT8Q BACj1QzRptL6hbpWl5DdQ2T+3ekEjJGtllCwt4Mwt/yOHDhzLe8SzUNyYxTXUL4TPfFvVW9/ j8WOkNGvffbs7g84k7a5h/+lIJTTlP9V9NruDt1dlrBe+mWF6eCY55OFHjb6nOIkcJwKxRd3 nGlWnLsz0ce9Hjrg6lMrn0lPsMV6swADBQP9H42sss6mlqnJEFA97Fl3V9s+7UVJoAIA5uSV XxEOwVohVq7uECQRvWzif6tzOY+vHkUxOBRvD6oIU6tlmuG3WByKyA1d0MTqMr3eWieSYf/L n5VA9NuD7NwjFA1kLkoDwfSbsF51LppTMkUggzwgvwE46MB6yyuqAVI1kReAWw+IRgQYEQIA BgUCP0kxPwAKCRCiDlIUa4155oktAKDAzm9QYbDpk6SrQhkSFy016BjEBACeJU1hpElFnUZC L4yKj4EuLnlo8kc= =hCEn -----END PGP PUBLIC KEY BLOCK-----
Si copia la chiave in un file (es. chiave.pem) e poi, da root, si usa
rpm --import chiave.pem
per importare la chiave.
A questo punto si puo` controllare la firma digitale:
$ rpm -K xosview-1.8.3-1.fc3.rf.i386.rpm xosview-1.8.3-1.fc3.rf.i386.rpm: (sha1) dsa sha1 md5 gpg OK
Come si vede, adesso anche la chiave gpg risulta ok.
Nel caso di un pacchetto scaricato da un repository di yum le cose sono in parte automatizzate: nelle definizioni del repository (si vedano i files .repo in /etc/yum.repos.d/) si puo` richiedere il controllo della firma gpg (gpgcheck=1) e possono essere indicate delle URL o dei file che contengono le chiavi da importare nel database RPM (gpgkey url-list).
Peccato che sia i repository di scientific linux, sia epel e atrpms, che sono spesso da noi utilizzati, fino a SL 5 per default abbiano impostato gpgcheck=0, che quindi andrebbe cambiato a mano nei file *.repo in /etc/yum.repos.d/
Per fortuna da SL 6 il default e` forzare il controllo.