KDE Authorization library: second step

17 luglio 2009

Hello again!

My gsoc project proceed very well. I’m happy to announce that the new kde authorization library is feature-complete and has been moved in kdereview. I’ve mailed kde-core-devel to ask feedback.

Now you can find the library at trunk/kdereview/libkauth.

Since the last blog post, I’ve added some new APIs and refined the existing. Now the API is completely documented (with doxygen).

I’ve added the cmake macros to help you create actions policies in a cross-platform way.

Now everything’s ready for the next step: extending KAction, KPushButton and other GUI elements to let developers to easily use the new API.

Bye bye :D

GNU/Linux, Unix world

KDE Authorization Library: first step

7 luglio 2009

Hello!!

The summer of code midterm evaluations arrived and so It’s time to blog about what I’ve done so far.

The new library implements an easy way to use the caller/helper pattern to perform privileged tasks without having to run the GUI as root. The authorization library is currently working well on Linux with the PolicyKit backend and the OS X backend is in progress.

The main features are:

  • Cross-platform design
  • Nice and clean API to ask the helper to execute actions.
  • Nice and clean API to write the helper.
  • The application can provide custom data (a QVariantMap) to the helper
  • The helper can return custom data to the application when the action has been executed or in the meanwhile.
  • Long running actions can report the execution progress back to the application. A progressStep() signal is provided to easily connect to a progress bar.
  • The application can ask the helper to stop execute an action.
  • The helper’s debug output from qDebug() & co. are automatically redirected to the application’s output.

You can download the code from the kde repository at playground/base/libkauth and to compile it you need Qt (of course) and polkit-qt, which is available from the repository at kdesupport/polkit-qt.

In the example/ subdirectory you’ll find some code that use the library. It’s a very stupid text editor that can open and save files to protected locations using the helper. I also provided a long-running action to show the use of asynchronous actions and actions termination.

An overview of the API follows, looking at the example application included.

Prosegui la lettura…

GNU/Linux, Generale, Unix world

Ubuntu, sudo, root, e gli utenti…

23 giugno 2009

Mi capita ogni tanto di battibeccare amichevolmente con qualche bravo amministratore unix sulla sensatezza delle impostazioni di default di Ubuntu riguardo agli utenti, le autenticazioni ecc…

Le convinzioni che vengono palesate (non solo da queste persone, ma in generale da chi non conosce il sistema) sono del tipo: “su ubuntu gli utenti normali possono fare quello che vogliono” oppure “chiunque può diventare root” o “basta sapere la password di un utente normale per diventare root”. Con questo post voglio dare una panoramica chiara su come funzionano le cose secondo le impostazioni di default di Ubuntu e chiarire le ragioni che stanno dietro a queste scelte tecniche.

A dopo il salto…

Prosegui la lettura…

GNU/Linux, Unix world

Belkin N1 Vision: il router che non c’era

11 giugno 2009

Dato che il mio caro e affezionato linksys WAG54G cominciava a rompere (a cominciare dall’alimentatore fischiante), da tempo cercavo un degno sostituto. Già che cambiavo router, volevo stare al passo con i tempi e accaparrarmi un router 802.11n, così in futuro sarei stato pronto. Questo mi permetterà di trasferire dati dall’iMac fisso, collegato via ethernet, al portatile (il prossimo venturo) collegato via wifi, a velocità molto superiori alle attuali. Un piccolo problema… il wifi n va a 300mbps teorici, ma io che me ne faccio se l’ethernet va a 100? Ogni computer che ho per la casa ha una ethernet gigabit ma tutti i router che si trovano in giro hanno switch 10/100. Anche quelli con access point 802.11n!!!

Mi sembra veramente incredibile, ma ne Linksys, ne Netgear, ne altri hanno a listino un prodotto con le seguenti caratteristiche: Modem ADSL2+, AP 802.11n, switch Gigabit Ethernet.

Un’ottimo prodotto linksys aveva wifi n e gigabit, ma non il modem. La versione con il modem d’altro canto, aveva lo switch 10/100!!! Ma come si fa?

Dopo molte peripezie (e molti mesi) sono riuscito a trovare quello che cercavo: il Belkin N1 Vision. Anche di questo esiste la versione senza modem ma per fortuna Mediaworld aveva quella con modem integrato. Il prezzo di listino era 199€ ma l’ho pagato 159€ per uno sconto del 20% del punto vendita mediaworld dove l’ho preso. Dopo il salto caratteristiche e foto.

Prosegui la lettura…

Generale , ,

Security on Mac OS X: Authorization Services APIs

3 maggio 2009

Note: This post is in english because it’s related to the Google Summer of Code.

Now in the early stages of my gsoc project I looked at how user authorization is handled by OS X. The owner-permissions model of the underlying UNIX system is not so flexible when it comes to a desktop system because permissions are bound to files and there’s no method to tell the system what a user can do instead of which files it can read/write. Another problem is that in order to do administrative tasks, a program has to be run as root, with all the risks that this involves.

For this reason Mac OS X implements a policy-based authorization system. Every time that an application needs to do something that require privileges, it will ask for them to the system, which will decide if grant the privileges or not. This decision will be based on a policy database which the system administrator can edit to tune the system’s security policies.

The APIs used by the applications to access those features are included in the Security.framework system package, and are called Authorization Services. Using this API, an application can ask the system if it has the authorization to do something. The Security Server will look at the authorization database and could ask the user to authenticate. For example if the rule set for a specific right is “authenticate-admin”, the user will be asked for a username and password of an administrator.

