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.