[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: (deb-cat) sudo as lp



El 14/09/16 a les 13:23, Xavi Drudis Ferran ha escrit:
> El Tue, Sep 13, 2016 at 08:31:50PM +0200, Narcis Garcia deia:
>> Hola;
>>
>> He aprofitat la característica de CUPS per crear una impressora virtual
>> i fer-la treballar amb un programet (script) a /etc/cups/interfaces/
>> La meva intenció és que, quan l'usuari trii imprimir amb aquesta
>> impressora virtual, transferir el document a un ordinador remot (~scp) i
>> executar la instrucció «lp document» a l'ordinador remot per a què
>> s'imprimeixi localment des d'allà.
>>
>> Això implica pel cas un programet com a:
>> /etc/cups/interfaces/Epson1
> 
> Sense veure l'script costa (més) de dir... 
> 
>> El qual s'executa quan CUPS rep l'orddre d'imprimir per la impressora
>> «Epson1», i es fa com a usuari «lp».
>> El programet fa la còpia del document, però en intentar executar ssh
>> (+expect per posar contrasenya) diu:
>>
>> You have too many files are open.  Close some files or increase your
>> per-process descriptor limit.
>>
> 
> Aquest error és del client o ve del servidor ?  Massa fitxers oberts
> no em quadra amb problemes de permissos ni tal.  És com si hi hagués
> alguna crida recursiva descontrolada, o si provés infinites vegades
> d'obrir algun fitxer sense tancar-lo.
>  

Al servidor tot va bé (he provat a fer manualment des del client tot
allò que ha de fer el programet ...interfaces/Epson1); els problemes els
tinc al client quan ho fa a partir de la crida de CUPS.
Això dels «too many files» no podria ser per una recursivitat provocada
per mi, ja que passa quan el programet tira pel dret sense fer «sudo» ni
executar-se a sí mateix.

>> Com que penso que el límit de 800.000 a nivell de sistema ja és gran, i
>> no sé com modificar-ho per «lp»*, doncs intento que el programet es
>> cridi a sí mateix com a un usuari normal:
>> sudo -n -u UnUsuari "$0"
>>
> 
> /etc/security/limits.conf ?

He mirat el fitxer i no té cap restricció específica per l'usuari «lp».

> man bash i buscar ulimit ? 

Aquests són els límits per un usuari normal amb Bash:
$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63575
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63575
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Aquests són els límits obtinguts des del programet (/bin/sh = Dash):
$ ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        8192
coredump(blocks)     0
memory(kbytes)       unlimited
locked memory(kbytes) 64
process              63575
nofiles              4096
vmemory(kbytes)      unlimited
locks                unlimited


> 
>> I he hagut d'afegir una línia amb visudo**:
>> lp ALL = (%users) NOPASSWD: /etc/cups/interfaces/*
>>
>> Penso que això significa: «L'usuari lp de tots els hosts poden actuar
>> com a un membre del grup users sense contrasenya per executar allò que
>> hi hagi a /etc/cups/interfaces/»
> 
> Però CUPS surt de tots els grups menys el primari entre el fork() i el exec() 
> de l'script, vols dir que cola ? 
> https://github.com/apple/cups/blob/master/scheduler/process.c#L736
> 
> [...]
> 
> 
> En qualsevol cas, el que no entenc és perquè no pot el servidor compartir 
> la impressora per CUPS mateix i accedir-hi el client per IPP. Llavors tindries
> més informació de l'estat del treball i tot això, no ? 
> 

Hi ha problemes per contactar directament amb el servidor via IPP i
altres protocols d'impressió, i la única solució que puc controlar és
via fitxer + instrucció per terminal SSH.


Reply to: