Por que apenas os sudo'ers podem executar o arquivo?

3

Como é possível que para poder executar um arquivo binário com a permissão 755 , é preciso estar na lista sudo'ers? Eu estou tentando deixar um programa executado por um usuário não-sudo. Isso não acontece, mas se eu executo via sudo ou como root, funciona como deveria.

A permissão de arquivo é 755 root root .
O diretório do programa inteiro está em /opt .

Alguns detalhes:
Ubuntu 12.04 Server, 64 bits
o software é basicamente uma versão antiga de 32 bits do Firefox 1.9. algo, modificado em certa medida para conecte-se a um servidor Tomcat.

atualização
um usuário não listado na lista sudo'ers pode iniciar o programa.
apenas o meu usuário sudo não pode, por exemplo, executando apenas ./program , sudo ./programm é executado muito bem.

    
por user218025 21.11.2013 / 17:17

2 respostas

2

A razão mais provável é que o programa, uma vez executado como um usuário normal, está tentando ler algum arquivo ou fazer alguma operação que é reservada para usuários privilegiados (basicamente root).

Por exemplo, se seu programa está tentando usar (ligação) para uma das portas inferiores da Internet (menos de 1024), ele precisa de privilégios de root para fazer isso (1). Ou tente ler um arquivo ou use uma biblioteca marcada apenas para raiz.

A solução hammer (2) é para marcar o programa set-uid root (SUID-root). Isso é bastante perigoso, deve ser evitado codificando-se o programa para que ele não seja necessário, e é praticamente impossível distribuí-lo - eu nunca aceitaria programas programados de fontes não oficiais no meu computador, e mesmo assim eu não uso Gosta deles também. Estou postando a resposta porque acho que é bom saber que eles existem.

Portanto, certificando-se de que todos os serviços / arquivos que o programa usa estão acessíveis a ele é a solução correta, caso contrário, provavelmente, o programa deve ser executado como root com todas as conseqüências.

Aviso de grandes quantidades de gordura: isso é perigoso e os programas de raiz da SUID podem fazer o que quiserem com o sistema. Se eles tiverem bugs, o usuário pode facilmente assumir o controle de todo o sistema ou destruí-lo.

Se você criar um programa set-uid root, qualquer um poderá executá-lo e será executado como root. Isso funcionará apenas para executável binário ; bit set-uid não funciona para scripts (shell, python ou qualquer outro) .

Se você realmente quer rodar um script como root, você precisa de um wrapper, como aquele em esta resposta em stackoverflow . Mas antes de fazer isso, leia toda a questão e certifique-se de entender os (não tão) pontos finos sobre segurança. Se você realmente quer que o script seja executado como root para todos os usuários, eu optaria por editando sudoers para que eles pudessem executá-lo com sudo sem nenhuma senha solicitada . Esta resposta em stackoverflow lista muitas ideias.

Exemplo de uso de set-uid : Eu faço uma cópia de cat (produzo o conteúdo de um arquivo para o terminal), altero para ser de propriedade de root e tento ler um arquivo de propriedade do root e que somente o root pode ler:

(0)asus-romano:~/tmp/suidtest% cp /bin/cat .              
(0)asus-romano:~/tmp/suidtest% ls -l ./cat
-rwxr-xr-x 1 romano romano 46884 Nov 21 09:49 ./cat
(0)asus-romano:~/tmp/suidtest% sudo chown root.root ./cat
(0)asus-romano:~/tmp/suidtest% ls -l
total 48
-rwxr-xr-x 1 root root 46884 Nov 21 09:49 cat
(1)asus-romano:~/tmp/suidtest% ./cat /etc/shadow- > /dev/null
./cat: /etc/shadow-: Permission denied

Agora, eu mudo o programa para ser suid-root (observe o s nos flags de permissão):

(0)asus-romano:~/tmp/suidtest% sudo chmod u+s ./cat
(0)asus-romano:~/tmp/suidtest% ls -l ./cat
-rwsr-xr-x 1 root root 46884 Nov 21 09:49 ./cat
(0)asus-romano:~/tmp/suidtest% ./cat /etc/shadow- > /dev/null

Nenhum erro ...

Novamente, não faça isso, a menos que você confie completamente no programa e nos usuários.

(1) bem, existem privilégios refinados no Linux chamados capacidades , mas raramente são usados e bastante complexo ...

(2) quando você tem um martelo, tudo começa a parecer prego ...

    
por Rmano 21.11.2013 / 18:03
0

Eu tentaria mover o arquivo para um grupo diferente de root ... Se você ler isto: link

e você -ll e veja raiz raiz XXXX

Significa que o seu arquivo / programa pertence a "root" e é capaz de 755 membros do grupo "root". Portanto, ou

1) adicione seus outros usuários não-root ao grupo raiz, ou 2) crie um novo grupo e atribua esse grupo aos arquivos / programas que você está executando.

Aqui para criar grupos e outras coisas: link

Espero que ajude!

    
por Pdp Molniya 21.11.2013 / 17:56

Tags