Escalar permissões através de um shell script em segundo plano

1

Gostaria de escrever em um arquivo de dispositivo (de uma impressora) localizado em /dev/usb/lp0 . O arquivo é de propriedade de lp user e group. Esse arquivo é criado sempre que eu conecto meu dispositivo de impressora ao sistema.

Eu tentei me adicionar ao grupo lp . No entanto, o arquivo lp0 não aparece quando a impressora está conectada. Remover-me do grupo resolve o problema.

Uma solução para obter permissão de gravação é -

  1. Detectar sempre que o dispositivo estiver conectado
  2. Disparar um script de shell que executa sudo chmod 0666 /dev/usb/lp0

Isso me levou à resposta no link

O shell script é acionado com sucesso, mas não executa o sudo command *, pois o shell script não foi executado no terminal. Eu tentei usar sudo e gksudo , ambos não me pediram para digitar a senha, ou seja, eu sou incapaz de escalar permissões através de um script de shell em segundo plano . / p>

O que eu tentei?

  1. setuid de Unix & Linux @ StackExchange , mas parece ser uma péssima ideia.
  2. echo 'my_insecure_password' | sudo -S command , não funcionou *.

Eu não tentei Polkit , o que foi sugerido em outras respostas, devido ao nível de sua complexidade. Mas estou disposto a ir com as instruções adequadas.

    
por Suraj Thapar 09.07.2016 / 23:03

2 respostas

6

Adicionar-se ao grupo lp é provavelmente a melhor solução aqui. Isso não fará com que o arquivo lp0 não apareça. (É teoricamente possível que seu sistema tenha sido configurado para fazer com que lp0 não apareça se você estiver no grupo lp , mas 1. que teria que ser uma configuração local, não uma configuração padrão de uma distribuição; 2. Não vejo por que alguém teria configurado isso.)

O que segue é apenas para interesse acadêmico. Em seu cenário, você não precisa disso.

Se você precisar alterar as permissões no arquivo do dispositivo, Como executar scripts personalizados no plug-in do dispositivo USB? não é exatamente o que você precisa - para casos mais complexos que exigem um script. Para alterar as permissões do Unix ou a propriedade em um arquivo de dispositivo, use as atribuições OWNER , GROUP e MODE diretamente na regra do udev. Ou seja, criar um arquivo em /etc/udev/rules.d , mas a linha nesse arquivo deve ter algo como GROUP="mygroup" em vez de RUN="/path/to/script" .

Se você quiser fazer algo mais complexo, como definir uma lista de controle de acesso, será necessário executar um script. Você não precisa escalar permissões nesse script: ele já está sendo executado como root! Basta ligar para o programa que você precisa para executar como root, por exemplo setfacl .

    
por 10.07.2016 / 01:44
2

Eu não recomendo esta solução para este problema.

Você pode editar /etc/sudoers para configurar o sudo para permitir a execução de um script sem uma senha.

    
por 09.07.2016 / 23:18