Como sabemos, optional
é um dos valores de controle nos arquivos de configuração do PAM.
De linux-pam.org :
opcional:
o sucesso ou falha deste módulo só é importante se for o único módulo na pilha associada a este serviço+tipo.
Estou confuso.
Aqui está o /etc/pam.d/login
:
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
Vejo duas regras com optional
controle apenas com ações.
Presumo que usamos apenas optional
regras de propósito não autenticado. Isso está certo?
Nota importante: os módulos opcionais não serão ignorados, serão processados, seus resultados serão ignorados, ou seja, mesmo que falhem, o processo de autenticação não será abortado.
Existem muitas situações em que você pode querer que uma ação seja executada (um módulo a ser executado) durante a autenticação, mas, mesmo em caso de falha, você não deseja que o processo de autenticação seja abortado.
Um exemplo prático é se você quiser usar pam para abrir automaticamente um dispositivo criptografado dm-crypt durante o login usando a mesma senha do usuário:
Observe que, se
required
for usado em vez deoptional
aqui, o primeiro login será bem-sucedido, pois o cryptsetup retornará 0 como seu código de saída, mas se o usuário fizer logout e fizer login novamente, o login falhará porque o dispositivo já está aberto e o cryptsetup retornará um código de saída diferente de zero. No entanto, neste caso, você ainda deseja que o login seja bem-sucedido.Este é apenas um exemplo que me veio à mente porque eu realmente o uso, ou seja, esta não é uma situação teórica, mas esta é uma entre muitas situações em que você deseja que um módulo com falha não aborte o processo de autenticação.
Outros usos práticos, além da resposta do Marcelo :
Todos eles são de uma VM do Ubuntu 16.04, onde nunca toquei na configuração do PAM (exceto no que diz respeito a quaisquer pacotes que instalei, que é de onde suspeito que as
pam_kwallet*
linhas vieram).pam_faildelay.so
oferece um excelente exemplo de um módulo ignorado que ainda fornece um feedback imediato e evidente: fazer você esperar se digitar a senha errada. Aqui está um módulo que você normalmente usaria comooptional
, já que o sucesso ou falha realmente não importa muito. Mas!pam_faildelay.so
suporta apenasauth
, então qualquer uso normal disso seriaauth optional
.