Estou tentando entender como as permissões de usuário funcionam no Linux. O kernel inicializa e inicia init
como root, certo? O Init executa os scripts de inicialização e executa getty
( agetty
), novamente como root. Agetty apenas lê o nome do usuário e roda login
, ainda como root, eu acho. Nada interessante ainda. Mas o que o login faz? Não consegui encontrar nada melhor do que "ele tenta fazer login". Suponha que o login verifique que a senha corresponde (e estamos tentando fazer o login como usuário habitual), como isso muda a identificação do usuário? Eu pensei que deveria haver uma chamada do sistema para isso, mas não consegui encontrá-lo (talvez eu esteja apenas cego?)
Além disso, sobre su
. su
tem o bit 'setuid' definido; portanto, quando o executamos, ele sempre é executado como root. Mas quando dizemos a ele para fazer login como usuário habitual, ele novamente precisa alterar a identificação do usuário. Entendo corretamente que a mesma "mágica" acontece su
e login
quando eles precisam mudar de usuário? Se sim, por que ter dois programas diferentes? Há algum tipo de negócio sério acontecendo ao executar o login?