pam_cracklib reporta a senha incorreta corretamente, mas o módulo pam_unix STILL altera a senha

3

No momento, estou tentando usar pam_cracklib que falha corretamente de acordo com o meu debug.log, mas mesmo que seja configurado como uma entrada password requisite em meu arquivo de configuração do PAM, ele ainda passa para o próximo módulo pam_unix que permite uma mudança de senha. Por que está permitindo uma alteração de senha?

Estou executando um aplicativo de driver de login por meio de sudo , que é a única maneira de saber como autenticar.

Aqui está o meu arquivo de configuração do PAM (chamado /etc/pam.d/validate ):

auth  required    pam_env.so
auth  required    pam_tally.so onerr=fail deny=3
auth  sufficient  pam_unix.so nullok try_first_pass 
auth  requisite   pam_succeed_if.so uid >= 500 quiet
auth  required    pam_deny.so

account  required    pam_unix.so
account  required    pam_tally.so
account  sufficient  pam_succeed_if.so uid < 500 quiet
account  required    pam_permit.so

password requisite   pam_cracklib.so debug retry=3 minlen=14 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
password sufficient  pam_unix.so md5 shadow nullok try_first_pass use_authtok
password required    pam_deny.so

session  optional    pam_keyinit.so revoke
session  required    pam_limits.so
session  [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session  required    pam_unix.so

Invalide a minha senha de usuário, forçando-a a alterá-la:

# chage -d 0 <user>

quando executo o aplicativo personalizado usando sudo my /var/log/debug.log produz o seguinte.

pam_unix(validate:account): expired password for user mike (root enforced)
pam_cracklib(validate:chauthtok): bad password: it is WAY too short
pam_unix(validate:chauthtok): password changed for mike
    
por jiveturkey 23.01.2014 / 20:41

1 resposta

3

Isso ocorre porque sudo executa seus comandos como root.

Se você marcar man pam_cracklib , verá o seguinte

   enforce_for_root
       The module will return error on failed check also if the user
       changing the password is root. This option is off by default which
       means that just the message about the failed check is printed but
       root can change the password anyway. Note that root is not asked
       for an old password so the checks that compare the old and new
       password are not performed.

Então, o que você precisa fazer é alterar sua linha pam_cracklib.so para dizer

password requisite   pam_cracklib.so debug retry=3 minlen=14 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

Tendo olhado para a fonte pam_cracklib.so, faz o seguinte na linha 804 (no Fedora 20 de qualquer forma)

  if (getuid() || options.enforce_for_root || (flags & PAM_CHANGE_EXPIRED_AUTHTOK))

Então, ele verifica o UID real do chamador e impõe a mudança ou não, dependendo se o UID real é 0.

Portanto, você deve ser capaz de definir seu binário e certificar-se de que o root seja o proprietário, então ele poderá alterar a senha e impor a decisão do cracklib. setuid'ing seus binários apenas define o uid efetivo para 0, não o real.

    
por 23.01.2014 / 21:02

Tags