inicia o processo para que ele não possa gerar novos

4

É possível iniciar um novo processo para que não possa gerar novos (código não confiável)?

Além disso, como eu inicio um processo para que ele não possa fazer nenhuma entrada / saída para arquivos e, em geral, para qualquer dispositivo?

    
por ren 25.08.2011 / 22:32

2 respostas

2

Isso soa como um trabalho para um sistema de controle de acesso obrigatório como Selinux ou AppArmor .

Este artigo sobre o SELinux lhe dará uma idéia de como esses sistemas podem ser poderosos e as ferramentas que você precisa para desenvolver essas políticas.

Cuidado, o seu desejo de restringir o acesso a todos os arquivos é susceptível de se voltar contra você. No Unix, "tudo é um arquivo", portanto, impedir totalmente o acesso a todos os arquivos impedirá que seu programa seja iniciado. Uma abordagem mais produtiva provavelmente restringirá a gravação de arquivos, seja inteiramente ou apenas a um diretório específico, e à lista de permissões de categorias de arquivos que o programa pode legitimamente ler.

Outra opção é usar chroot ou cadeias . Com esses recursos do SO, em vez de impedir a execução de I / O de arquivos ou de programas, você simplesmente criaria um ambiente restrito onde não houvesse nada sensível para o seu programa não confiável ler, escrever ou executar. Seu programa só poderia operar nos arquivos que você coloca na "caixa" com ele.

    
por 26.08.2011 / 01:15
1

Se o seu sistema usa pam , crie um usuário não confiável dedicado e dê uma olhada em /etc/security/limits.conf :

#Each line describes a limit for a user in the form:
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
[...]
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority

Você está procurando especificamente nproc e talvez nofile . No entanto, duvido que qualquer programa funcione com user hard nofile 0 . Ajuste melhor as permissões do sistema de arquivos para que o usuário dedicado não possa acessar nada que você não queira que ele acesse.

Disclaimer: Eu nunca usei isso sozinho. (Eu quero dizer o pam coisas. Criando um usuário não confiável dedicado não pode ser ruim.)

    
por 25.08.2011 / 23:18