Respostas:
POSIX especifica o uso de um conjunto portátil de caracteres para nomes de usuários e grupos.
_ - .são caracteres permitidos, NAME_REGEXverifica se o nome de usuário contém apenas caracteres especificados. Os desenvolvedores de distribuição definem, se outros caracteres forem negados. O Ubuntu, por exemplo, proíbe o uso de .por padrão.
A adição dessa restrição evita interferências com outras ferramentas do sistema, que podem interpretar caracteres especiais. Pense na variável $PATHquando tiver um usuário com o nome my:usere adicione seu diretório inicial a $PATH:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/my:user/bin
Os diretórios /home/mye user/bin(provavelmente) não existiriam. Além disso, /etc/passwdteria :mais dois do que o necessário.
Edit: O
Debian adduser(versão 3.110) usa /^[_.A-Za-z0-9][-\@_.A-Za-z0-9]*\$?$/para verificar nomes de usuário, _ é permitido desde NAME_REGEXque não o proíba.
_é permitido por padrão, consulte a edição. Dei um exemplo do personagem proibido :para mostrar os possíveis problemas com ele.
Uma pergunta semelhante já foi respondida aqui
Teoricamente, você pode usar quase qualquer caractere ASCII desejado como nome de usuário, mas, para evitar algum tipo de erro, como o mencionado no artigo acima, é possível definir a expressão regular que evita determinados problemas.
:uma nova linha ou um caractere nulo em um nome de usuário, mesmo se editar /etc/passwd(ou na maioria dos outros bancos de dados de usuários) manualmente.
Estou usando o Debian Squeeze e consegui criar um usuário com sublinhado adduser user_1,. Por que você diz que eles não são permitidos?
NAME_REGEXé o nome permitido regex, não o nome não permitido regex ... ou seja, se um nome corresponder NAME_REGEX, será válido.
NAME_REGEXem /etc/adduser.conf, e as built-in proíbe padrão _.
_não:...