Re: (deb-cat) sudo as lp
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
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-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
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
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
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
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
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?
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
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
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?
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?
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?
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