Dar permissão para usuário ativar impressora!

1. Dar permissão para usuário ativar impressora!

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 13/07/2015 - 18:01h

Eu uso o cups na empresa e em alguns casos o cups coloca a impressora como desativada ou em modo pause, o problema é o usuário não tem permissão para reativar a impressora, ele pede senha de root, já consegui fazer isso com script, porém gostaria de dar essa autonomia para meu usuários, alguém tem uma diga?

Abraço


  


2. Re: Dar permissão para usuário ativar impressora!

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 13/07/2015 - 21:36h

Olá,

Não sei se existe uma forma padrão para isso, mas eu faria um script ( que reinicia a impressora), daria permissão de execução, ativaria o bit SUID e mapeava o atalho na maquina do usuário. Assim:

OBS: deve ser criado como root

para criar o script:
sudo su -
nano print.sh

cole o conteúdo abaixo:

# Script para reiniciar impressora.
# OBS:: SGUID ATIVADO !
###################################

#/bin/bash
# Desativar impressora. Altere impressora para o nome da sua impressora
# exatamente do como está cadastrada no cups
/usr/bin/cupsdisable impressora
sleep 3
#Ativar impressora.Altere impressora para o nome da sua impressora
#exatamente do como está cadastrada no cups
/usr/bin/cupsenable impressora


dando permissão de execução e ativado o bit SUID:

chmod 4755 print.sh 


coloque-o numa pasta compartilhada, crie o atalho para este script na área de trabalho do usuário (claro que devidamente configurado .Por ex rsh ou se quiser fazer mais pró, crie um cgi) e pronto. Ele mesmo poderá reiniciar a impressora.


Espero ter ajudado.

Abs,


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


3. Re: Dar permissão para usuário ativar impressora!

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 14/07/2015 - 14:42h

Obrigado por responder,

Na verdade via script eu já consegui fazer resolver o problema, mas queria uma solução mais limpa onde o usuário pudesse usar a própria interface do linux para limpar a fila de impressão ou ativar impressoras desativadas.

Para ajudar por momento eu uso o script abaixo:


#!/bin/sh

DISABLED=`lpstat -t | grep disabled | awk '{ print $2; }'`

