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; nomes de usuário geralmente podem ir até 32 caracteres, sujeitos à determinação em tempo de compilação). p>
O Debian relaxa muito o cheque. A partir do squeeze, qualquer coisa menos espaço em branco e : é permitido. Veja bug # 264879 e bug # 377844 .
POSIX requer a permissão de letras de cada caso, dígitos e ._- (< href="http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_276"> como nos nomes dos arquivos ). O POSIX não define nenhuma restrição se você não se importa com a portabilidade. Várias restrições recomendadas vêm do uso:
- Colons, newlines e nulls estão certos; você simplesmente não pode usá-los em
/etc/passwdou/etc/group. - Um nome composto apenas por dígitos é uma má idéia -
chownechgrpdevem tratar uma seqüência de dígitos como um nome se estiver no banco de dados do usuário / grupo, mas outros aplicativos podem tratar qualquer número como um banco de dados numérico. id. - Um
-ou um.inicial em um nome de usuário não é recomendado, pois muitos aplicativos esperam poder transmitir$user.$grouppara um utilitário externo (por exemplo,chown $user.$group /path/to/file) ¹. Um.em um nome de grupo deve causar menos problemas, mas eu ainda recomendaria contra isso. -
/provavelmente causará problemas, porque alguns programas esperam poder usar nomes de usuários em nomes de arquivos. - Qualquer caractere que o shell expandisse provavelmente seria arriscado.
- Caracteres não-ASCII devem estar ok se você não se importa em compartilhar com sistemas que podem usar codificações diferentes.
¹ Todas as implementações modernas esperam chown $user:$group , mas suportam chown $user.$group para compatibilidade com versões anteriores, e há muitos aplicativos que passam um ponto para remover esse suporte de compatibilidade.