De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Adicionar usuários que iniciam com números no linux

Colaboração: Amauri Tiago Marx

Data de Publicação: 30 de junho de 2008

Na universidade onde trabalho, surgiu a necessidade de incluir usuários no linux (logins) que iniciassem com números (por exemplo: 10767).

Pesquisando no oráculo (google), verifiquei que diversas pessoas também têm essa necessidade, porém não encontrei solução para isso.

Usufruindo do conceito open source, resolvi estudar como funciona a validação no momento da inclusão dos usuários no sistema.

Bom, primeiramente, procurei em qual pacote se encontrava o comando useradd, o qual é responsável pela inclusão dos usuários e verifiquei que ele está contido no pacote shadow.

Como utilizo a distribuição Slackware, baixei o código fonte do shadow (no meu caso, shadow-4.0.3.tar.bz2) no site da distribuição.

Descompactei o pacote e comecei a fuçar um pouco no código.

Mesmo não tendo conhecimentos avançados de programação, não foi difícil chegar ao arquivo (de nome bem explicativo) chkname.c, localizado dentro da pasta libmisc.

Também não foi difícil achar a rotina de validação (de nome também muito informativo). Procure pelo seguinte bloco de códigos:

  good_name(const char *name)
  {
        /*
         * User/group names must match [a-z_][a-z0-9_-]*
         */
        if (!*name || !((*name >= 'a' && *name <= 'z') || *name == '_'))
                return 0;
  
        while (*++name) {
                if (!((*name >= 'a' && *name <= 'z') ||
                    (*name >= '0' && *name <= '9') ||
                    *name == '_' || *name == '-' ||
                    (*name == '$' && *(name+1) == NULL)))
                        return 0;
        }
  
        return 1;
  }

Então é só alterar essa função para permitir a inclusão de números também no início ou comentar o bloco inteiro, fazendo a função retornar sempre o número 1 (ou seja, o usuário sempre será validado). Neste caso, a função ficaria conforme a seguir:

  good_name(const char *name)
  {
        /*
         * User/group names must match [a-z_][a-z0-9_-]*
         */
        return 1;
  }

Após estes procedimentos, é necessário compilar e instalar o pacote com os tradicionais make && make install.

Eu não sei o porquê do linux não permitir a inclusão de usuários iniciando com números no sistema. Talvez alguém que leia esse artigo possa me explicar (por favor, me envie um email).

Fica por aqui essa dica, espero ter contribuído para a comunidade.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Amauri Tiago Marx