Veja o código fonte, especificamente libmisc/chkname.c
. A sombra é bastante conservadora: os nomes devem corresponder ao regexp [_a-z][-0-9_a-z]*\$?
e podem ter no máximo GROUP_NAME_MAX_LENGTH
caracteres (opção de configuração, padrão 16; os nomes de usuário geralmente podem ter até 32 caracteres, sujeitos à determinação do tempo de compilação).
O Debian relaxa bastante a verificação. No momento do aperto, qualquer coisa, exceto espaços em branco e :
é permitido. Veja o bug # 264879 e o bug # 377844 .
O POSIX requer a permissão de letras de ambos os casos, dígitos e ._-
( como nos nomes dos arquivos ). O POSIX não define nenhuma restrição se você não se importa com portabilidade. Várias restrições recomendadas vêm do uso:
- Dois pontos, novas linhas e nulos estão certos; você simplesmente não pode usá-los em
/etc/passwd
ou /etc/group
.
- Um nome que consiste apenas de dígitos é uma má idéia -
chown
e chgrp
deve tratar uma sequência de dígitos como um nome se estiver no banco de dados de usuários / grupos, mas outros aplicativos podem tratar qualquer número como um ID numérico.
- Uma inicial
-
ou a .
em um nome de usuário não é altamente recomendada, porque muitos aplicativos esperam poder passar $user.$group
para um utilitário externo (por exemplo chown $user.$group /path/to/file
) ¹. A .
em um nome de grupo deve causar menos problemas, mas eu ainda recomendo.
/
provavelmente também causará problemas, porque alguns programas esperam poder usar nomes de usuário em nomes de arquivo.
- Qualquer caractere que o shell expandisse é provavelmente arriscado.
- Caracteres não ASCII devem estar ok se você não se importar em compartilhar com sistemas que podem usar codificações diferentes.
¹ Todas as implementações modernas esperam chown $user:$group
, mas oferecem suporte chown $user.$group
à compatibilidade com versões anteriores, e há muitos aplicativos por aí que passam um ponto para remover esse suporte de compatibilidade.
chown
argumento: a sintaxe atual, pelo menos nos GNU coreutils, éuser:group
, com o ponto sendo aceito apenas por compatibilidade. Pode-se usarj.smith:j.smith
.