Pagina 1 di 1

Rompicapo tra permessi script e sudo

Inviato: lun 4 gen 2021, 18:01
da joe
Come al solito avrei un rompicapo, del quale non riesco a trovare informazioni in rete, sicuramente perché non inbroccato la giusta chiave di ricerca.
Ho uno script bash che deve girare coi permessi dell'utente "news".
Tuttavia voglio lanciarlo da utente semplice.
Non vi tedio con altri dettagli sulla faccenda, se servirà aggiugerò informazioni in seguito.


sudo -u news /usr/bin/newsync.sh

Lo script newsync.sh lanciato come utente "news" realmente loggati come tale non restituisce errori.
Invece lanciandolo come "user", col comando sudo riportato sopra ritorna:

Codice: Seleziona tutto

find: .: Permesso negato
Quel "find" cerca nella HOME dell'utente "news".

Codice: Seleziona tutto

drwxr-xr-x 2 news news 4096 gen  4 17:00 /usr/lib/news/
In pratica i permessi che gli servono per farlo sono di attraversamento della directory, e forse lettura, in ogni caso quei due permessi sono presenti nella dir in questione.

La domanda è quindi:
se è vero che attraverso sudo, quel comando "find" è come se fosse eseguito dall'utente "news", che ha tutti i permessi necessari allo scopo... Perché mai restituisce Permesso negato, quando invece lanciandolo direttamente come utente "news" funziona?

Il paradosso è che siccome la directory su cui deve lavorare "find" ha permessi di lettura e attraversamento anche per gli utenti semplici, lanciando da utente semplice:

Codice: Seleziona tutto

find /usr/lib/news/ -name "*conf"
Ecco che non ritorna alcun errore.
Solo quando si usa sudo con lo script...

Aggiungo che, errore a parte, il comando find viene comunque eseguito anche quando lanciato attraverso sudo e lo script sopra...

Avreste qualche idea di cosa possa non funzionare come mi aspetterei?

Re: Rompicapo tra permessi script e sudo

Inviato: lun 4 gen 2021, 22:57
da targzeta
Ma il comando find com'è scritto dentro newsync?

Emanuele

Re: Rompicapo tra permessi script e sudo

Inviato: lun 4 gen 2021, 23:03
da gian_d
Credo che l'inghippo dipenda dal fatto che il comando sudo richiede la password a prescindere dai vincoli che ha quel comando.

ad esempio, fai questa prova:

Codice: Seleziona tutto

$ cd ~
$ mkdir pippo
ovviamente, essendo nella tua directory home, la directory pippo sarà creata

adesso, fai questa prova:

Codice: Seleziona tutto

$ cd ~
$ sudo mkdir pippo
in questo caso, prima di eseguire il comando mkdir ti chiederà la tua password. Anche se sei nella tua directory home

Detto questo, presumo che lo script, lanciato dall'utente news "erediti" l'autenticazione e quindi non richiederà la password al momento di eseguire l'azione come sudo. Forse per lo stesso motivo per cui la password viene chiesta solo la prima volta quando si eseguono in sequenza più comandi con sudo. Se invece lo script viene lanciato da pincopalla non c'è stata alcuna autenticazione né prima né all'interno dello script.

Re: Rompicapo tra permessi script e sudo

Inviato: mar 5 gen 2021, 1:08
da joe
Finalmente mi sono imbattuto in un risultato attinente in seguito ad una ricerca mirata via google, non era così banale dopotutto...
Partiamo dall'errore:

Codice: Seleziona tutto

find: .: Permesso negato

Re: Rompicapo tra permessi script e sudo

Inviato: mar 5 gen 2021, 1:09
da joe
Scusate ma non riesco a postare tutto in un solo messaggio...
Non vi siete accorti di qualche errore nel forum?

Re: Rompicapo tra permessi script e sudo

Inviato: mar 5 gen 2021, 1:13
da joe
Niente non mi posta...
probabilmente non gli vanno a genio i "code".

Metto la risposta in allegato...

Re: Rompicapo tra permessi script e sudo

Inviato: mar 5 gen 2021, 23:16
da targzeta
Ti quota la risposta, così che si possa leggere anche qui :D:
joe ha scritto:Finalmente mi sono imbattuto in un risultato attinente in seguito ad una ricerca mirata via google, non era così banale dopotutto...
Partiamo dall'errore:

Codice: Seleziona tutto

find: .: Permesso negato
In realtà newsync.sh è un wrapper che richiama altri scripts nei quali c'è il comando find. Ma la sostana non cambia.
Comunque nel primo script lanciato dal wrapper veniva lanciato così:

Codice: Seleziona tutto

FEEDS=$(/usr/bin/find $CONF_DIR -iname "*stunnel.conf" -printf "%P\n"|sed "s/\..*$//")
Ma non è importante, ho fatto prove anche diverse...

Alla fine ho cercato precisamente sta roba in google:

Codice: Seleziona tutto

"find: "".:"" permission denied"
Qualcosa è venuto fuori:
https://stackoverflow.com/questions/5791651

Praticamente il comando find, dato in pasto a sudo, fa il suo dovere sulla dir target senza problemi, e infatti il programma funzionava nonostante quell'errore.
Alla fine in qualche modo find torna alla directory PWD.
Ma siccome il tutto è lanciato dalla home dell'utente semplice, in cui l'utente "news" che sta di fatto eseguendo i comandi (a causa di sudo) non ha i permessi, ecco che find non riesce a "tornare" alla PWD e ritorna l'errore ".: permission denied" , perché non riesce a tornare in "." cioè nella dir corrente.

Soluzione fortunatamente piuttosto semplice: piazzare un bel

Codice: Seleziona tutto

cd /usr/lib/news
in testa al wrapper newsync.sh.

In questo modo quando lo si lancia con sudo da utente semplice, si assicura che tutti gli script in esso contenuti vengano eseguiti, sì come "news", ma anche come lanciati da una dir in cui lo stesso utente "news" ha pieni permessi.
L'errore in realtà non portava malfunzionamenti degli script, era solo brutto a vedersi, da quanto ho capito.

Molto strano, perché uso quel set di scripts da molti anni e solo ora è apparso questo problema. Misteri...
Sì, il problema è sollevato quando find torna nella working directory. Io ottengo questo (più esplicito) errore in current:

Codice: Seleziona tutto

find: Failed to restore initial working directory: /tmp/test: Permesso negato
Emanuele