Solução de problemas de login do SO

Neste documento, descrevemos como solucionar problemas de login do SO usando o servidor de metadados. Para informações sobre como configurar o Login do SO ou instruções passo a passo, consulte Como configurar o Login do SO ou Como configurar o Login do SO com a verificação em duas etapas.

Você pode consultar o servidor de metadados de dentro de uma instância de máquina virtual (VM). Para mais informações, consulte Como armazenar e recuperar metadados de instância.

Antes de começar

Entradas de metadados de Login do SO padrão

O Compute Engine define um conjunto de entradas de metadados padrão que veiculam informações de Login do SO. Os metadados padrão sempre são definidos e configurados no servidor. A tabela a seguir descreve as entradas que você pode consultar.

Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadados Descrição
project/attributes/enable-oslogin Verifica se o Login do SO está ativado no projeto atual do Cloud.
instance/attributes/enable-oslogin Verifica se o Login do SO está ativado na VM atual.
oslogin/users/ Recupera informações de perfil para usuários do Login do SO. É possível transmitir parâmetros de consulta como username, uid, pagesize e pagetoken.
oslogin/authorize/

Recupera as configurações de permissão de login ou nível administrativo para um usuário de Login do SO.

Para verificar uma permissão, especifique o parâmetro de consulta policy. O valor do parâmetro de política precisa ser definido como login (para verificar a permissão de login) ou adminLogin (para verificar o acesso ao sudo).

Como verificar se o Login do SO está configurado

Se os metadados da instância e do projeto estiverem definidos, os metadados da instância terão precedência. Você pode executar os seguintes comandos nas suas VMs.

  1. Verifique se o Login do SO está configurado nos metadados da instância:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/enable-oslogin" -H "Metadata-Flavor: Google"
    

    Se o Login do SO estiver configurado na instância, a saída será TRUE. Um erro 404 indica que o login do SO não está configurado nos metadados da instância.

  2. Se o valor dos metadados não estiver configurado para a instância, verifique se o Login do SO está configurado para seu projeto:

    curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/enable-oslogin" -H "Metadata-Flavor: Google"
    

    Se o Login do SO estiver configurado para o projeto, a saída será TRUE. Um erro 404 indica que o login do SO não está configurado nos metadados do projeto.

Como visualizar usuários de Login do SO

Para visualizar as informações do perfil de vários usuários, você precisa especificar os parâmetros pagesize e pagetoken. Substitua pagesize e pagetoken pelo valor numérico necessário.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

Por exemplo, para definir pagesize como 1 e pagetoken como 0, execute o seguinte comando:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

Na maioria das distribuições, também é possível executar o comando Unix getent passwd para recuperar as entradas de senha para usuários da organização.

Como visualizar um usuário específico de login do SO

Para ver as informações de perfil de um usuário específico na VM, execute o comando a seguir:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

Substitua USERNAME pelo nome de usuário do usuário que você quer consultar.

Por exemplo, é executar uma solicitação para procurar o usuário user_example_com. O comando e a saída a seguir mostram uma formatação adicional para melhorar a legibilidade.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

A resposta será semelhante a:

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

Na maioria das distribuições, também é possível executar comandos Unix, como getent passwd username ou getent passwd uid, para recuperar informações de perfil.

Para recuperar as chaves SSH de um usuário, também é possível executar /usr/bin/google_authorized_keys USERNAME. Se nenhuma chave for retornada, talvez o usuário não tenha as permissões necessárias para fazer login na VM.

Como verificar as permissões de login

Para ver as permissões de login e nível administrativo, é necessário fornecer os parâmetros de consulta policy=login&email=LOGIN_NAME.

  1. Consulte o perfil do usuário para ver o valor do campo name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. Na saída, anote o name.

  3. Execute o comando login a seguir usando o valor de name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

Por exemplo, é possível consultar as permissões de login do usuário user_example_com que foi visualizado na seção anterior.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

A resposta ao comando indica que o usuário está autorizado a fazer login na VM:

{"success":true}

Como verificar se sua VM tem uma conta de serviço

É possível consultar o servidor de metadados para encontrar a conta de serviço associada à VM. Na VM, execute o seguinte comando:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

A resposta será semelhante a:

12345-sa@developer.gserviceaccount.com/
default/

Se nenhuma conta de serviço for encontrada, a saída ficará em branco.

A seguir