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/passwd
ou/etc/group
. - Um nome composto apenas por dígitos é uma má idéia -
chown
echgrp
devem 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.$group
para 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.