Como fazer com que um arquivo só possa ser executado pelo root, mas não como root?

7

Existem certos aplicativos que eu não quero que as pessoas possam abrir a menos que tenham privilégios de root, no entanto, eu não quero dar privilégios de root aos programas. Então, como posso fazer com que apenas o root possa executar certos aplicativos, mas para que os aplicativos não sejam realmente executados como root (não quero que sejam por motivos de segurança)? Estou executando o Ubuntu GNOME 15.04, com o GNOME Shell e o GNOME 3.16.

    
por Great Uncle Bulgaria 25.08.2015 / 16:07

2 respostas

7

Tente usar setuid do pacote super . Do sudo apt-get install super , crie um script de shell que só pode ser executado como root. Ter esse script de shell executando apenas um comando:

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0

Em seguida, defina um alias para cada um dos usuários, para que applicationcommand aponte para o shell script criado, adicionando a cada um dos arquivos .bashrc :

alias applicationcommand="sh /path/to/shell/script"

Como alternativa, ou além de criar um alias , você pode editar o arquivo .desktop do aplicativo que deseja executar, supondo que seus aplicativos tenham um arquivo .desktop (se não for um aplicativo executado no GUI, mas a CLI provavelmente não tem um arquivo .desktop ), de modo que a linha Exec= tenha sh /path/to/shell/script depois disso, ou o nome do alias se você decidiu criá-lo. Você encontrará .desktop arquivos em /usr/share/applications e ~/.local/share/applications .

    
por user323419 25.08.2015 / 16:56
8

Esta resposta é complementar a a de Heather (que funcionará).

Primeiro de tudo , leve em conta que no Unix (e no Linux), se alguém é capaz de obter privilégios de root, eles podem fazer qualquer coisa. No caso da resposta de Heather, nada irá parar seu usuário para apenas sudo /usr/bin/applicationcommand (com um pouco de busca pelo caminho real ou qualquer outra coisa). Mas suponho que tudo bem com você.

Nesse caso, por que não simplesmente (1) :

sudo chgrp sudo /usr/bin/applicationcommand
sudo chmod 750 /usr/bin/applicationcommand

Se os usuários puderem usar sudo , isso significa que (2) eles estão no grupo sudo ; os comandos acima tornam o applicationcommand legível / executável apenas para membros do grupo sudo . Quando o executam, no entanto, ele será executado como seu usuário real, como qualquer outro comando.

No entanto, a solução "clássica" do Unix é:

  1. crie um grupo, chame-o de privileged .
  2. sudo chgrp privileged /usr/bin/myapp e, em seguida, sudo chmod 750 /usr/bin/myapp .
  3. adicione o (s) usuário (s) (sem privilégios!) que você deseja executar o aplicativo para o grupo privileged

e agora o usuário executará myapp como usuário, sem precisar de sudo privileges.

Observe que, se você quiser que o aplicativo seja executado como um usuário diferente, você pode usar o mecanismo de set-uid combinado com as técnicas acima.

Notas de rodapé:

(1) : Observe que você não pode fazer isso se o aplicativo tiver um sinalizador set-gid (isso acontece com alguns mailers, por exemplo). Verifique antes de alterar o grupo do binário.

(2) : na maioria das configurações. sudo pode ser bem aparado (veja man sudoers ) em zilhões de caminho, então a eficácia deste hack simples irá variar dependendo de quanto você o personalizou.

    
por Rmano 26.08.2015 / 09:25