tux-banner

Come consentire la scrittura di un file di sistema ad un utente ordinario

Più che di svelare chissà quale segreto, l’intento di questo post è di costituire un quasi memorandum per amministratori (e non solo).

Parliamo di scrittura, non necessariamente di condivisione della proprietà del file: pertanto sono esclusi gruppi più o meno esoterici, ACL o altri sistemi basati su privilegi su filesystem.

Ovviamente la soluzione residua è un’assegnazione di diritti amministrativi al processo di scrittura, e quindi una soluzione basata su sudoers.

Naturalmente occorre trovare una mediazione tra rispetto della sicurezza del resto del sistema e una certa flessibilità del meccanismo.

La sicurezza la imponiamo fissando nella lista comandi della regola sudoers il nome assoluto del particolare file di sistema su cui delegare il privilegio di scrittura.

La flessibilità del meccanismo la otteniamo considerando la sorgente dei dato non originante da altro argomento di un comando da attivare con sudo (vedi cp), ma invero dallo standard input del comando da attivare, implicando quindi un ulteriore processo di delega.

Per ragioni di opportunità e di semplicità di realizzazione in termini di sintassi sudoers la scelta del comando ricade su /usr/bin/tee.

Ponendo in /etc/sudoers la seguente:

utente ALL = (root) NOPASSWD: /usr/bin/tee /file/protetto

l’utente ordinario potrà modificare il file di sistema (protetto) assumendo temporaneamente i privilegi amministrativi; dovrà  quindi scrivere:

cat /file/sorgente | sudo '/usr/bin/tee /file/protetto' >/dev/null

Ovviamente la cosa potrà estendersi oltre il contesto locale con:

cat /file/sorgente/locale | ssh -t utente@host.remoto sudo /usr/bin/tee /file/protetto/su/host/remoto

dove opzione -t è fondamentale perché ssh possa lavorare in pipe eseguendo un sudo remotamente.

Speriamo di aver fornito un contributo per risolvere uno dei più  classici problemi di sicurezza di un sistema.