Como o GDM é autenticado no servidor X?

4

Dado que você geralmente tem que se autenticar no X Server por meio de um "magic cookie" armazenado no arquivo .xauthority no diretório home do usuário: Como o GDM (como a maioria dos processos de login, rodando como root, eu assumir) conectar-se ao servidor X, a fim de desenhar a exibição de login? Ele usa algum arquivo .xauthority armazenado no diretório pessoal do usuário root ou ignora completamente a autenticação?

    
por Bratchley 27.05.2013 / 23:32

3 respostas

4

No meu sistema ps encontra isto:

/usr/bin/Xorg -br :0 vt7 -nolisten tcp -auth /var/lib/xdm/authdir/authfiles/A:0-wEJjac

O gerenciador de exibição inicia X com o arquivo auth para usar como parâmetro. Pode usar esse arquivo diretamente.

Editar 1:

É o KDM no meu caso, não o GDM.

    
por 28.05.2013 / 01:08
3

Teste sua teoria. Mova temporariamente esses arquivos do diretório /root do root e veja se esses arquivos:

  1. Porque você tem problemas para não poder mais fazer login
  2. Porque os arquivos são regenerados em /root

Manual de Referência do GDM

Eu daria uma olhada no Manual de Referência do GNOME Display Manager . Olhando para a documentação, parece que a raiz não interage com o X de forma alguma. Ele cria outro processo com o ID do usuário efetivo do usuário, que faz isso.

excerto de Manual de Referência do GDM - Seção Daemon do GDM

GDM was written with simplicity and security in mind. The overall design concept is this:

Upon startup the gdm daemon parses its config file gdm.conf. For each of the local displays gdm forks an Xserver and a slave process. The main gdm process will then listen to XDMCP requests from remote displays and monitor the local display sessions.

The gdm slave process opens the display and starts gdmlogin, the graphical login program. gdmlogin runs as a dedicated user and communicates asynchronously with the slave process through a pipe.

GDM relies heavily on the presence of PAM, Pluggable Authentication Modules, but supports regular crypt() and shadow passwords on legacy systems.

Remote displays can connect to the XDMCP port on the GDM host. gdm will grant access to hosts specified in the gdm service section in your TCP Wrappers configuration file. GDM does not support remote display access control on systems without TCP Wrappers. XDMCP support can be turned off completely, however.

Bancos de dados GDM

Parece que é específico da distribuição onde os arquivos de autenticação são armazenados. Para distribuições da Red Hat, elas estão em /var/run/gdm , para outros sistemas operacionais elas estão aqui, /var/lib/xdm .

Aqui estão os meus diretórios do Fedora:

$ pwd
/var/run/gdm

$ tree 
.
├── auth-for-gdm-8DkDnQ
│   └── database
└── auth-for-saml-PSW952
    └── database

2 directories, 2 files

Portanto, tenho dois diretórios auth, um para o usuário gdm e um para mim, usuário saml .

$ strings auth-for-saml-PSW952/database
grinchy
MIT-MAGIC-COOKIE-1
-G9 
[root@grinchy gdm]# strings auth-for-gdm-8DkDnQ/database
grinchy
MIT-MAGIC-COOKIE-1
-G9 

Olhando dentro dos arquivos do banco de dados, há informações sobre MIT-MAGIC-COOKIES .

    
por 28.05.2013 / 02:43
1

O código em gdm daemon é responsável pela comunicação com o X.
gdm-server.c :

#define X_SERVER_ARG_FORMAT " -background none -noreset -verbose %s%s"
...........
gdm_server_init_command (server);
...........
g_shell_parse_argv (server->priv->command, &argc, &argv, NULL);
...........
 /* server number is the FIRST argument, before any others */
argv[1] = g_strdup (server->priv->display_name);
len++;
if (server->priv->auth_file != NULL) {
    argv[len++] = g_strdup ("-auth");
    argv[len++] = g_strdup (server->priv->auth_file);
}

gdm-display-access-file.c lida com a criação de arquivos cookies / Xauth :

static FILE *
_create_xauth_file_for_user (const char *username,
.........
    gdm_display_get_x11_display_number (display, &display_number, NULL);
    *number = g_strdup_printf ("%d", display_number);
    *number_length = strlen (*number);
    *name = g_strdup ("MIT-MAGIC-COOKIE-1");
    *name_length = strlen (*name);
.........
    *cookie = gdm_generate_random_bytes (GDM_DISPLAY_ACCESS_COOKIE_SIZE,

Esses arquivos são armazenados em subdiretórios recém-criados em GDM_XAUTH_DIR (o padrão é <var>/run/gdm ) no arranque. Como Hauke apontou acima, gdm inicia o Xserver com o arquivo auth usado como parâmetro:

systemctl status gdm.service
...............
Main PID: 263 (gdm)
CGroup: /system.slice/gdm.service
       ├─263 /usr/bin/gdm
       └─287 /usr/bin/Xorg.bin :0 -background none -noreset -verbose 3 -logfile /dev/null -auth /var/run/gdm/auth-for-gdm-4X6qTS/database -seat seat0 -nolisten tcp vt1
    
por 11.02.2015 / 01:00

Tags