sandboxd per i backend CUPS in Yosemite per Mac OS X.

4

Utilizzo un back-end CUPS personalizzato per la stampa su Mac OS X. Il back-end funziona inoltrando i dati di stampa a un'altra macchina (usando ssh) e inviando i dati alla stampante da lì. Perché ciò avvenga, il backend (implementato come script di shell), ha bisogno di accedere a una chiave privata ssh. Problema: da quando ho aggiornato a Yosemite, lo script non può più accedere al file che contiene la chiave. Invece vedo il seguente messaggio di errore sulla console:

sandboxd: [...] deny file-read-data /

e

/usr/libexec/cups/backend/.mybackend-ssh/id_dsa: Permission denied

nel file di registro degli errori di CUPS.

Come posso iniettare un file nella sandbox utilizzata per isolare i back-end di CUPS?

    
posta jochen 29.10.2014 - 16:53
fonte

2 risposte

4

Dopo una lunga sessione di debug, ho finalmente risolto questo problema. Nel caso in cui altre persone incontrino le stesse difficoltà, ecco cosa ho imparato sui back-end di CUPS con Mac OS X Yosemite:

  • I backend sono file eseguibili (nel mio caso, uno script di shell) nella directory /usr/libexec/cups/backend/ . Le informazioni sul processo di stampa sono passate in questi programmi tramite argomenti della riga di comando ( $1 = id-processo, $2 = utente, $3 = titolo, $4 = copie, $5 = opzioni, $6 = file) e variabili d'ambiente ( eg $DEVICE_URI ).

  • I backend vengono eseguiti come utente _lp , gruppo _lp , con autorizzazioni ulteriormente limitate da sandboxd. La directory corrente all'avvio del backend è la directory root / , ma il back-end non ha il permesso di leggere questa directory. Le directory che possono essere lette includono /usr/libexec/cups/backend/ , /etc/ e sottodirectory di questi. È consentito solo un accesso molto limitato (o del tutto assente?) Alla home directory dell'utente _lp (in /var/spool/cups ).

  • Il mio back-end richiede l'uso di ssh. Affinché funzioni, ssh deve essere in grado di accedere alla chiave privata richiesta per accedere al server remoto e un file known_hosts che identifica il server remoto. La chiave richiesta può essere inserita in /usr/libexec/cups/backend/ o in una sottodirectory, deve essere leggibile solo dall'utente _lp . Sembra che ssh, quando avviato dal back-end di CUPS, non abbia il permesso di accedere a /var/spool/cups/.ssh/ , anche se questa directory esiste; quindi il file known_hosts deve essere memorizzato in /etc/ , come /etc/ssh_known_hosts . (Nota che la pagina di manuale ssh afferma erroneamente che dovrebbe essere /etc/ssh/ssh_known_hosts .)

    Modifica: su MacOS X 10.11 (El Capitan), ssh sembra ora utilizzare la posizione documentata /etc/ssh/ssh_known_hosts per il noto file hosts. Ho dovuto spostare il mio file in /etc/ssh/ per fare il filtro della stampante funziona dopo l'aggiornamento del sistema operativo.

  • Per eseguire il debug di problemi come questo, usando cupsctl --debug-logging è inestimabile: dopo che questo comando è stato eseguito, tutto ciò che è scritto su stderr nel back-end di CUPS appare in /var/log/cups/error_log . La registrazione può essere nuovamente disattivata utilizzando cupsctl --no-debug-logging . Inoltre, ogni volta che sandboxd nega un tentativo di accesso ai file, un messaggio come sandboxd[426] ([15998]): sh(15998) deny file-read-data / può essere trovato in /var/log/system.log .

risposta data 31.10.2014 - 20:46
fonte
4

Anche se questo non risponde alla domanda, mi sono imbattuto in questo - link - quando ho cercato di ottenere Tea4CUPS funziona in OS X 10.10 (non ero in grado di ottenere ciò):

To get PaperCut working with Mac OS 10.10 in the interim, you’ll need to disable sandboxing. Edit the file /etc/cups/cups-files.conf to include the new line ‘Sandboxing Relaxed’. Then restart CUPS for this to take effect.

sudo sh -c 'echo "Sandboxing Relaxed" >> /etc/cups/cups-files.conf'
sudo launchctl stop org.cups.cupsd
    
risposta data 26.02.2015 - 20:59
fonte

Leggi altre domande sui tag