No / etc / group, qual é o significado do segundo campo?

18

Um /etc/grouparquivo de amostra contém as seguintes entradas:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:

As páginas de manual que eu li (Debian e OSX) dizem que o segundo campo é armazenar uma senha de grupo. Como raramente são usados, geralmente é colocado um asterisco *ou um xem vez de deixá-lo em branco.

A shadowpágina do manual também diz que esse segundo campo deve armazenar o resultado da cryptfunção. E se um resultado inválido for armazenado (como *ou !), significa que a senha não pode ser usada como método de autenticação.

Isso também vale para o grouparquivo? Por que acabo com três caracteres diferentes no meu grouparquivo, todos com o mesmo significado? Posso mudar tudo com segurança *?

Tonin
fonte
O que você faria mudando todos eles para *?
Jordanm 28/08
Estou vendo apenas o !uso de um único grupo em um único servidor dentre os 10 ou mais atualmente gerenciados. Pela simplicidade de alguns scripts de verificação, ter sempre o mesmo caractere lá esclareceria as coisas. Bem, se realmente significa o mesmo, é claro.
Tonin

Respostas:

28

Você está pensando que o !, *ou xtem um significado especial aqui, e, portanto, está preocupado com a possibilidade de haver alguma distinção entre eles.

O fato é que esses personagens são escolhidos simplesmente porque se destacam, pelo menos aos olhos ocidentais. Esses caracteres indicam um valor ausente ou um caso de exceção ou um aviso. Você pode colocar boogaboogaaqui e ter exatamente o mesmo efeito.

Isso ocorre pela maneira como as senhas são tratadas nos sistemas do tipo Unix. Quando o sistema recebe uma entrada de senha, ele faz a hash e a compara ao hash armazenado. Portanto, tudo o que importa aqui é que você use algum caractere ou sequência de caracteres que possivelmente não possa ser um hash de senha válido. (Também não deve incluir dois pontos, por razões óbvias.)

Embora não haja diferença entre esses caracteres da perspectiva do SO principal, existem algumas convenções:

  • Quando o pwconv(8)programa Linux vê x, isso significa que "já mudei esse hash de senha pública para o arquivo de senhas de sombra".

    Na prática, esse não é um caso importante, porque os dias de conversão para (ou, o céu o ajuda, de ) senhas de sombra estão atrás de nós agora.

  • Se você usa usermod -Lou passwd -lbloqueia um usuário, !tem um significado especial /etc/shadowporque essa é a convenção para "quebrar esse hash para que não corresponda mais".

    Adicionar qualquer outro caractere ao hash armazenado também o quebraria. Violar essa convenção apenas impede usermod -Uou passwd -ude desbloqueio de login do usuário. Da mesma forma, como você o bloqueou manualmente adicionando um personagem falso, você pode desbloqueá-lo manualmente removendo-o.

    Tudo isso é apenas trivial com relação a essa questão, no entanto. Não existe groupmod -Lou gpasswd -l, portanto, não há !convenção /etc/group.

    Mais trivialidade: se você está indo para contas de usuário bloqueio à mão, você deve ficar longe do [A-Za-z0-9/\]set, uma vez que estes são personagens legais para o hash. Essa é uma razão que usermodusa !aqui em vez de x.

Não vejo nada de errado em normalizar todos os seus /etc/groupcampos de senha, se isso faz você se sentir melhor. Ao fazer isso, você já está dizendo que está feliz em invadir esses arquivos manualmente, então provavelmente não é do tipo que usa as ferramentas que se preocupam com as distinções. Independentemente disso, a alteração não terá efeito na operação diária do sistema.

Warren Young
fonte
Obrigado pela sua resposta muito completa. Atualmente, escrevendo scripts para verificar usuários e grupos em meus servidores, eu também queria saber se alguma outra sequência de caracteres ou caracteres poderia ser encontrada nesse campo. Pela sua resposta e pelos detalhes não tão triviais, tenho uma visão muito melhor disso. Obrigado novamente!
Tonin
1
Para scripts, você provavelmente deveria estar ligando getpwent(3)e com amigos. O Perl possui wrappers para isso em sua biblioteca padrão, assim como qualquer outra linguagem de script focada em sysadmin do Unix. Se você estiver usando um idioma sem esses invólucros, seria uma boa desculpa para negociar. :)
Warren Young
Se você ainda estiver lendo coisas com quase seis anos de idade ... Obrigado pela resposta, vejo algumas das razões históricas pelas quais as pessoas usam coisas como xe *para marcar um campo de senha "não utilizado". Só que curioso ... a página de manual diz que o campo pode muito bem ser deixado vazio (o que no campo do banco de dados pode ser chamado de NULL - especialmente no Oracle, que define NULL e string vazia como iguais). Então, voltando ao / etc / group: por que usar xor !ou *, em vez de simplesmente deixar o campo vazio? Dois pontos consecutivos se destacam tão bem quanto qualquer um desses personagens. Não é importante - apenas curioso
mathguy 31/03
1
@ mathguy: Um campo de senha vazio significa "sem senha", não é a mesma coisa que um campo de senha contendo um caractere que nunca pode corresponder a uma senha real. Como a maioria dos sistemas Unix não usa senhas de grupo, é uma distinção sem diferença, mas você não gostaria de desenvolver um hábito que o levará a problemas, como na maioria dos sistemas Linux /etc/shadow. Além disso, rejeito a noção de que dois pontos duplos sejam igualmente claros. Rápido, quantos campos vazios estão aqui :::::::? Agora quantos :x:*:!:x:*::? Mesmo número de dois pontos, mas respostas diferentes, confio.
Warren novo