Apenas por curiosidade sobre a seguinte situação
Quando o adduser
comando é executado da seguinte forma:
sudo adduser optimusprime
Adding user `optimusprime' ...
Adding new group `optimusprime' (1015) ...
Adding new user `optimusprime' (1013) with group `optimusprime' ...
Creating home directory `/home/optimusprime' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for optimusprime
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
Observe que existem 5 campos opcionais disponíveis para gravar dados. Se eles forem deixados vazios como padrão quando o cat /etc/passwd
comando for executado, o registro desse usuário aparecerá da seguinte forma:
optimusprime:x:1013:1015:,,,:/home/optimusprime:/bin/bash
Observe a ,,,
parte GECOS. Representa 4 campos como A,B,C,D
e não 5 como A,B,C,D,E
. Por que essa diferença ou incompatibilidade entre eles? Para ser honesto, eu esperava
optimusprime:x:1013:1015:,,,,:/home/optimusprime:/bin/bash
O que representa também os 5 campos disponíveis através do adduser
comando.
E se for usado o usermod
comando da seguinte forma:
sudo usermod -c "A,B,C,D,E" optimusprime
O usuário aparece como:
optimusprime:x:1013:1015:A,B,C,D,E:/home/optimusprime:/bin/bash
Eu sei que é possível até adicionar mais campos através do usermod
comando da seguinte forma:
sudo usermod -c "A,B,C,D,E,F" optimusprime
sudo usermod -c "A,B,C,D,E,F,G" optimusprime
Portanto, as execuções desses comandos são refletidas da seguinte forma, respectivamente
optimusprime:x:1013:1015:A,B,C,D,E,F:/home/optimusprime:/bin/bash
optimusprime:x:1013:1015:A,B,C,D,E,F,G:/home/optimusprime:/bin/bash
À primeira vista não está claro se o GECOS se baseia no mínimo em 4 ou 5 campos.
A página de manual do arquivo /etc/passwd,
man 5 passwd
, é particularmente concisa a esse respeito:POSIX também não ajuda em nada - na verdade, o padrão POSIX para a estrutura de senha, pwd.h , não exige nenhum GECOS ou campo de comentário:
Se olharmos para a implementação da glibc, ou seja,
/usr/include/pwd.h
conforme fornecida pelolibc-dev
pacote, vemos que seupw_gecos
membro é uma string C simples (ou ponteiro para char ):portanto, qualquer aplicativo que obtenha informações do banco de dados de senhas usando a família de funções glibc
getpwent
obterá o resultado como uma única string - depende essencialmente do aplicativo como ele escolhe analisá-lo. Em particular, a implementação BSD dofinger
comando - que é o que você obtém se instalar a partir do repositório do universofinger
Ubuntu - tokeniza a string usando strsep mas atribui apenas no máximo quatro subcampos separados por vírgula:No Ubuntu,
/usr/sbin/adduser
é um script perl que usa o arquivochfn
. Se você olhar para a fontechfn
(do conjunto shadow passwd), ele tokeniza os primeiros quatro subcampos de forma semelhante e depois atribui o restante como "slop
":Então eu acho que a conclusão é
não existe um padrão para o campo GECOS
os primeiros 4 subcampos têm interpretações convencionais baseadas no
finger
comando históricoqualquer coisa depois disso é opcional e está sujeita a interpretação dependente da aplicação.