Altera a senha através do linux PAM sem executar o aplicativo como root

4

Um aplicativo que estou escrevendo terá alguma funcionalidade de alteração de senha. No entanto, estou me perguntando se é possível não executar a parte de gerenciamento de conta como root.

Neste momento estou a deparar com o problema de que, se estou a correr como utilizador que estou a tentar gerir, não consigo alterar a palavra-passe. Eu verifiquei que a senha está correta, primeiro autenticando com a senha dada. (Chamada separada para outra parte do módulo de autenticação.) Somente quando eu fizer uma chamada para chauthtok para alterá-lo para o usuário pamtest , isso resultará nisso como minha saída de depuração para a função de conversação:

START PAM CHANGE PASSWORD
PAM_CONV start [('Changing password for pamtest.', 4)]
PAM_CONV iter: Changing password for pamtest. 4
PAM_CONV end: [('', 0)]
PAM_CONV start [('(current) UNIX password: ', 1)]
PAM_CONV iter: (current) UNIX password:  1
PAM_CONV end: [(u'5ACN5pbmDFBVMHp', 0)]
PAM_CONV start [('Enter new UNIX password: ', 1)]
PAM_CONV iter: Enter new UNIX password:  1
PAM_CONV end: [(u'pdJb7ffsQTHWw4V', 0)]
PAM_CONV start [('Retype new UNIX password: ', 1)]
PAM_CONV iter: Retype new UNIX password:  1
PAM_CONV end: [(u'pdJb7ffsQTHWw4V', 0)]
Pass change failed for pamtest! '' (('Authentication token manipulation error', 20))
response:False

Em que o sinalizador de depuração para pam_unix.so fornece essa linha duas vezes no arquivo rsyslog auth.log :

<date> <time>   <system>    python  pam_unix(passwd:chauthtok): username [pamtest] obtained

Isso me leva a acreditar que há um problema em escrever a senha alterada no arquivo de sombra. O que provavelmente se deve ao fato de o root ser o único com acesso de gravação. E o código funciona quando eu o executo como root.

Esta é uma suposição correta e, em caso afirmativo, isso é normalmente feito executando o módulo como root? Ou existem outras opções disponíveis, como criar um usuário específico com apenas direitos para gravar no arquivo de sombra?

    
por Zimrilim 31.07.2013 / 13:56

2 respostas

1

This leads me to believe that there's an issue with writing the changed password to the shadow file. Which is probably due to root being the only one with write access. And the code does work when I run it as root.

Is this a correct assumption

Sim. /etc/shadow é somente gravável pelo root, então seu programa só funcionará quando tiver permissões de root.

Or are there other options available like creating a specific user with only rights to write to the shadow file?

Escreva um programa "setuid root". setuid significa que o programa sempre tem permissões de root, independentemente de qual usuário o iniciou. Seu programa, então, tem que garantir que

  • o usuário chamador só pode alterar sua própria senha
  • o usuário chamador forneceu a senha antiga correta
  • não há como o usuário chamador manipular seu programa para fazer algo totalmente diferente, como iniciar um shell de root

Claro, você tem que ser extremamente cuidadoso ao escrever programas programados. Seu programa agora tem mais permissões do que o usuário chamador, para que os invasores tentem explorar bugs no seu programa para elevar suas próprias permissões para o root.

    
por 14.09.2013 / 15:48
0

Você pode tornar o arquivo de sombra legível por um grupo dedicado, como "shadow", e fazer com que seu aplicativo seja executado em vez disso. Isso garante, pelo menos, que, se o sistema estiver comprometido, ele só poderá ler o banco de dados do usuário e nem todos os arquivos do sistema. No entanto, seu aplicativo não poderá alterar as credenciais de um processo, a menos que seja o superusuário ou tenha um recurso adequado conectado e ativo no momento.

    
por 31.03.2014 / 08:05