for PRINTER in $DISABLED
do
logger "Printer $PRINTER is stopped"
/etc/init.d/cups stop
rm -rf /var/spool/cups/*
/etc/init.d/cups start
sleep 2
/usr/sbin/cupsenable -h 127.0.0.1:631 $PRINTER && logger "Printer $PRINTER has been enabled."
done


Já tentei fazer o seguinte,
Criei um grupo "adminprinter" inclui um usuário nesse grupo e coloquei esse grupo no SystemGroup dentro cupsd.conf, mas não adianta, se eu abro o system-config-printer em modo gráfico e tendo ativar ou desativar impressoras, ele pede senha de root. Alguma outra idéia?


Abraço


tonyhts escreveu:

Olá,

Não sei se existe uma forma padrão para isso, mas eu faria um script ( que reinicia a impressora), daria permissão de execução, ativaria o bit SUID e mapeava o atalho na maquina do usuário. Assim:

OBS: deve ser criado como root

para criar o script:
sudo su -
nano print.sh

cole o conteúdo abaixo:

# Script para reiniciar impressora.
# OBS:: SGUID ATIVADO !
###################################

#/bin/bash
# Desativar impressora. Altere impressora para o nome da sua impressora
# exatamente do como está cadastrada no cups
/usr/bin/cupsdisable impressora
sleep 3
#Ativar impressora.Altere impressora para o nome da sua impressora
#exatamente do como está cadastrada no cups
/usr/bin/cupsenable impressora


dando permissão de execução e ativado o bit SUID:

chmod 4755 print.sh 


coloque-o numa pasta compartilhada, crie o atalho para este script na área de trabalho do usuário (claro que devidamente configurado .Por ex rsh ou se quiser fazer mais pró, crie um cgi) e pronto. Ele mesmo poderá reiniciar a impressora.


Espero ter ajudado.

Abs,


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---







4. Re: Dar permissão para usuário ativar impressora!

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 14/07/2015 - 16:28h

Os users são linux ou windows?

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


5. Linux na Veia!

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 16/07/2015 - 21:00h

O printserver é debian rodando cups...
As estações são Opensuse 13.1 32b com KDE.

Já tentei colocar no sudo tb... mas sabe Deus pq mesmo colocando no sudo pede senha de root. ;(



6. Re: Dar permissão para usuário ativar impressora!

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 16/07/2015 - 23:46h

Slispd escreveu:

O printserver é debian rodando cups...
As estações são Opensuse 13.1 32b com KDE.

Já tentei colocar no sudo tb... mas sabe Deus pq mesmo colocando no sudo pede senha de root. ;(

opa! mals a demora. Essa semana ta pegadáaaaaça..rs
Vamos lá...

Usa aquele método que eu tinha postado, só que usando o seu script. Assim:

1- Para ficar mais organizado e menos inseguro, crie um user para executar o script:
adduser scriptero 

2 - Crie/hospede seu script numa pasta onde o user que vc criou tenha acesso, se for o caso, crie:
mkdir /scripts
cp /local/onde_esta/seu_script.sh /scripts/

3- O pulo do gato: Dê a permissão com o bit SUID ligado: 4755 ( caso não saiba o que o SUID faz: quem tiver acesso ao arquivo com esse bit ligado, poderá executá-lo como fosse o dono. Que no seu caso é o root).
chmod 755 /scripts
chmod 4755 /scripts/seu_script.sh

3- cria um atalho no desktop dos users para execução dos scripts com o seguinte comando:
ssh scriptero@ip_do_server "bash /scripts/seuscript.sh" 

Pronto!

OBS:: Seu script não faz muito sentido pra mim, tem um loop que reinicia o cups inteiro (e não apenas a impressora parada) a cada impressora que ele achar. É isso mesmo que vc quer?

Usando seu script, modifiquei levemente (para o modo que eu usaria) e comentei todos os comandos pra vc entender o que está rolando.
#!/bin/sh

# aqui ele lista todas as impressoras configuradas e o -t retorna
# todos os status possiveis. O grep filtra as linhas que contenham a
# palavra DISABLED, o awk recorta a coluna com o nome das impressoras
# e por fim, armazena na variável DISABLED......OK! muito bom.
DISABLED=`lpstat -t | grep disabled | awk '{ print $2; }'`

for PRINTER in $DISABLED # para cada impressora armazenada na variável DISABLED,
do #execute
logger "Printer $PRINTER is stopped" # gera o log com o texto especificado.
rm -rf /var/spool/cups/* # exclui todos as filas, exceto as em uso (impressoras ainda ativas)
sleep 2 # aguarda 2 segundos
# inicia a impressora parada
/usr/sbin/cupsenable -h 127.0.0.1:631 $PRINTER && logger "Printer $PRINTER has been enabled."
done


abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


7. Re: Dar permissão para usuário ativar impressora!

Lucas Alves Santos
Lwkas

(usa XUbuntu)

Enviado em 17/07/2015 - 00:22h

não deve ter uma forma padrão de fazer isso o jeito é criar uma scrip para fazer isso.


8. Hummmm......

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 20/07/2015 - 15:57h

opa...

Então o script era para teste, a idéia era sempre limpar a fila de impressão para evitar que o usuário imprima 500 folhas ao resumir a impressora.

Alterei o script acho que ficou "melhor"


#!/bin/sh
#
## Variáveis
ZENITY=/usr/bin/zenity
CANCEL=/usr/bin/cancel
LPSTAT=/usr/bin/lpstat
##

DISABLED=`$LPSTAT -t | grep disabled | awk '{ print $2; }'`
$ZENITY --info --text "Limpando fila de impressão..."
$CANCEL -a
sleep 1
for PRINTER in $DISABLED
do
$ZENITY --info --text "Impressora $PRINTER está parada!"
sleep 1
/usr/sbin/cupsenable -h 127.0.0.1:631 $PRINTER && $ZENITY --info --text "Impressora $PRINTER foi ativada."
sleep 1
done


A idéia é limpar a filha de impressão depois verificar todas as impressoras que estão com status "disabled" e ativar.
No primeiro script eu parava o cups e limpava o conteúdo do diretório /var/spool/cups pois é nele que estão as impressões, isso por que as vezes cancel -a não funciona :(.
Tentei rodar o script como indicou mas não funciona 100%, alguns comandos mesmo colocando no sudoers ou incluindo o SUID ele solicitam senha de root. Talvez seja coisa do opensuse mesmo ;( pelo que eu percebi ele parece executar o script como root, mas não os comandos que estão descritos dentro do script.

Sei lá... coisa de loco.


tonyhts escreveu:

Slispd escreveu:

O printserver é debian rodando cups...
As estações são Opensuse 13.1 32b com KDE.

Já tentei colocar no sudo tb... mas sabe Deus pq mesmo colocando no sudo pede senha de root. ;(

opa! mals a demora. Essa semana ta pegadáaaaaça..rs
Vamos lá...

Usa aquele método que eu tinha postado, só que usando o seu script. Assim:

1- Para ficar mais organizado e menos inseguro, crie um user para executar o script:
adduser scriptero 

2 - Crie/hospede seu script numa pasta onde o user que vc criou tenha acesso, se for o caso, crie:
mkdir /scripts
cp /local/onde_esta/seu_script.sh /scripts/

3- O pulo do gato: Dê a permissão com o bit SUID ligado: 4755 ( caso não saiba o que o SUID faz: quem tiver acesso ao arquivo com esse bit ligado, poderá executá-lo como fosse o dono. Que no seu caso é o root).
chmod 755 /scripts
chmod 4755 /scripts/seu_script.sh

3- cria um atalho no desktop dos users para execução dos scripts com o seguinte comando:
ssh scriptero@ip_do_server "bash /scripts/seuscript.sh" 

Pronto!

OBS:: Seu script não faz muito sentido pra mim, tem um loop que reinicia o cups inteiro (e não apenas a impressora parada) a cada impressora que ele achar. É isso mesmo que vc quer?

Usando seu script, modifiquei levemente (para o modo que eu usaria) e comentei todos os comandos pra vc entender o que está rolando.
#!/bin/sh

# aqui ele lista todas as impressoras configuradas e o -t retorna
# todos os status possiveis. O grep filtra as linhas que contenham a
# palavra DISABLED, o awk recorta a coluna com o nome das impressoras
# e por fim, armazena na variável DISABLED......OK! muito bom.
DISABLED=`lpstat -t | grep disabled | awk '{ print $2; }'`

for PRINTER in $DISABLED # para cada impressora armazenada na variável DISABLED,
do #execute
logger "Printer $PRINTER is stopped" # gera o log com o texto especificado.
rm -rf /var/spool/cups/* # exclui todos as filas, exceto as em uso (impressoras ainda ativas)
sleep 2 # aguarda 2 segundos
# inicia a impressora parada
/usr/sbin/cupsenable -h 127.0.0.1:631 $PRINTER && logger "Printer $PRINTER has been enabled."
done


abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---







9. opaaa

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 20/07/2015 - 16:02h


Sim sim, criar um script não é o meu problema na verdade, estou tendo dificuldades em conseguir fazer um usuário executar o script pois muitos dos comandos solicitam senha de root. ;(

Lwkas escreveu:

não deve ter uma forma padrão de fazer isso o jeito é criar uma scrip para fazer isso.







10. Re: Dar permissão para usuário ativar impressora!

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 20/07/2015 - 16:14h

Slispd escreveu:


Sim sim, criar um script não é o meu problema na verdade, estou tendo dificuldades em conseguir fazer um usuário executar o script pois muitos dos comandos solicitam senha de root. ;(


o passo a passo que te enviei não funcionou?


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


11. não!!!

Rodrigo José Petreça
Slispd

(usa Debian)

Enviado em 20/07/2015 - 17:19h

Não funcionou... o o script não executa os comandos "cancel -a" ou cupsenable...

tonyhts escreveu:

Slispd escreveu:


Sim sim, criar um script não é o meu problema na verdade, estou tendo dificuldades em conseguir fazer um usuário executar o script pois muitos dos comandos solicitam senha de root. ;(


o passo a passo que te enviei não funcionou?


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---











Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts