Crie com segurança contas de um aplicativo da Web não-raiz

2

Eu tenho um aplicativo da web que é executado como um usuário não privilegiado que precisa criar contas do Linux.

Eu preferiria não executá-lo como root, então o único esquema que eu penso é criar um programa su fi ciente C simples que use um argumento e execute o adduser para criar as contas. Como segurança adicional, este programa será 700 para a conta de usuário que executa o aplicativo da web.

Alguma outra ideia / abordagem para fazer isso?

    
por Dror 19.12.2012 / 00:18

2 respostas

2

Peça ao site que chame um script protegido usando o utilitário sudo para obter privilégios raiz somente quando necessário.

    
por 19.12.2012 / 00:20
0

Se você não precisar da criação de uma conta instant e um atraso de aproximadamente 1 min é aceitável, use a seguinte ideia.

  1. Deve haver dois diretórios graváveis pelo aplicativo da Web: www-tmp, www-job

  2. Cada vez que o aplicativo da web receber uma solicitação de criação de conta, ele criará um arquivo no diretório web-tmp. Em seguida, mova o arquivo para web-job. O motivo para não criar o arquivo diretamente em www-job é impedir que o cron job (consulte a próxima etapa) leia um arquivo incompleto.

  3. Crie um trabalho cron que tenha a permissão necessária, execute a cada minuto. Toda vez que ele é executado, ele processa todos os arquivos em www-job, cria as contas e, em seguida, exclui os arquivos. Continue verificando e processando até que o www-job esteja vazio. Use o bloqueio de pid para evitar a execução paralela.

Com o fluxo acima, seu aplicativo da Web não precisa de permissão adicional.

Aplicativo da Web é um balcão de pedidos. Cron job é linha de produção. www-job é a área de enfileiramento. Departamentos diferentes, permissões diferentes.

A tabela do banco de dados pode ser usada em vez do arquivo / diretório para filas.

PS: Seu cron job, não importa bash, php ou perl, deve fazer a verificação final antes de passar o argumento para uma chamada de sistema.

O nome de usuário deve conter apenas alfa (todos maiúsculos ou minúsculos se você quiser usar um nome de usuário insensível a maiúsculas e minúsculas) numérico, talvez com a adição do ponto final (.).

Para senha, verifique o comprimento mínimo. Certifique-se de que o script (verificação dupla, teste triplo) esteja transmitindo-o como uma sequência para a chamada do sistema, E a chamada do sistema esteja inserindo-a como uma cadeia.

    
por 19.12.2012 / 03:39