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
Download

Slide 1