Variáveis de ambiente do Linux (Ubuntu), shells e segurança

3

Estou tentando entender alguns conceitos em torno de variáveis de segurança e ambiente para um aplicativo da Web em execução no Apache no Ubuntu 10.04 Server.

Eu tenho alguns aplicativos que gostaria de executar como um usuário que não tem shell ou senha (entendo que isso é uma boa ideia, mas não sou especialista). Um dos aplicativos é um aplicativo da web iniciado por meio de um script de inicialização do sistema, os outros são utilitários iniciados em uma base ad-hoc da linha de comando via sudo com a opção -u .

Cada aplicativo precisa acessar o mesmo conjunto de variáveis de ambiente. Eu posso modificar o script que inicia cada aplicativo e definir as variáveis de ambiente lá, mas eu preferiria se as variáveis de ambiente estivessem de alguma forma definidas para o usuário sob o qual o aplicativo é executado.

Minhas perguntas são:

É possível definir variáveis de ambiente 'por usuário' para um usuário que não possui shell? Eu li " Definindo as variáveis de ambiente para um serviço sem um shell de login no Debian ", mas a solução dada é essencialmente a mesma que modificar cada um dos meus scripts de aplicativo.

Se eu não puder definir as variáveis de ambiente por usuário, quais são os riscos de segurança associados ao fornecimento de um shell ao usuário?

Quais são as alternativas ou recomendações para esta situação presumivelmente comum?

    
por Mike 02.06.2011 / 13:02

2 respostas

2

Usar um arquivo de configuração e adicionar as variáveis por meio do script de inicialização do aplicativo é realmente a maneira correta de lidar com isso. Se você precisar fornecer determinadas variáveis de ambiente para scripts ou binários que não sejam de shell (como perl, python ou java), chame-os com um wrapper de shell, forneça as variáveis necessárias e, em seguida, exec do script real.

Se seus aplicativos forem iniciados por algum tipo de script, ele deve ser iniciado chamando um shell (o shebang na parte superior do arquivo), mesmo que o usuário não tenha um shell de login. Você pode, portanto, modificar as variáveis de ambiente através dos arquivos rc do shell, da mesma forma que faria com os usuários comuns. Eu acredito que você ainda precisaria inserir a variável BASH_ENV para fazer com que os arquivos rc disparassem, já que você está chamando o script de forma não interativa.

Recomendamos enfaticamente que você use o método antigo e crie algum tipo de configuração para os aplicativos. Será muito mais fácil gerenciar a longo prazo.

    
por 02.06.2011 / 16:39
-4

As variáveis de ambiente são um aspecto do shell. Então, estou bastante certo de que não há shell == nenhuma variável de ambiente.

Como regra geral, eu não daria privilégios de login nas contas de serviço. A resposta curta é que é apenas outra coisa para se preocupar. É apenas mais um potencial ponto de invasão.

Pessoalmente, é aqui que eu usaria um arquivo de configuração (/etc/myapp.conf). Você pode ter apenas o script de inicialização que inicia o aplicativo da Web, fonte do arquivo e ter seus outros aplicativos olhar em um local padrão ou levar argumentos na linha de comando.

    
por 02.06.2011 / 15:42