But now that the application know that it can, for example, write to a system file, how can it actually write it? It’s still a process running as a simple user and for a unix process there’s no way to change it’s uid if it’s not already root. For this reason, the application needs to call an external binary which has to be run as root and will do the job. This approach is called “caller/helper” and its very common on many systems. The last missing piece is: how to launch a process with high privileges? Child processes inherits the uid from the parent, so a simple fork() won’t work. In Mac OS X 10.3 and earlier, apple suggested for this purpose the use of the setuid binary. An executable file owned by root, with the setuid bit will run as the owner. This approach had many security risks related to the setuid bit and is now deprecated. The new solution, introduced in OS X 10.4, is the Launch Daemon. Using it, you can launch a process with root privileges that will (if authorized) do the restricted operation.

The example included is a trivial text editor that can open and save files of other users. You can find the source code here:

Link to the example source code

A step-by-step comment of the code follows.

Prosegui la lettura…

Apple & Macintosh, Objective-C

Google Summer of Code 2009: ci sono anch’io!!

28 aprile 2009

E’ con estrema gioia che annuncio su questo famosissimo blog l’allegra novella: sono stato accettato al Google Summer of Code 2009!

Per chi non lo sapesse, si tratta di un’iniziativa che google mette in piedi da qualche anno, per attirare studenti verso lo sviluppo di progetti open source. Quello che dovrò fare, assieme agli altri 1000 partecipanti, è scrivere codice per un importante progetto open source in cambio di alcune pecunie (parecchie in realtà) durante il periodo estivo (giugno-agosto).

Ognuno degli aspiranti GSoCers (come ci chiamano in gergo) ha dovuto presentare un piano di progetto su cosa voleva fare e in quali tempistiche, ed il team del rispettivo progetto (nel mio caso KDE) ha deciso quali accettare.

Il 23 aprile scorso è stata pubblicata la lista ufficiale degli studenti accettati. La lista degli studenti per KDE la potete trovare qui.

Cosa dovrò fare io? Il mio progetto ha a che fare (guardacaso) anche con il Mac, e in particolare dovrò scrivere una API multipiattaforma per l’autenticazione e l’autorizzazione degli utenti, per quelle applicazioni che necessitano di privilegi per svolgere il loro lavoro. Il backend per linux userà PolicyKit, uno standard di freedesktop già abbastanza affermato, mentre i backend per Mac e Windows useranno le API native dei rispettivi sistemi.

La specifica completa del mio lavoro la potete leggere in questo PDF. Si tratta del documento che ho spedito per la fase di selezione, sulla base del quale il team di KDE ha scelto di darmi fiducia.

Un ringraziamento speciale va a Dario Freddi, lo sviluppatore principale di polkit-qt nonchè colui che ha voluto farmi da mentor permettendomi di partecipare. Ringrazio anche Davide Bettio, che ha parlato di me a Dario. E grazie anche a tutti quanti già che ci siamo :D

Mi aspetta un’estate di programmazione a pieno ritmo (come tutte le precedenti del resto), e questa volta sarò pure pagato!! Evviva XD

GNU/Linux, Generale, Unix world , ,

Sicurezza su Mac OS X parte 1: I permessi Unix

23 febbraio 2009

Ecco dopo un po’ di pausa un altro post su questo frequentatissimo blog :P

Ho pensato di fare una carrellata sui principali sistemi di sicurezza implementati in Mac OS X, dividendoli in varie parti per non appesantire troppo il discorso, perchè ci sono parecchi meccanismi nascosti eppure sempre in funzione di cui l’utente abituale non si accorge nemmeno, ma che contribuiscono a rendere OS X un sistema di cui fidarsi (il sistema di cui non fidarsi invece è….).

Inizio dalla madre di tutti i sistemi di sicurezza, ovvero il modello di permessi di Unix. Tutti sanno che Mac OS X è un sistema Unix, ma l’utente è raramente coinvolto nelle faccende di basso livello e quindi un po’ di chiarezza non fa male. Per i veterani di Unix questo articolo sembrerà veramente molto da newbie, ma viceversa un veterano di Mac OS X non è detto che debba sapere tutto questo per usare bene il sistema.

A dopo il salto.

Prosegui la lettura…

Apple & Macintosh, Unix world , ,

Rilasciata Debian 5.0 “Lenny”

17 febbraio 2009

Ok so che il post è fortemente in ritardo ma mi scuserete. Il 14 febbraio (si proprio a San Valentino) è stata rilasciata l’ultima versione stabile di una delle distribuzioni linux più anziane ancora esistenti. Si tratta di Debian, che passa alla versione 5.0 dopo ben due anni di sviluppo.

Trovate le note di rilascio in lingua italiana qui.

GNU/Linux ,

Pubblicata la pagina sul mio progetto Perceel

13 febbraio 2009

Prima del blog, su questo sito era ospitata l’home page del progetto che avevo portato all’esame di stato l’anno scorso. Il nome del progetto è Perceel e si tratta di un programma che disegna particolari grafici utili per l’analisi di sistemi elettronici. Tutti i dettagli li trovate nella nuova pagina che ho appena pubblicato per sostituire quella che era sopravvissuta dall’era pre-blog. Il link alla pagina è bello in evidenza nella barra dei link a inizio pagina.

Anche se il progetto è ormai fermo e non verrà ulteriormente sviluppato, mi dispiaceva metterlo a tacere completamente.

Generale

Security Update 2009-001 e Java Update 3 per Mac OS X

13 febbraio 2009

Stamattina Apple ha rilasciato il primo Security Update del 2009 consigliato a tutti gli utenti di OS X 10.5 e 10.4 sia client che server. In particolare risolve quel bug di Safari scoperto il mese scorso a proposito della gestione degli RSS.
Terzo update anche per Java sia per Tiger che per Leopard, anch’esso riguardante sicurezza e stabilità.
Entrambi i download sono disponibili tramite il programma di sistema Software Update o da http://www.apple.com/downloads/macosx/apple/.

Apple & Macintosh , ,