Re: (deb-cat) sudo as lp

2016-09-14 Conversa Alex Muntada
Ernest Adrogué:

> Una idea: afegir la línia
> 
> lsof -p $$ > /tmp/lsof.$$

Potser seria més interessant fer un «strace -f -e open Epson1»
des del shell, sense tocar el codi. L'opció «-f» permet traçar
l'script i tots els fills que se'n derivin i «-e open» mostra
només les crides open.

Salut,
Alex



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Alex Muntada
Narcis Garcia:

> A cada instrucció la faig anunciar amb quelcom així:
> echo "\$ mkdir -p /mnt/remot/cua" >> "/tmp/Epson1.log"
> mkdir -p /mnt/remot/cua >> "/tmp/Epson1.log" 2>&1

Si poses «set -x» al principi t'estalviaràs tots els echo.
També pots executar un script fent «sh -x foo.sh» si no
vols posar-ho dins.

> Tot això per detectar el problema.
> En fer la crida a sí mateix, a la bitàcola (.log) es veu:
> $ sudo -n -u UnUsuari /etc/cups/interfaces/Epson1 FesRemot
> Result=1

Una altra opció útil és «set -e» perquè l'script avorti de
seguida que falli alguna ordre.

> Això significa que no s'atura amb el sudo, d'aquest no n'obtinc
> cap sortida textual, i el codi de sortida és 1. No aconsegueixo
> esbrinar res més.

A mi també em costa entendre tot plegat sense veure el codi, però
jo provaria amb shellcheck o similar si et dóna alguna pista.

D'altra banda, també pots provar a executar pas a pas el codi.
Et converteixes en l'usuari lp:

sudo -H -u lp -s /bin/bash

Proves d'executar Epson1:

/etc/cups/interfaces/Epson1 FesRemot

Proves d'executar Epson1 com l'usuari UnUsuari:

sudo -n -u UnUsuari /etc/cups/interfaces/Epson1 FesRemot

Etc. Així és com ho faig jo per debuggar problemes difícils,
convertint-los en problemes més petits i provant totes les
passes.

Salut,
Alex



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Ernest Adrogué
2016-09-13, 20:31 (+0200); Narcis Garcia escriu:
> You have too many files are open.  Close some files or increase your
> per-process descriptor limit.

Una idea: afegir la línia

lsof -p $$ > /tmp/lsof.$$

i mirar quins/quants fitxers hi ha oberts.

Tot i que si el problema és de recursió suposo que t'omplirà el directori
/tmp i es quedarà sense espai.



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Narcis Garcia

El 14/09/16 a les 15:25, Alex Muntada ha escrit:
> Narcis Garcia:
> 
>> You have too many files are open.  Close some files or increase your
>> per-process descriptor limit.
>>
>> 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"
> 
> Falta posar el cas trivial de la recursivitat i per tant el codi
> es crida a si mateix infinitament fins que exhaureix el número
> de fitxers oberts:
> 
>   1. Epson és cridat per lp.
>   2. Epson es crida a sí mateix amb sudo.
>   3. Torna al punt 2.
> 
> Falta una condició entre els passos 1 i 2 que comprovi si
> l'usuari ja és UnUsuari.
> 
> Per cert, m'he adonat del problema gràcies al comentari d'en Xavi
> sobre la recursivitat.
> 
> Salut,
> Alex
> 

No és el cas, ja ho havia repassat.
A cada instrucció la faig anunciar amb quelcom així:
echo "\$ mkdir -p /mnt/remot/cua" >> "/tmp/Epson1.log"
mkdir -p /mnt/remot/cua >> "/tmp/Epson1.log" 2>&1

Tot això per detectar el problema.
En fer la crida a sí mateix, a la bitàcola (.log) es veu:
$ sudo -n -u UnUsuari /etc/cups/interfaces/Epson1 FesRemot
Result=1

Aquestes dues línies són: l'anotació abans d'executar sudo, i l'anotació
que fa aquesta comanda posterior a sudo:
echo "Result=$?" >> "/tmp/Epson1.log"
Això significa que no s'atura amb el sudo, d'aquest no n'obtinc cap
sortida textual, i el codi de sortida és 1. No aconsegueixo esbrinar res
més.



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Narcis Garcia

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
locksunlimited


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



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Narcis Garcia

El 14/09/16 a les 11:22, orestes ha escrit:
> A 2016-09-13 20:31, Narcis Garcia escrigué:
> 
>> 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
>> 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.
>>
>> 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"
>>
>> 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/»
>>
>> EL PROBLEMA ARA:
>> La instrucció «sudo» no s'arriba mai a executar (o no aconseguixo
>> interceptar cap missatge per stdout ni stderr), i dóna el codi de sortida 1.
>>
>> LES MEVES PREGUNTES:
>> - Estic escrivint malament al fitxer «sudoers»?
>> - Hi ha un altre camí per fer una execució remota via SSH?
>>
>> (*) Ja he comprovat que un usuari normal pot executar el mateix sense
>> problema.
>> (**) CUPS no permet que les seves crides executin res com a «root»
> 
> No tinc gens d'experiència en les qüestions que comentes, però et puc
> explicar quelcom que potser hi està relacionat i et dóna alguna pista.
> Fa uns anys vaig intentar fer un script que s'executés com a root (amb
> setuid) i després de no sortir-me'n vaig llegir que era una política (de
> debian?) no permetre l'execució d'scripts amb setuid. La solució que
> donaven era crear un petit programa *executable* (en C, per exemple),
> fer-lo setuid i fer que l'script el cridés.
> 
> A veure si serà quelcom semblant.
> 
> Orestes.
> 
>  
> 
>  

