Estudo do MINIX: Parte 2 PCS-2042 –Sistemas Operacionais – 2ª etapa do projeto Erick Butler Poletto Felipe Giunte Yoshida Gabriel Iseppe Porto Geovandro Carlos C. F. Pereira Gabriel Augusto de Resende Hugo Pessoa de Barauna Supondo que todos os processos estejam bloqueados, qual é o código que está sendo executado? Resposta: Quando todos os processos estão bloquedos o código a ser executado é a tarefa idle_task. Essa tarefa é um código em assembly e pode ser encontrada em /usr/src/kenel/klib386.s. Sistemas Operacionais Pergunta 1: _idle_task: ! This task is called when the system has nothing else to do. ! The HLT instruction puts the processor in a state where it draws minimum power. push halt call _level0 pop eax jmp _idle_task ! empilha o endereço da rotina halt, para ! passar como parâmetro para a rotina _level0 ! level0(halt), chama a rotina _level0, ! passando o parâmetro halt dentro da pilha ! desempilha e coloca o conteúdo do topo da ! pilha no registrador eax ! da um jump incodicional para idle_task halt: sti hlt cli ret ! seta o bit de interrupções (IF) para habilitar interrupções ! instrução para fazer com que o processador entre ! num estado para economizar energia ! da um clear no bit de interrupções para desabilitar as ! interrupções ! retorna para onde foi chamado Sistemas Operacionais O código do IDLE_TASK (1): !*======================================================= * !* level0 * !*======================================================= * ! PUBLIC void level0(void (*func)(void)) ! Call a function at permission level 0. This allows kernel tasks to do things that are ! only possible at the most privileged CPU level. _level0: mov eax, 4(esp) mov (_level0_func), eax _level0_func int LEVEL0_VECTOR ret ! coloca o endereço de halt no reg. ! de uso geral eax ! coloca o endereço de halt no ! endereço indexado pela variável ! ativa a interrupçao de software ! da tabela de interrupções ! endereçado pelo valor ! de LEVEL0_VECTOR, no caso a ! rotina halt ! retorna para onde foi chamada Sistemas Operacionais O código do IDLE_TASK (2): Se o comando passwd estiver com o setuid desligado ele funciona (chmod -s passwd)? Estudar o setuid e chmod +s. Introdução: Para responder a esta pergunta devemos primeiro estudar como se configuram as permissões de acesso a arquivos em sistemas baseados em UNIX... Sistemas Operacionais Pergunta 2: Permissão de acesso especial: STUID • o STUID (set user ID) pega a permissão do arquivo e garante a permissão ao programa que pede o arquivo ao invés do usuário. • quando um programa tem o controle de acesso STUID setado ele é executado como se ele tivesse sido iniciado pelo dono do arquivo/programa. Sistemas Operacionais Parâmetros de permissão de acesso: • chmod u+s algumacoisa: seta o bit SUID no arquivo algumacoisa. • chmod g+s somestuff: seta o bit SGID no arquivo algumacoisa. Resposta: • Apesar de o comando passwd ter permissão para usuários normais (não-root), com a remoção da flag SUID ele passa a não funcionar para esses usuários (recebe-se o aviso 'permission denied'). Isto ocorre porque o comando passwd acessa arquivos com permissão somente para usuário root, como por exmplo o arquivo shadow. Sistemas Operacionais Estudo do chmod +s: Sistemas Operacionais Figura 1: permissão shadow Sistemas Operacionais Figura 2: referência shadow (1) Sistemas Operacionais Figura 3: referência shadow (2) Sistemas Operacionais FIM