Sicuro di usare setuid senza alcun input?

0

Ho uno script di shell che sincronizza alcuni file da una fonte remota e ho un tipico setup del server HTTP. C'è un utente che possiede i file serviti dal server HTTP e un utente che esegue il server HTTP - entrambi appartengono allo stesso gruppo.

Voglio che i file sincronizzati siano di proprietà dell'utente "proprietario" e non voglio che l'utente del server HTTP sia in grado di scrivere su di essi. Tuttavia, voglio che l'utente del server HTTP sia in grado di richiamare lo script di sincronizzazione.

Un'opzione è quella di avvolgere lo script della shell in una piccola applicazione C e usare setuid in modo che l'utente del server HTTP possa eseguirlo come utente "proprietario".

Dato questo:

  • Non ci sarà alcun input per lo script - la posizione remota, il percorso di destinazione, ecc. sono tutti costanti.
  • Lo script setuid non sarà di proprietà / eseguito da root.

È una cosa sicura e ragionevole da fare?

Modifica:

Per spiegare le cose, puoi usare i seguenti nomi:

  • deploy-user: l'utente che dovrebbe possedere i file
  • www-user: l'utente che esegue il server HTTP
  • www-group: il gruppo deploy-user e www-user appartengono a
  • sync.sh: lo script che aggiorna il file
  • sync.txt: il file di destinazione
posta thexacre 07.12.2014 - 00:34
fonte

2 risposte

1

Se comprendo correttamente la tua domanda, credo che la soluzione più semplice sia:

chgrp <user> /path/to/syncfile

Tutto ciò che stai cercando di fare può essere realizzato con chmod , chgroup o chown.
(* non abbastanza rep per collegamento ipertestuale > 2 volte)

Questo comando sopra manterrà il file di sincronizzazione di proprietà del proprietario, dando al contempo la proprietà del gruppo all'utente. Le autorizzazioni per i gruppi di utenti devono essere impostate correttamente con chmod affinché funzioni. ad es.

chmod 754 syncfile.foo

o

chmod 750 syncfile.foo

Dove 754 dà + rwx al proprietario, + r-x al gruppo di file (utente), + r a tutti gli altri ..
O dove 750 dà lo stesso, ma non dà a tutti gli altri permessi di lettura.

    
risposta data 08.12.2014 - 07:09
fonte
1

(non è così) Risposta completa:

#chmod 1770 /directory/containing/syncfile.txts/
#chmod 1750 /directory/containing/syncfile.sh/
#chgrp www-user /path/to/syncfile.sh

chmod -
1: Sticky Bit (solo il proprietario può cancellare o modificare)
7: distribuire -user + rwx
7: utenti di gruppo (www-user) + rwx
0: tutti gli altri non ricevono alcuna lettura, scrittura o esecuzione.

L'impostazione del bit appiccicoso nella seconda directory è ridondante perché solo il proprietario avrà comunque le autorizzazioni di modifica, ma perché no.

chgrp -
Fornisce la proprietà del gruppo www-user syncfile.sh.

    
risposta data 08.12.2014 - 09:40
fonte

Leggi altre domande sui tag