Prefereixo utilitzar el «sudo», i tenir-ho tot escrit en ShellScript.
No crec que sigui necessari executar res com a «root», apart de què al
fitxer /etc/cups/cups-files.conf hi ha un comentari que parla d'una
restricció sobre aquesta mala pràctica.

Gràcies.



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Alex Muntada
Narcis Garcia:

> You have too many files are open.  Close some files or increase your
> per-process descriptor limit.
> 
> 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"

Falta posar el cas trivial de la recursivitat i per tant el codi
es crida a si mateix infinitament fins que exhaureix el número
de fitxers oberts:

  1. Epson és cridat per lp.
  2. Epson es crida a sí mateix amb sudo.
  3. Torna al punt 2.

Falta una condició entre els passos 1 i 2 que comprovi si
l'usuari ja és UnUsuari.

Per cert, m'he adonat del problema gràcies al comentari d'en Xavi
sobre la recursivitat.

Salut,
Alex



Re: (deb-cat) sudo as lp

2016-09-14 Conversa Alex Muntada
orestes:

> Fa uns anys vaig intentar fer un script que s'executés com a root (amb
> setuid) i després de no sortir-me'n vaig llegir que era una política (de
> debian?) no permetre l'execució d'scripts amb setuid. La solució que
> donaven era crear un petit programa *executable* (en C, per exemple),
> fer-lo setuid i fer que l'script el cridés. 

La política d'ignorar els suid dels scripts és comú a molts Unix
i derivats. Però això no afecta a l'ordre sudo perquè el canvi
d'uid es produeix abans d'executar l'script.

De fet, gràcies a l'ordre sudo ja no cal fer això dels wrappers
compilats.

Salut i sudo!
Alex



Re: Propera trobada?

2016-09-14 Conversa Adrià
Hola,

On Wed, Sep 14, 2016 at 09:10:03AM +0200, Alex Muntada wrote:
>Hola Adrià,
>quin format tindria la trobada, com la de Lloret, que era de treball amb
>alguna presentació improvisada? Purament social?

El que ens vingui de gust. Realmeant no tinc res pensat; el missatge 
bàsicament era per refrescar-nos la memòria ja que havíem dit de
fer-les dos cops l'any.

-- 
Adrià García-Alzórriz
0x09494C14


signature.asc
Description: PGP signature


Re: (deb-cat) sudo as lp

2016-09-14 Conversa Xavi Drudis Ferran
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.
 
> 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 ?
man bash i buscar ulimit ? 

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



Re: (deb-cat) sudo as lp

2016-09-14 Conversa orestes
 

A 2016-09-13 20:31, Narcis Garcia escrigué: 

> 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
> 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.
> 
> 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"
> 
> 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/»
> 
> EL PROBLEMA ARA:
> La instrucció «sudo» no s'arriba mai a executar (o no aconseguixo
> interceptar cap missatge per stdout ni stderr), i dóna el codi de sortida 1.
> 
> LES MEVES PREGUNTES:
> - Estic escrivint malament al fitxer «sudoers»?
> - Hi ha un altre camí per fer una execució remota via SSH?
> 
> (*) Ja he comprovat que un usuari normal pot executar el mateix sense
> problema.
> (**) CUPS no permet que les seves crides executin res com a «root»

No tinc gens d'experiència en les qüestions que comentes, però et puc
explicar quelcom que potser hi està relacionat i et dóna alguna pista.
Fa uns anys vaig intentar fer un script que s'executés com a root (amb
setuid) i després de no sortir-me'n vaig llegir que era una política (de
debian?) no permetre l'execució d'scripts amb setuid. La solució que
donaven era crear un petit programa *executable* (en C, per exemple),
fer-lo setuid i fer que l'script el cridés. 

A veure si serà quelcom semblant. 

Orestes. 

 

Re: Propera trobada?

2016-09-14 Conversa Narcis Garcia
A mi em va agradar molt l'estona de debat que vam tenir a Girona,
activitat que es barreja bé amb la presentació de la gent.



__
I'm using this express-made address because personal addresses aren't
masked enough at lists.debian.org archives.
El 14/09/16 a les 09:10, Alex Muntada ha escrit:
> Hola Adrià,
> quin format tindria la trobada, com la de Lloret, que era de treball amb
> alguna presentació improvisada? Purament social?
> 
> En el primer cas, hauria de ser tot el dia o no sortiria a compte tret
> que la fem virtual. En el segon cas, podríem quedar directament per
> dinar, per exemple.
> 
> Salut!
> Alex
> 



Re: Propera trobada?

2016-09-14 Conversa Alex Muntada
Hola Adrià,
quin format tindria la trobada, com la de Lloret, que era de treball amb
alguna presentació improvisada? Purament social?

En el primer cas, hauria de ser tot el dia o no sortiria a compte tret que
la fem virtual. En el segon cas, podríem quedar directament per dinar, per
exemple.

Salut!
Alex


Propera trobada?

2016-09-14 Conversa Adrià
Bon dia,

vam comentar fer una trobada 2 cops l'any i l'última va ser el maig
coincidint amb la SunCamp de Lloret [0] si no m'equivoco, tot i que
per aquella època n'havíem planificat una a Vilafranca [1].

Què us semblaria fer la següent properament (fos a Vilafranca o no)?

[0] https://wiki.debian.org/DebianEvents/Europe/2016/DSC
[1] https://wiki.debian.org/LocalGroups/DebianCat
-- 
Adrià García-Alzórriz
0x09494C14


signature.asc
Description: PGP signature