Rompicapo tra permessi script e sudo

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3326
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Rompicapo tra permessi script e sudo

Messaggio 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?

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6576
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Rompicapo tra permessi script e sudo

Messaggio da targzeta »

Ma il comando find com'è scritto dentro newsync?

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

gian_d
Linux 2.x
Linux 2.x
Messaggi: 369
Iscritto il: mer 16 lug 2014, 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 5.13.xx
Desktop: KDE 5.22
Località: Sardinia
Contatta:

Re: Rompicapo tra permessi script e sudo

Messaggio 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.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3326
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Rompicapo tra permessi script e sudo

Messaggio 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

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3326
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Rompicapo tra permessi script e sudo

Messaggio da joe »

Scusate ma non riesco a postare tutto in un solo messaggio...
Non vi siete accorti di qualche errore nel forum?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3326
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Rompicapo tra permessi script e sudo

Messaggio da joe »

Niente non mi posta...
probabilmente non gli vanno a genio i "code".

Metto la risposta in allegato...
Allegati
suofind.txt
(1.85 KiB) Scaricato 37 volte

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6576
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Rompicapo tra permessi script e sudo

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi