Existem várias maneiras de fazer isso, mas eu escreveria um pequeno programa ou script que incluísse as informações do usuário e executasse adduser
. O programa seria de propriedade de root, com o setuid bit set.
Mantenha o mais simples possível. Se você não higienizar sua entrada corretamente, você pode ter uma falha de segurança. Adicionar usuários a um sistema é um negócio perigoso, de qualquer maneira. O legal dessa estratégia é que todo o seu executável não precisa ser executado como root, apenas o script / programa que adiciona o usuário.
EDITAR:
No que diz respeito à entrada de santificação, a maneira como você faz isso depende de como você implementa o programa. Se você escrever em C, use a função execve () em vez de system (). Há um ótimo documento com exemplos de falhas de limpeza que podem ser exploradas no CERT . Se você estiver escrevendo em Python, prefira o módulo de subprocesso para system () por motivos semelhantes. p>
Eu higienizaria retirando todos os caracteres que não sejam letras ou números, a menos que você tenha uma necessidade específica. Os usuários estão criando senhas? Se assim for, isso torna mais difícil. A chave é que você não quer que eles sejam capazes de passar quaisquer caracteres especiais para o shell ou programa sendo chamado que tenha um significado especial. Para bash, alguns óbvios são $
, ;
, &&
. Para o mysql, você deve evitar no mínimo '
, "
e ;
.
Infelizmente, a higienização pode ser uma tarefa difícil. Se você puder enumerar todos os valores que seus usuários podem precisar usar, sugiro usar uma lista de permissões.