O nome do "serviço" do PAM ("sshd", "sudo", etc.) é compilado no aplicativo. É isso que decide qual arquivo será inicialmente carregado. Depois disso, as linhas @include são processadas conforme descrito no post do freiheit.
Como o pam decide quais arquivos em /etc/pam.d usar, dependendo se um usuário faz login via ssh, localmente, um console serial, etc?
Ele pode ser codificado nos programas, mas cada serviço tem seu próprio arquivo em /etc/pam.d geralmente nomeado após o nome do processo real. Consoles locais e seriais funcionam tanto no getty, que passa o logging real para "login", então você precisa olhar para /etc/pam.d/login. SSH é na verdade "sshd", então é em /etc/pam.d/sshd
Na maioria das distros modernas, esses arquivos contêm principalmente linhas como "@include common-password" ou "auth include system-auth", então, para esses dois, você precisaria olhar para /etc/pam.d/common -password ou /etc/pam.d/system-auth. Distros um pouco mais antigas (RHEL3, por exemplo), usam algo como "auth required pam_stack.so service = system-auth", que é uma versão baseada em módulos da mesma coisa.
Tags authentication security pam linux