Por que sublinhados não são permitidos em nomes de usuários em algumas distros (Debian por exemplo)

8

Então, por que o sublinhado foi considerado um caractere ruim para nomes de usuário no Debian (e possivelmente outras distribuições) enquanto foi removido do adduserNAME_REGEX do Ubuntu no Ubuntu?

Sam
fonte

Respostas:

7

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.

abanar
fonte
1
Mas a questão era _não :...
Josh
O @ também não é permitido no posix, pelo menos de acordo com o adduser #
Sam
E sim, enquanto isso explica por que você não deve permitir: não explica por que _ é ruim.
Sam
1
_é permitido por padrão, consulte a edição. Dei um exemplo do personagem proibido :para mostrar os possíveis problemas com ele.
wag
@Sam, @ não é permitido em POSIX, consulte askubuntu.com/a/405668/13482
Daniel Serodio
3

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.

tmow
fonte
Você não poderá usar :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.
Gilles 'SO- stop be evil'
@Gilles sim, você corrigiu a resposta, mas o sublinhado está bom, para responder à pergunta que o NAME_REGEX existe para evitar algum tipo de erro, mas não está definido como padrão, porque normalmente alguns desses caracteres são permitidos.
tmow
0

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?

tshepang
fonte
Talvez eu tenha interpretado mal. Acabei de me lembrar de editar o /etc/adduser.conf em um servidor Debian e o NAME_REGEX (ou seja, o nome não permitido regex) continha um sublinhado. No entanto, foi comentado lá, mas acho que assumi que ele representava o NAME_REGEX padrão.
Sam
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.
Josh
Lenny Debian (estável enquanto escrevo) não tem NAME_REGEXem /etc/adduser.conf, e as built-in proíbe padrão _.
Gilles 'SO- stop be evil'