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.