O SSH não pode ler uma chave do arquivo autorizado_keys personalizado por causa de uma vírgula

O SSH não pode ler uma chave do arquivo autorizado_keys personalizado por causa de uma vírgula

Herdei algum código; entre outras coisas, existe um authorized_keysarquivo personalizado com chaves X.509 em um formato como este:

x509v3-sign-rsa subject:O=GrandsChocolatiers Ltd.,OU=Management,OU=Top

O processo é tal que o SSH lê o /mydir/authorized_keysarquivo customizado, se o /.ssh/authorized_keysarquivo não fornecer a chave correta. Tudo estava indo bem, exceto que houve uma alteração em uma chave e uma vírgula ( ,) teve que ser adicionada a um valor de chave.

subject:O=GrandsChocolatiers, Ltd.,OU=Management,OU=Top

Agora, recebo um erro sshd

error: x509key_str2X509NAME: cannot parse 'Ltd.'

error: key_read: uudecode subject:O=GrandsChocolatiers, Ltd.,...

Tentei escapar disso no arquivo de chaves usando \,, \\,colocando a string entre aspas simples e duplas, mas o erro ainda está lá, embora o texto do erro mude com o símbolo inserido.

Existe alguma maneira do SSH escapar da vírgula ao ler as chaves? Existe uma maneira de colocar um formato diferente da chave?

Dei uma olhada man authorized_keysna caixa e li o manual. Diz que uma barra também pode ser usada para separar, mas é usada em combinação com uma vírgula, então não vá por aí.

Nota: A chave não pode ser alterada.

Responder1

Depois de algum tempo, tentei me aprofundar um pouco para ver se há algo que eu possa fazer a respeito. Navegando pelo patch e pela página de manual, há várias coisas mencionadas:

[...] linha deve conter certificado X.509 codificado em base64 (estilo antigo) ou uma palavra-chave (novo estilo), opcionalmente seguida pelo símbolo '=' (igual) ou ':' (dois pontos), zero ou mais espaços e X Certificado .509 ``Nome Distinto'' (Assunto). A palavra-chave não diferencia maiúsculas de minúsculas e pode ser 'Subject' , 'Distinguished Name' , 'Distinguished-Name' , 'Distinguished_Name' , 'DistinguishedName' ou 'DN'. O separador de itens de assunto pode ser '/' (barra), ',' (vírgula) ou misto e a ordem não é importante.

Podemos observar que podemos separar os valores-chave também com uma barra, o que pode deixar o analisador mais feliz:

subject:O=GrandsChocolatiers, Ltd./OU=Management/OU=Top

Mas infelizmente não. O analisador parece muito "fictício", analisa ambos os separadores independentemente do contexto e não suporta nenhuma sequência de escape:

+static const char*
+x509key_find_subject(const char* s) {
+   static const char *keywords[] = {
+       "subject",
+       "distinguished name",
+       "distinguished-name",
+       "distinguished_name",
+       "distinguishedname",
+       "dn",
+       NULL
+   };
+   const char **q, *p;
+   size_t len;
+
+   if (s == NULL) {
+       error("x509key_find_subject: no input data");
+       return(NULL);
+   }
+   for (; *s && ISSPACE(*s); s++)
+   {/*skip space*/}
+
+   for (q=keywords; *q; q++) {
+       len = strlen(*q);
+       if (strncasecmp(s, *q, len) != 0) continue;
+
+       for (p = s + len; *p && ISSPACE(*p); p++)
+       {/*skip space*/}
+       if (!*p) {
+           error("x509key_find_subject: no data after keyword");
+           return(NULL);
+       }
+       if (*p == ':' || *p == '=') {
+           for (p++; *p && ISSPACE(*p); p++)
+           {/*skip space*/}
+           if (!*p) {
+               error("x509key_find_subject: no data after separator");
+               return(NULL);
+           }
+       }
+       if (*p == '/' || *p == ',') {
+           /*skip leading [Relative]DistinguishedName elements separator*/
+           for (p++; *p && ISSPACE(*p); p++)
+           {/*skip space*/}
+           if (!*p) {
+               error("x509key_find_subject: no data");
+               return(NULL);
+           }
+       }
+       return(p);
+   }
+   return(NULL);
+}

Portanto, se ainda for uma preocupação para você, você provavelmente precisará corrigir o código e/ou escrever para o autor deste código para corrigir isso (provavelmente emesta lista de discussão).

informação relacionada