Evitar que os usuários marquem arquivos como executáveis?

3

Eu quero garantir que os usuários do meu sistema sejam incapazes de chmodar arquivos + x, e eu não quero que nada em / home / ou / var / seja executável.

Eu não posso colocá-los em partições separadas.

Executando o servidor Ubuntu 9.04.

    
por lfaraone 01.06.2009 / 16:02

6 respostas

11

Eu ia sugerir um wrapper para chmod ou algo assim, mas quanto mais eu penso sobre isso, os usuários eventualmente encontrarão uma maneira de contornar isso (scp um executável de outra caixa, ou executar perl -s "chmod ('FILE '); ", etc ...

Então, acho que o método FS é o melhor. Como você diz que não pode movê-los para um novo sistema de arquivos, que tal usar uma montagem --bind para "remount" / home e / var sem privilégios de exec?

mount -o noexec --bind /var /var
mount -o noexec --bind /home /home

Não tenho certeza se isso funcionaria ou não, mas parece promissor ...

EDIT:
Bem, eu gosto do meu bom e brilhante emblema de "boa resposta" desta resposta, mas depois de jogar com ele não acho que vai funcionar. Meu teste original estava em um kernel antigo (2.4.9), e a funcionalidade "montar em cima de si" parecia funcionar. Eu tentei novamente com um novo kernel (2.6.18) e parece não funcionar. Eu comecei a olhar para o trabalho (como renomear / var e / home para outra coisa e montá-los de volta. Eu não fui muito longe, porque eu achei isso na página man para montar na caixa mais nova:

Note that the filesystem mount options will remain the same as those on the original mount point, and cannot be changed by passing the -o option along with --bind/--rbind.

Oh bem ... - ainda é uma opção divertida ...

    
por 01.06.2009 / 16:17
3

Eu posso pensar em 2 maneiras de fazer isso, uma suja e outra boa. Vamos começar com o sujo.

Escreva um script de shell que seja executado regularmente como um cronjob, digamos a cada 5 ou 10 minutos. Ele explicitamente removeria o sinalizador exec de todos os arquivos nesses dois diretórios, ou seja,

chmod -R ugo-x /home /var

A melhor maneira é fazer isso no nível do sistema de arquivos. Criar novas partições para abrigar var e home, isso é considerado a melhor prática de qualquer maneira. Em seguida, adicione a opção "noexec" para montar. Isso impedirá, no nível do sistema de arquivos, a execução de arquivos armazenados nesses diretórios.

    
por 01.06.2009 / 16:14
2

Este é um exemplo perfeito do tipo de pergunta que deve ser respondida assim:

Você parece ter uma solução para um problema complexo e agora está fazendo perguntas específicas sobre como implementar essa solução. Você poderia, por favor, descrever o problema original que está tentando resolver?

Minha experiência é que é muito importante para um administrador de sistema saber quando responder a uma solicitação com "o quê? Por quê?". Quão importante depende da propensão dos usuários para descrever seu problema original ou tentar encontrar suas próprias soluções e pedir ajuda para implementá-las. Em certos ambientes, é a diferença entre soluções caras e catastroficamente ruins e boas soluções baratas.

    
por 01.06.2009 / 21:38
1

não se esqueça de certificar-se de que / tmp / var / tmp e outros diretórios graváveis pelo usuário também estejam nas partições montadas com sinalizador noexec.

    
por 01.06.2009 / 17:43
1

Acho que você também pode usar inotifywait com as opções -r, -m e -e attrib para redefinir o sinalizador -x se ele for definido pelos usuários

    
por 01.06.2009 / 17:55
1

Parece que você tem um problema com a política ...
... e presumivelmente isso foi causado por um problema real contra você ser paranóico.
Você não está limitando a eficácia da plataforma de computação ao fazer isso?

muitos scripts podem ser executados simplesmente chamando o interpretador diretamente:
sh ./mybashscript.sh
perl ./myperldaemon.pl

Então presumivelmente você está tentando impedir que um executável nativo seja executado?

Melhor para lidar com esse problema por meio de política e fiscalização / auditoria ...
na melhor das hipóteses, você manterá os usuários menos experientes afastados de qualquer maneira.

    
por 01.06.2009 / 19:52