El Fri, Sep 16, 2016 at 12:27:55AM +0200, Alex Muntada deia: > Narcis Garcia: > > > Ja he avançat en el problema (que no en la solució): CUPS executa el > > controlador /etc/cups/interfaces/Epson1 engabiat d'alguna manera, de > > manera que només té accés a alguns directoris. > > > > Això és el què obtinc si el programet només executa "ls /": > > ls: no s’ha pogut obrir el directori /: S’ha denegat el permís > > > > I això per fi he aconseguit si executa sudo -n -u UnUsuari /bin/bash -c > > "ls /" > > sudo: no s'ha pogut obrir /etc/sudoers: S’ha denegat el permís > > sudo: no valid sudoers sources found, quitting > > sudo: unable to initialize policy plugin > > Fa pudor d'apparmor: > > $ apt-file search /etc/apparmor.d/ | grep cups > apparmor: /etc/apparmor.d/abstractions/cups-client > cups-browsed: /etc/apparmor.d/usr.sbin.cups-browsed > cups-daemon: /etc/apparmor.d/usr.sbin.cupsd > > Mira quines restriccions té /etc/apparmor.d/usr.sbin.cupsd perquè > m'ensumo que la cosa va per aquí. > > Salut, > Alex >
No conec gaire apparmour, però no sé si aquestos s'aplicarien a l'script de /etc/cups/interfaces. Cupsd no executara l'script d'interfície directament (crec, podria segons casos, sembla). El que fa és generar un profile d'apparmor (en un fitxer temporal) i cridar a /usr/lib/cups/daemon/cups-exec amb el profile i l'script perquè el cridi ell. cups-exec crea un sandbox amb el profile i llavors fa l'exec de l'script El fitxer temporal amb el profile sembla que permet llegir els fitxers de la tasca d'impressió actual (i escriure alguns altres i fer algunes connexions, segons la configuració concreta dels directoris que usa cupsd). No he investigat en detall però possiblement els fitxers de claus públiques de servidors no es poden llegir i ssh (si l'arribes a poder executar) ho té fotut. S'hauria de mirar amb lupa. start_job() crea un profile d'apparmor en un fitxer temporal (a a partir de text hardcoded al programa). https://github.com/apple/cups/blob/master/scheduler/job.c#L4711 https://github.com/apple/cups/blob/master/scheduler/process.c#L72 Després start_job() crida continueJob() https://github.com/apple/cups/blob/master/scheduler/job.c#L482 que crida cupsdStartProcess() https://github.com/apple/cups/blob/master/scheduler/job.c#L1198 https://github.com/apple/cups/blob/master/scheduler/process.c#L450 que decideix si crida cups-exec basat en opcions de compilació i si té profile (sembla que sempre en té, de manera que sempre deu cridar cups_exec) https://github.com/apple/cups/blob/master/scheduler/process.c#L548 cups-exec "si cal" crea un sandbox per executar el procés https://github.com/apple/cups/blob/master/scheduler/cups-exec.c https://github.com/apple/cups/blob/master/scheduler/cups-exec.c#L145 Però cal, perquè li passen el fitxer temporal que han creat abans com a paràmetre profile (no és el primer paràmetre, sinó el primer sense -, el comentari del principi del fitxer és incorrecte, el missatge d'ús del final és correcte). El nom del fitxer temporal no és molt aleatori, es basa en l'hora actual passada a hexadecimal. Segurament hi ha maneres millors de crear fitxers temporals, però potser no tan portables ? El directori serà /tmp, o el valor de $TMPDIR. https://github.com/apple/cups/blob/master/cups/tempfile.c

