Como autenticar um usuário com o PAM, que não é o usuário que iniciou o aplicativo

3

Atualmente, estou desenvolvendo um módulo de autenticação para um aplicativo. A decisão foi tomada para fazer isso usando o PAM. Eu fiz este trabalho, mas ele só pode autenticar o usuário que iniciou o aplicativo.

Isso significa que, se eu iniciei o aplicativo como o usuário 'appname', a autenticação só me diz se ele é 'appname' e não 'some_user'

Se eu su para aquele 'algum_usuário' e iniciei a aplicação naquele terminal então eu posso autenticar 'algum_usuário' mas não 'nome_do_appel'

Eu ativei o sinalizador de depuração para pam_unix em common-auth. Resultando na seguinte saída quando rejeitar:

unix_chkpwd[4107]: check pass; user unknown
unix_chkpwd[4107]: password check failed for user (pamtest)
[app]: pam_unix(other:auth): authentication failure; logname=[appname] uid=1000 euid=1000 tty= ruser=[appname] rhost=  user=pamtest
    
por Zimrilim 28.02.2013 / 12:29

1 resposta

8

O PAM não é um daemon, mas apenas uma biblioteca. Como um usuário normal não tem acesso aos dados de autenticação (como /etc/shadow ), os programas executados sob um usuário normal não podem ser autenticados. Há uma pequena exceção: o usuário pode se autenticar, porque nesse caso o SETGID /sbin/unix_chkpwd é automaticamente chamado, que tem acesso a dados de autenticação (mas não permite autenticar outros usuários).

Então, você precisa dar ao próprio programa direitos de root via sinalizadores SUID (não o recomendo, pois é difícil não abrir um backdoor) para que ele seja executado na raiz ou precise ser autenticado por um serviço de rede ou executando um Programa SUID como su .

Em esta questão , possíveis soluções são discutidas.

    
por 28.02.2013 / 16:15