A livello di programmazione che richiede diritti elevati in Linux
-
03-10-2019 - |
Domanda
( Questa domanda è identico titolo, ma il corpo questione si chiede in punto di script di vista, ad esempio su -c
, non ingannare questo a quello)
Ho un'applicazione Qt GUI che deve eseguire alcune operazioni sui file in / etc in base all'input dell'utente. Una possibilità sarebbe probabilmente da utilizzare system()
con sudo
, ma anche questo richiede pasticciano con il file sudoers
a un certo punto. Mi piacerebbe anche non fare system()
più di script hack per modificare i file, ma le operazioni di file corretto.
Qual è il modo migliore per elevare il livello di codice i miei diritti di applicazioni per fare questo?
Edit: come bonus, sarebbe bello se avrebbe funzionato su Maemo / Meego / altri palmari anche (per quanto ne so PolicyKit non è disponibile lì ..)
Soluzione
Vorrei scrivere un programma separato del tutto. Qualcosa sulla falsariga di questo filosofia . In sostanza - scrivere un semplice programma che fa esattamente quello che ti serve, e controllare il suo comportamento con i permessi dei file sul filesystem. Principalmente,
Do il meno possibile nei programmi setuid .
Un programma setuid deve operare in un ambiente molto pericoloso: un utente è sotto il controllo completo dei suoi fds, args, environ, CWD, TTY, rlimits, temporizzatori, segnali, e altro ancora. Persino peggio, l'elenco dei prodotti controllati varia da UNIX di un fornitore a quello successivo, in modo da è molto difficile da scrivere portatile codice che pulisce tutto.
dei venti sendmail più recente buchi di sicurezza, undici hanno lavorato solo perché l'intero sistema sendmail è setuid.
Un solo programma qmail è setuid: qmail-coda. Il suo unico scopo è quello di aggiungere un nuovo messaggio di posta elettronica per l'uscente coda.
E,
Do il meno possibile come root .
L'intero sistema sendmail viene eseguito come radice, quindi non c'è modo che la sua gli errori possono essere catturati dal il sistema operativo del built-in protezioni. Al contrario, solo due programmi qmail, qmail-start e qmail-lspawn, eseguito come root.
Altri suggerimenti
Si potrebbe utilizzare PolicyKit, che sta gradualmente sostituendo gksu / su / sudo, in particolare su Ubuntu, per la sua sicurezza e la grana fine più alto controllo a causa di elevare azioni , non l'intero programma.
Crea un aiutante setuid programma che fa solo le cose che vuoi fare, e < a href = "http://en.wikipedia.org/wiki/Fork-exec" rel = "nofollow noreferrer"> fork / exec l'applicazione da esso. Poi cadere i privilegi nel processo figlio. Entrambe le applicazioni possono comunicare sulla Bocchetta, o qualcosa di simile.
avere in mente che i programmi setuid sono un rischio per la sicurezza e così si dovrebbe essere molto attenti in sede di attuazione uno.