Quais caracteres devo usar ou não nos nomes de usuário no Linux?

39

Eu quero criar contas de usuário nomeadas após um nome de domínio. adduser reclama que os nomes de usuário precisam corresponder à NAME_REGEXexpressão regular.

adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.

Eu posso adicionar os usuários usando useradd sem reclamar. Existe uma razão que eu não deveria modificar a expressão regular para permitir ., -e _?

Quais caracteres causarão problemas e não devem ser permitidos nos nomes de usuários?

Esse é o padrão NAME_REGEX.

NAME_REGEX="^[a-z][-a-z0-9]*\$"
Ed Haber
fonte
11
Observe que NAME_REGEXjá aceita -desde que não seja o primeiro caractere.
Ring Ø
Por que não adicionar .? Considere um usuário chamado .ou ... Então, rmesse usuário nomeou ...
Jon
11
@ Jon: isso não é um problema, pois rmnão é o comando a ser usado ao excluir um usuário. Concordo que ..não é um nome sensato por razões semelhantes, mas rmnão é um deles.
toon81

Respostas:

26

Meu conselho é que você siga o padrão recomendado pelo NAME_REGEX padrão. Você pode colocar praticamente qualquer coisa em um nome de usuário em * NIX, mas pode encontrar problemas estranhos com o código da biblioteca que faz suposições. Caso em questão:

http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html

Minha pergunta para você: você tem muitos nomes de domínio que colidiriam entre si se você removesse a pontuação incomum? Por exemplo, você tem "QUALITY-ASSURANCE" e QUALITYASSURANCE "como nomes de domínio? Caso contrário, você pode simplesmente adotar uma política de remover caracteres incomuns e usar o que resta como nome de usuário.

Além disso, você pode usar a seção "nome real" do campo GECOS nas informações / etc / passwd para armazenar o nome de domínio original não modificado e os scripts podem extraí-lo com bastante facilidade.

steveha
fonte
Estou preocupada com a questão de encontrar erros inesperados aleatórios. Posso remover facilmente os períodos e ainda não tenho chance de conflitos de nome, mas o - pode causar um problema. Ainda é bastante improvável.
Ed Haber
Então o sistema debian que estou usando está usando um usuário www-data. Portanto, parece que - deve estar ok para ser usado nos nomes de usuário.
Ed Haber #
Na verdade, essa expressão regular permite '-' nos nomes de usuário! A primeira letra precisa ser az, mas as letras subsequentes dos nomes de usuário podem ser '-', az ou 0-9.
Steveha 13/10/09
Ohh! você está certo. Eu perdi o extra - quando eu estava olhando para ele.
Ed Haber
22

Mais especificamente, o padrão POSIX ("Interface de sistema operacional portátil para Unix") (IEEE Standard 1003.1 2008) declara :


3.431 Nome de Usuário

Uma sequência usada para identificar um usuário; consulte também Banco de dados do usuário. Para ser portátil em sistemas em conformidade com POSIX.1-2008, o valor é composto de caracteres do conjunto de caracteres de nome de arquivo portátil. O <hyphen>caractere não deve ser usado como o primeiro caractere de um nome de usuário portátil.


3.278 Conjunto de caracteres de nome de arquivo portátil

The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Qualquer nome de usuário que esteja em conformidade com este padrão é compatível com POSIX e deve ser seguro.

HopelessN00b
fonte
6
Embora isso seja verdade, geralmente é desajeitado ter caracteres em maiúsculas nos nomes de usuários - as pessoas têm problemas suficientes com senhas que diferenciam maiúsculas de minúsculas, e fazê-las lembrar que os nomes de usuário apenas os chutam quando estão fora do ar. (Exceção: Quando sua convenção de nome de usuário é ALL UPPERCASE CHARACTERS.)
voretaq7
11
Desde o POSIX.1-2017, essas definições mudaram um pouco. 3.431 Nome de Usuário é agora 3.437 Nome de Usuário e 3,278 portátil Character File Set é agora 3.282 portátil conjunto de caracteres Matrícula
Chuck Wolber
@ voretaq7 O que eu acho legítimo é preservar maiúsculas e minúsculas em um nome de usuário, mas fazer com que as entradas não sejam diferenciadas. Portanto, um nome de usuário pode ser CatInTheHat, mas faça login especificando catinthehat ou catintheHAT ou o que seja.
StackOverflowUser
1

No NAME_REGEX, pode-se deduzir que tudo, exceto a a z, em maiúsculas e minúsculas e o número de 0 a 9, seria ruim.

wzzrd
fonte
A palavra que você está procurando é "deduzida".
Wfaulk 9/10/09
observe o regex novamente, -também é aceito (apenas não como o primeiro caractere). Observe também que, por padrão, maiúsculas não são aceitas (não há gsinalizador nem estão A-Zincluídas no NAME_REGEX regex fornecido pelo OP.NAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman