script para carregar / descarregar o módulo psmouse pelo usuário (sem raiz)

0

Eu quero escrever um script de shell que possa ser executado por um usuário sem permissões de root que serão simplesmente executadas modprobe -r psmouse ou modprobe psmouse . Isso é possível? Eu tenho este módulo:

$ ls -l /lib/modules/4.4.0-116-generic/kernel/drivers/input/mouse/psmouse.ko 
-rw-r--r-- 1 root root 219670 Feb 12 17:06 /lib/modules/4.4.0-116-generic/kernel/drivers/input/mouse/psmouse.ko

Não há problema em alterar as permissões dele?

    
por cerr 30.03.2018 / 19:41

2 respostas

2

Basta ajustar sua política de segurança do sudo, criando uma regra em /etc/sudoers.d que permita:

  • um conjunto definido de usuários (possivelmente apenas um usuário ou um grupo, conforme necessário),
  • para executar SOMENTE modprobe e rmmod ,
  • APENAS no argumento cmd psmouse ,
  • COM ou SEM senha do sudo.

Isso é exatamente o que '/etc/sudoers.d' é geralmente usado. Então aqui vai ... (assumindo configuração de host único e lembrando que os arquivos localizados em /etc/sudoers.d são analisados por sudo na ordem lexical ordenada.)

  • verifique se /etc/sudoers inclui a linha #include /etc/sudoers.d
  • Normalmente, trabalho com um arquivo padrão pessoal /etc/sudoers.d/00_aliases , onde defino os aliases user, cmd, host e group a gosto. Dessa forma, não só reduzo drasticamente o uso de sudo visudo para ajustar /etc/sudoers , que contém as configurações padrão do sistema base, como também meus outros arquivos em /etc/sudoers.d/ usam aliases analisados primeiro por sudo in /etc/sudoers.d/00_aliases .
  • solte um arquivo em /etc/sudoers.d , nomeado por exemplo 20_psmouse

Se você não planeja usar extensivamente os arquivos sudoers.d, você pode não criar /etc/sudoers.d/00_aliases e, em vez disso, incluir seu ad-hoc aliases diretamente nos seus arquivos drop-in, conforme mostrado abaixo.

User_Alias  MOUSE_TWKR = user1[, user2[, user3[, ...]]]
Cmnd_Alias  MOUSE_MOD_TWK = /usr/bin/modprobe, /usr/bin/rmmod
MOUSE_TWKR  your-host = NOPASSWD: MOUSE_MOD_TWK psmouse

A verdade está no pudim, então você precisará:
   1) consulte man sudoers (no Archlinux, os exemplos começam na linha 1911 de 2038 linhas !!) e
   2) experimente um pouco.
Por exemplo, se a regra acima for muito permissiva e você quiser restringir o uso de qualquer opção junto com os cmds modprobe e rmmod no contexto que você está administrando, substitua a entrada do arquivo por:

 MOUSE_TWKR  your-host = NOPASSWD: MOUSE_MOD_TWK [!-] psmouse

... e com entrada de senha obrigatória:

 MOUSE_TWKR  your-host = MOUSE_MOD_TWK [!-] psmouse

(*) substitua "your-host" pelo seu nome de host, ou com ALL para permitir todos os hosts, o que reduz apenas para yr host se yr system for uma caixa independente e / ou you ' Não estou lidando com o administrador remoto em uma sub-rede, por exemplo ...

    
por 31.03.2018 / 19:52
1

Alterar as permissões no arquivo psmouse.ko não fará muito além de possibilitar que alguém altere o arquivo (o que seria uma coisa ruim!) Você pode permitir que eles executem modprobe e rmmod , mas isso também seria perigoso, porque eles poderiam, teoricamente, carregar e descarregar qualquer módulo do kernel instalado em seu sistema!

O que você quer é criar um pequeno script auxiliar e permitir que os usuários autorizados executem isso como root :

  1. Faça os scripts:

    /usr/local/bin/load_mouse.sh

    #!/bin/sh
    /sbin/modprobe psmouse
    

    /usr/local/bin/unload_mouse.sh

    #!/bin/sh
    /sbin/rmmod psmouse
    

    Os scripts devem estar em um diretório publicamente acessível (gosto de /usr/local/bin , mas essa é uma preferência pessoal), com o proprietário root:root e as permissões 755 . A propriedade root não é necessária, mas torna mais difícil para as pessoas mudarem: lembre-se, esses scripts precisam ser executados como superusuário, então você quer que eles sejam seguros!

  2. Permitir que os usuários os executem

    Usando visudo (ou adicionando um arquivo drop-in em /etc/sudoers.d ), adicione o seguinte:

    username ALL=(root) /usr/local/bin/load_mouse.sh,/usr/local/bin/unload_mouse.sh
    

    Substitua username pelo nome de usuário apropriado ou %groupname se você quiser que os membros de um grupo possam executá-lo.

    Os usuários agora devem conseguir executar o script usando sudo /usr/local/bin/load_mouse.sh (ou unload_mouse ). Se /usr/local/bin estiver em PATH , então sudo load_mouse.sh também funcionará.

  3. (opcional) quebra a chamada sudo

    Por fim, você pode agrupar o sudo em outro script para facilitar a digitação / execução:

    / usr / local / bin / mouse_on

    #!/bin/sh
    sudo /usr/local/bin/load_mouse.sh
    

    / usr / local / bin / mouse_off

    #!/bin/sh
    sudo /usr/local/bin/unload_mouse.sh
    

    Eles não precisam ter nenhum direito especial, mas eu gosto de mantê-los de propriedade de root:root com permissões de 755 . Agora os usuários podem simplesmente digitar mouse_on e mouse_off (desde que você tenha permissão para executar os scripts!)

por 31.03.2018 / 03:35