View Full Version : [C] Modalita' di creazione di una pipe
Ed_Bunker
02-08-2004, 11:17
Ciao, vorrei creare una pipe e fare in modo che solo io la possa aprire in lettura mentre sia possibile per tutti aprirla in scrittura (Ma non in lettura). E' possibile ? Ho visto (Sommariamanete...:p ) sul MAN che quando si crea un pipe e si indicano certi diritti a questi viene sottratta la maschera dei bit "standard" che, solitamente, e' impostata a 022 (Ma che puo' essere comunque modificata utilizzando la funzione umask). Quello che mi chiedevo e' se, inoltre, non esistono delle macro per rendere tutto cio' piu' "intuitivo". E' possibile ad esempio utilizzare le macro O_RDONLY etc. anche in fase di creazione della pipe ?
thks
ilsensine
02-08-2004, 11:21
mkfifo + chmod
Ed_Bunker
02-08-2004, 11:25
Originariamente inviato da ilsensine
mkfifo + chmod
Risposta lapidaria...
;)
Ed_Bunker
04-08-2004, 01:48
Continuo ad avere qualche problema. Siccome dai bit che indico io all'atto della creazione della pipe (Mediante apposite macro) vengono sottratti quelli della variabile (?) 'mask' ho utilizzato la funzione umask per settare tali bit a 000. E' scorretto oppure e' plausibile farlo ?!?!
Ho quindi creato una pipe e vorrei fare in modo che solo io (Non utente ma processo !) possa aprirla in lettura mentre chiunque altro (Tutti gli altri processsi) possa aprirla in lettura.
Ho provato facendo:
mknod("jonny.p", S_IFIFO | S_ISUID | S_IWUSR | S_IRGRP | S_IROTH, -1)
Ovviamente tali impostazioni influenzano solo i diritti degli utenti e nulla in funzione dei processi. Esiste un modo per fare questo ?!?
thks
ilsensine
04-08-2004, 08:48
Originariamente inviato da Ed_Bunker
Ovviamente tali impostazioni influenzano solo i diritti degli utenti e nulla in funzione dei processi. Esiste un modo per fare questo ?!?
Non direttamente, ma indirettamente. Definisci un profilo utente dedicato all'accesso in lettura al pipe; quindi, rendi il programma che accede al pipe proprietà di quell'utente, e imposta il flag suid.
Ed_Bunker
04-08-2004, 11:18
Originariamente inviato da ilsensine
Non direttamente, ma indirettamente. Definisci un profilo utente dedicato all'accesso in lettura al pipe; quindi, rendi il programma che accede al pipe proprietà di quell'utente, e imposta il flag suid.
E dovrei creare un profilo utente ad hoc per l'esecuzione del programma !? A me servirebbe qualcosa che mi permetta la massima portabilita'. Se facessi girare lo stesso proramma su un' altra macchina dovrei creare nuovamente un nuovo p.u. ?!
Non sarebbe possibile fare in modo che sia il creatore della pipe (Il processo che la crea ed in futuro la eliminera') il solo processo ad avere la possibilita' di accedervi on lettura mentre tutti gli altri potranno scriverci ??!
thks
ilsensine
04-08-2004, 11:36
Originariamente inviato da Ed_Bunker
E dovrei creare un profilo utente ad hoc per l'esecuzione del programma !? A me servirebbe qualcosa che mi permetta la massima portabilita'. Se facessi girare lo stesso proramma su un' altra macchina dovrei creare nuovamente un nuovo p.u. ?!
Usa uno dei profili standard del sistema (daemon, adm...)
Non sarebbe possibile fare in modo che sia il creatore della pipe (Il processo che la crea ed in futuro la eliminera') il solo processo ad avere la possibilita' di accedervi on lettura mentre tutti gli altri potranno scriverci ??!
E' un assurdo logico: vuoi che un programma che gira con i privilegi dell'utente che lo ha lanciato, compia operazioni che devono essere impedite all'utente stesso? Vuol dire che il programma gira con privilegi superiori, da qui la necessità del suid.
Ed_Bunker
04-08-2004, 12:12
Originariamente inviato da ilsensine
Usa uno dei profili standard del sistema (daemon, adm...)
E' un assurdo logico: vuoi che un programma che gira con i privilegi dell'utente che lo ha lanciato, compia operazioni che devono essere impedite all'utente stesso? Vuol dire che il programma gira con privilegi superiori, da qui la necessità del suid.
Pero' vorrei che il programma potesse essere lanciato da un qualsiasi utente. Mentre secondo cio' che hai suggerito sarebbe possibile lanciarlo soltanto come adm (ad esempio) ? Come e' possibile rendere un programma di esclusiva "proprieta'" di un certo utente !?? Inoltre a quale scopo viene settato il suid ?
ilsensine
04-08-2004, 12:28
Normalmente un programma viene eseguito con i privilegi dell'utente che lo ha lanciato. E' una norma elementare di sicurezza.
Alcuni programmi possono essere eseguiti con i privilegi del "proprietario" del file eseguibile, e cambiare privilegio in corso di esecuzione se necessario: sono i programmi suid, come ad es. pppd.
Per impostare l'attributo suid è sufficiente un chmod +s effettuato dal proprietario del file o da root; per modificarne il proprietario occorre usare chown.
E' ovvio che il tuo programma, avendo privilegi superiori a quelli dell'utente, dovrà essere installato da root.
Una soluzione alternativa che forse puoi considerare è usare i socket: un server socket in ascolto su una porta è una risorsa non condivisibile, può essere aperto solo da un processo.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.