Evolução Histórica dos Sistemas Operacionais A evolução dos sistemas operacionais foi uma conseqüência dos avanços ocorridos no hardware dos computadores. Temos três níveis de gerações de sistemas operacionais: O primeiro nível integrado pelos sistemas operacionais básicos, surgidos nos anos cinqüenta, limitava-se a auxiliar os programas nas operações de entrada e saída e na tradução nos programas fonte, escritos em linguagem pouco evoluídas. O segundo nível esteve disponível na década de 60 e a sua ajuda à programação foi mais decisiva, proporcionando tradutores simbólicos mais evoluídos, programas de serviços para transferência de informação entre periféricos e programas de controle de entrada e saída, ou seja, os famosos IOCS( Input Output Control System). O terceiro nível de sistemas operacionais surgiu na década de 70. A contribuição destes sistemas à programação foi tão grande que foram rompidas as normas clássicas do processo informático. Os tradutores de altíssimo rendimento então incorporados têm permitido hoje em dia a utilização de linguagem de programação simbólica quase idênticas à linguagem utilizada pelo homem, reduzindo sensivelmente o tempo gasto na produção bem como o tempo de aprendizagem de novas linguagens. Estrutura do Sistema Operacional Pode-se criar um sistema tão grande e complexo como um sistema operacional somente dividindo-o em pequenas partes. Cada uma dessas partes deve ser uma porção bem delineada do sistema, com entradas, saídas e funções, cuidadosamente definidas. Logicamente, nem todos os sistemas têm a mesma estrutura, ou seja, não apresentam a mesma forma de ligação entre as partes. Contudo, os sistemas operacionais modernos geralmente possuem as seguintes partes: I. Gerenciamento de processos - criar e eliminar, suspender e retomar, sincronismo e comunicação entre processos; II. Gerenciamento da memória principal – manter o controle das partes da memória que estão sendo usadas e por quem, decidir que processos serão carregados para memória quando houver espaço disponível, alocar e desalocar espaço de memória quando necessário; III. Gerenciamento de memória secundária – o SO é responsável pelas atividades de alocação de espaço livre. IV. Gerenciamento de Entrada/Saída – manter os device drivers para comunicação com os deferentes dispositivos, um buffer-caching para o sistema; V. Gerenciamento de arquivos – criar e eliminar arquivos e diretórios, manter mapeamento dos arquivos em disco; 1 VI. Proteção do sistema – se um sistema é multiusuário e permite múltiplos processos concorrentes, estes processos devem ser protegidos de outras atividades; VII. Networking – em um sistema distribuído (fracamente acoplado) cada processador tem sua própria memória e seus processadores que se comunicam através do SO. A comunicação entre eles deve considerar roteamento e estratégias de conexão; VIII. Interpretador de comandos – um dos mais importantes programas do SO é o interpretador de comandos, que serve de interface entre o usuário e o SO. Alguns SO’s incluem este programa no próprio núcleo (kernel). Já outros sistemas, como o DOS e o UNIX, tratam o interpretador de comandos como um programa especial que é executado quando uma sessão é iniciada. Com isso, um sistema operacional fornece um ambiente para execução, melhor dizendo, fornece serviços para os programas e também para os usuários desses programas. A História do Sistema Operacional LINUX O Sistema Operacional Linux foi originalmente criado por Linus Torvalds na Universidade de Helsinki na Finlândia. Ele foi desenvolvido com a ajuda de vários programadores através da Internet. Linus teve seu projeto inspirado pelo seu interesse em Minix, um pequeno sistema Unix desenvolvido por Andy Tannenbaum. No dia cinco de Outubro de 1991, Linus anunciou a primeira versão "oficial'' de Linux, versão 0.02. Desde então, vários programadores responderam à sua chamada, e haviam ajudado a tornar Linux o completo sistema operacional que ele é hoje. Conceito de Linux Linux é um sistema operacional Unix independente, largamente distribuído para máquinas x86, Motorola 68k, Digital Alpha e Motorola PowerPC. Ele é uma implementação da especificação do POSIX com a qual todas as verdadeiras versões de Unix consentem. O núcleo de Linux não usa códigos de AT&T ou qualquer outra fonte de proprietário, e muitos dos softwares disponíveis para Linux são desenvolvidos pelo projeto Free Software Foundation's GNU. Enfim, é uma completa implementação do sistema operacional Unix. Como Unix, Linux é um multi-tarefa robusto, multi-usuário, sistema operacional de rede que ostenta uma longa lista de padrões aceitáveis . Possui suporte completo para ambas plataformas de 32 e 64-bits, múltiplas CPUs e alta performance para redes e outros periféricos. Ele suporta uma vasta variedade de softwares, incluindo X Windows, Emacs e redes TCP/IP (incluindo SLIP/PPP/ISDN). Muitas pessoas já executaram marcas de nível em sistemas 80486 Linux e acharam elas comparáveis com estações de trabalho médias da Sun e Digital. O Sistema Operacional Linux está disponível na Internet em diversos sites, e também com várias versões em disquetes ou CD-ROM. A parte central de Linux é coberta 2 pela GNU Public License (GPL), e é geralmente "empacotada" com vários binários que consistem em um sistema operacional trabalhando em Unix. Esses pacotes de softwares são chamados “distribuições” e chegam em muitos tamanhos e estruturas. Linux está sendo usado hoje por milhões de pessoas em todo o mundo. Ele é usado para desenvolvimento de software, rede (intra-office e Internet), e como plataforma para usuário. Linux tornou-se uma alternativa barata para os caros sistemas Unix. Gerenciamento de Memória A execução do LMM (Linux Memory Manager) exige uma estratégia de paginação com uma copy-on-write (copiado e marcado) confiando nas 386 páginas auxiliares. Um processo alcança suas tabelas de páginas de seu parent (durante um fork ) com as entradas marcadas como read-only ou trocado. Então, se o processo tenta escrever para este espaço de memória e a página é uma copy on write page, isto é copiado e a página marcada readwrite. Um exec ( ) resulta na leitura de uma página ou mais do executável. O processo então erra em qualquer outra página que precisar. Cada processo tem uma tabela de página que significa que pode acessar 1 Kb de tabela de página indicando para 1 Kb de 4 Kb, páginas que é 4 Gb de memória. Um diretório de página do processo é iniciado durante um Fork por copy-page-tables. O processo inativo tem seu diretório de página inicializado durante a sequência de inicialização. Cada processo usuário tem uma tabela descritória local que contém um código de segmento e um segmento de dados. Estes segmentos usuários extendem de 0 para 3 Gb (0 X c 0000000). Nos espaços usuários, endereços lineares e endereços lógicos são idênticos. No 80386, endereços lineares vão de 0 Gb para 4 Gb. Um endereço linear indica uma posição particular de memória dentro deste espaço. Um endereço linear não é um endereço físico --- isto é um endereço virtual. Um endereço lógico consiste de um seletor e um offset. O seletor indica para um segmento e o offset diz que distância na seção o endereço é localizado. O código Kernel e o segmento de dados são seções privilegiados definidos na tabela descritora global e extende de 3Gb para 4Gb. O Swapper - page - dir é organizado para que estes endereços lógicos e físicos sejam idênticos no espaço Kernel. Escalonamento O escalonador LINUX é baseado em time-sharing, ou seja, atua na divisão do tempo de processador entre os processos. O Scheduler é o programa encarregado de agendar os processos, isto é, ele deve escolher o próximo processo que vai rodar, deve decidir quando o tempo de um processo terminou, o que fazer com um processo quando ele requisita I/O e assim por diante. Ele é chamado de vários pontos do programa, como após colocar o processo corrente em uma fila de espera, no final de uma chamada de sistema ou qualquer 3 outro momento em que se faz necessário escalonar os processos. Ao ser chamado, o scheduler tem uma seqüência de ações que devem ser tomadas para que seu trabalho possa ser feito. Essas ações se dividem em: Kernel Work: o scheduler deve realizar uma série de rotinas especificas do kernel, como o bottom half handlers (que será tratado mais adiante) e deve tratar da gila de esperas de tarefas do scheduler. Seleção de processo: o scheduler deve escolher o processo que irá rodar. A prioridade é o meio pelo qual ele escolhe. Troca de processos: o scheduler salva as condições que o processo atual apresenta (contexto específico do processo) e carrega o contexto do novo processo que irá rodar. Em ambientes multiprocesados (SMP - Simultaneous Multi Processing), cada processador tem um scheduler para tratar separadamente quais processos irão rodar nele. Dessa forma, cada processo guarda informação sobre o processador atual e o último processador em que rodou. Processos que já tenham rodado em um processador tem preferência em relação aqueles que não tenham rodado ali ainda. Essa implementação permite um ligeiro acréscimo de ganho no desempenho do sistema. Políticas de Escalonamento Existem critérios para o escalonamento dos processos em Linux: Policy: Pode haver duas políticas de escalonamento round-robin e first-in-first-out (FIFO). Priority: A prioridade do processo é dada de acordo com o tempo que ele gastou para executar (em jiffies). Jiffies é uma variável que indica a quantidade de tempo que um processo pode ser executado, onde cada valor atribuído depende de cada máquina. Quanto maior o tempo em uma execução anterior, menor a prioridade do processo. Real time priority: Esse recurso é usado para processo de tempo real. Através disso, os processos de tempo real podem ter prioridade relativa dentro desse conjunto. A prioridade pode ser alterada através de chamadas do sistema. Counter: É a quantidade de tempo (em jiffies) que os processos têm permissão para rodar. É setada a prioridade quando o processo é rodado pela primeira vez e decrementada a cada tick do clock. Sistemas de Arquivos Visão Geral sobre Sistema de Arquivos 4 Conceitualmente, arquivos são mecanismos de abstração que fornecem uma forma de armazenar e recuperar informações em disco. A características mais importante de qualquer mecanismo abstração é a forma de identificar os objetos como os quais o mecanismo trata. Quando um processo cria um arquivo, é preciso que tal arquivo receba um nome, normalmente dado pelo processo. Quando tal processo termina sua execução, o arquivo continua a existir, podendo ser acessado por outros processos, usando para tanto o nome atribuído ao arquivo. O sistema de arquivos é a parte mais visível do sistema operacional. A maioria dos programas lêem e escrevem em pelo menos um arquivo. O sistema de arquivos encara o disco como se este fosse composto simplesmente por uma seqüência de blocos de tamanho fixo. Cada bloco pode ser composto por 1, 2, 4 ou mais setores físicos; desta forma, tamanhos possíveis de blocos (ou clusters) são 512 bytes, 1 KB, 2KB e assim por diante. Sistema de Arquivos Unificado O Sistema de Arquivos Unificado está presente em todas as variantes Unix.Ao contrário da grande maioria dos sistemas operacionais, unidades de armazenamento distintas são enxergadas como parte de um único e imenso diretório, de forma que quando estamos acessando um arquivo, por exemplo, no diretório /etc podemos estar acessando uma unidade de disco rígido enquanto o arquivo que estamos lendo na outra janela pode estar num CD-ROM. Conceitos Fundamentais O Linux organiza o seu sistema de arquivos em uma árvore hierarquizada, resultando em uma estrutura única que agrega todas as informações relativas ao sistema de arquivos. Cada nodo da árvore pode representar um arquivo, um dispositivo de entrada e saída, ou ainda um diretório. O Linux faz distinção entre nome maiúsculos e minúsculos. Normalmente um nome de arquivo é composto de nome e uma extensão, separada por ponto no Linux, o tamanho da extensão, se houver, fica a critério do usuário, e um arquivo pode até ter duas ou mais extensões. Ex : prog.c.Z. Não há limite de números de caracteres utilizados para dar nome a arquivos. O Sistema Operacional Linux, olha o arquivo como uma sequência de byte, sem nenhuma estrutura, isto dá uma flexibilidade espantosa ao sistema de arquivo. Os programas de usuários, podem colocar o que desejarem nos arquivos e identificá-los da forma que lhe for mais conveniente, o Unix não influência em nada nesta processo de identificação. 5 Tipos de arquivos O Linux suporta arquivos regulares, arquivos de diretório, arquivos especiais de caracteres e arquivos especiais blocados. Os arquivos regulares são aqueles que contém informações de usuários, por exemplos, tipo ASCII. Arquivos diretórios são arquivos usado na manutenção do sistema de arquivo. Arquivos especiais de caracteres estão diretamente ligado à entrada/saída e são usados para dispositivos seriais de entrada/saída, tais como terminais, impressoras e rede. Os arquivos especiais blocados são usado modelar dispositivos. Diretórios Para tratar dos arquivos, o sistema operacional normalmente lança mão do diretórios, no caso do Linux diretórios hierárquico. Os diretórios são um tipo de arquivo. No Linux todos os arquivos fazem parte de um diretório, assim eles são mantidos e organizados, os diretórios são meios de oferecer endereços dos arquivos, de maneira que o SO possa acessá-los rapidamente e facilmente, ao entra pela primeira vez em sua conta, o usuário já esta em um subdiretório denominado subdiretório de entrada. Conta É uma senha que é aberta pelo administrador do sistema (denominado de root) onde o usuário indentifica-se para o computador, que então dá acesso ao seu diretório de entrada, onde você pode executar os comandos permitidos a sua senha. Nos SO padrão Unix, a conta é obrigatória para todos. Acesso a arquivos O Sistema Operacional Linux, bem como os demais SO, trata o acesso a arquivos de forma randômica, ou seja, seus byte ou registros podem ser lidos em qualquer ordem. Operações sobre arquivos Os arquivos existem para armazenar informações e permitir a sua recuperação. As chamadas de sistemas mais comum relacionadas ao sistema de Arquivo Linux são chamadas que operam sobre arquivos individuais ou envolvendo diretórios e sistema de arquivos como um todo. A chamada CREAT não só cria um arquivo, mas também abre esta arquivo para escrita, independente do modo de proteção especificado para ele. O descritor de arquivo que a chama retorna fd, pode ser usado para escrever no arquivo. Se a chamada CREAT for executada sobre um arquivo existente, esta arquivo será truncado para o comprimento 0, desde que os direitos do arquivos assim o permitam. Para que um arquivo 6 existente possa ser lido ou escrito, é necessário que ele seja primeiramente aberto e se ele esta aberto para leitura, escrita ou para ambas as operações. Várias opções podem ser especificadas. O descritor de arquivo que a chamada retorna pode então ser usado para leitura ou escrita. Posteriormente, o arquivo deve ser fechado através da chamada CLOSE, cuja execução torna o descritor de arquivo disponível para ser novamente utilizado numa chamada CREAT ou OPEN subseqüente. A chamada READ é utilizada para ler o arquivo, os bytes lidos vêm em posição corrente de leitura. O processo que faz a chamada deve indicar a quantidade de informação a ser lida e providenciar um buffer para possibilitar a leitura. A chamada WRITE, os dados são escritos no arquivo, geralmente a partir da posição corrente. Se tal posição for a de final de arquivo, o tamanho do mesmo cresce. Se a posição corrente no momento da escrita estiver no meio do arquivo, os dados existente nesta posição estarão perdidos para sempre, pois a operação de write escreve os novos dados em cima dos antigos. Apesar da maioria dos programas ler e escrever arquivos sequencialmente, em algumas aplicações os programas devem ser capaz de acessar randomicamente qualquer parte do arquivo. Associado a cada arquivo, existe um ponteiro que indica a posição corrente do arquivo. Quando a leitura ou escrita for seqüencial, em geral, ele aponta para o próximo byte a ser lido ou a ser escrito. A chamada LSEEK têm três parâmetros: o primeiro do descritor de área para o arquivo, o segundo é a posição do arquivo, o terceiro informa se a posição é relativa ao inicio do arquivo, à posição corrente ou final do arquivo. O valor que o LSEEK retorna é a posição absoluta no arquivo após a mudança no ponteiro. Para cada arquivo o Linux mantêm o modo do arquivo (regular, diretório ou arquivo especial), seu tamanho, o instante da última modificação, e outra informações pertinentes. Os programas podem verificar estas informações, usando a chamada STAT. Seu primeiro parâmetro é o nome do arquivo. O segundo é um ponteiro para a estrutura onde a informação solicitada deve ser colocada. As chamadas do sistema relacionadas com os diretórios ou com o sistema de arquivo como um todo , em vez de um arquivo específicos. Os diretórios são criados utilizando as chamadas MKDIR e RMDIR, respectivamente. um diretórios o pode ser removido se estiver vazio. A ligação de um arquivo cria uma nova entrada no diretório que aponta para um arquivo existente. A chamada LINK cria esta ligação. Os seus parâmetros especificam os nome originais e novo, respectivamente. As entrada do diretórios são removidas via UNLINK. Quando a última ligação para um arquivo é removida, é automaticamente apagada. Para um arquivo que nunca foi ligado, o primeiro UNLINK faz com que ele desapareça. Os diretórios de trabalho é especificado pela chamada CHDIR. Sua execução faz com que haja mudança na interpretação dos nome dos caminhos relativos. A chamada CHMODE torne possível a mudança do modo um arquivo, ou seja, de seus bits de proteção. 7 Arquivos Compartilhados Quando vários usuários estão trabalhando juntos em um projeto, ele comumente precisam compartilhar arquivos. Em decorrência disto, muitas vezes é conveniente que um arquivo compartilhado apareça simultaneamente em diretórios diferentes que pertençam a diferentes usuários. A conecção entre um diretório e um arquivo compartilhado é chamada de ligação (link). O próprio sistema de arquivo é um gráfico acíclico dirigido , ou DAG, em vez de árvore. No Linux os blocos do disco não são listados no diretório, mas numa estrutura de dados associada ao próprio arquivo. Esta estrutura é chamada nó-i, é a forma como o Linux implementa compartilhamento arquivo. Sistema de Arquivos no Linux - Descrição O Sistema de Arquivos do Linux é estrutura de organização de arquivos em formato de árvore, que permite: · hierarquia (de diretórios e arquivos); · proteção das informações; · compartilhamento dos arquivos. Todos os arquivos linux estão arranjados em uma única árvore hierárquica. Em linux o usuário não precisa se preocupar com discos específicos como C:, D:, etc. Na verdade, o usuário não necessita saber como os arquivos estão arranjados fisicamente em um ou mais discos. O Linux suporta diversos sistemas de arquivos. Estes não são acessados via identificadores, e sim combinados numa estrutura hierárquica em árvore, que representa o sistema de arquivos como uma entidade única. Cada partição do disco pode conter um sistema de arquivos. Dentre esses sistemas destacamos: Minix: mais antigo e presumivelmente o mais confiável, mas bastante limitado em características (algumas datas não aparecem , máximo de 30 caracteres para nome de arquivos, etc...) e restrito em armazenamento (no máximo 64 Mb por sistema de arquivos). Xia: ma versão modificada do sistema de arquivos minix, o qual aumenta os limite de nomes de arquivos e de sistemas de arquivos, mas não introduz novas facilidades. Não é muito popular, mas comenta-se que funcione muito bem. ext2: mais poderoso e popular sistema de arquivos nativo do Linux. Desenhado para ser facilmente compatível com os avanços das novas versões, sem a necessidade de criar novamente os sistemas de arquivos já existentes. Ext: Uma versão antiga do ext2 que não é mais compatível com versões atuais. É raro vê-la 8 instalada em sistemas novos e mesmo os mais antigos têm sido convertidos para ext2. Adicionalmente há o suporte a diversos outros sistemas de arquivos, para simplificar a troca de informações com outros sistemas operacionais. Estes sistemas de arquivos funcionam como se fossem nativos, exceto pela perda de algumas facilidades presentes no UNIX, ou apresentam algumas particularidades. Msdos: Compatibilidade com MS-DOS (e OS/2 e Windows NT) através de sistemas de arquivos FAT/FAT32. Umsdos: Sistemas de arquivos MS-DOS estendidos para suportar nomes longos, donos, permissões, links e arquivos de dispositivos do Linux. Isso permite que um sistema de arquivos msdos possa ser usado como se fosse um sistema Linux, removendo a necessidade de uma partição distinta para o Linux. iso9660: O sistema de arquivos padrão do CD-ROM. A extensão Rock Ridge que permite nomes longos também é suportada automaticamente. Nfs: Sistemas de arquivos em redes que permitem o compartilhamento e o fácil acesso aos arquivos entre diversos computadores da rede. Hpfs: O sistema de arquivos do OS/2. Sysv: Sistema de arquivos do System V/386, Coherent e Xenix. Sistema de Arquivos Second Extended File System(ext2) Atualmente, o sistema de arquivos mais utilizado pelo Linux é o EXT2 (Second Extended File System). Nele os arquivos são guardados em blocos de mesmo tamanho, determinado durante a criação do sistema de arquivos. A partição lógica que ele ocupa é dividida em Block Groups, cada um contendo informações críticas para a integridade do sistema de arquivos, além de conter arquivos e diretórios. Cada Block Group contém um superblock, que contém informações sobre o sistema de arquivos. Normalmente, só o superblock do primeiro Block Group é lido. Os demais são utilizados caso haja corrupção do sistema de arquivos. Um arquivo qualquer no Linux é composto por uma quantidade inteira de blocos. Assim, cada arquivo tem seu tamanho arredondado de forma a ocupar um número inteiro de blocos. Por exemplo, se considerarmos blocos de tamanho de 1024 byes, um arquivo de 1025 bytes ocupará dois blocos, ou seja, 2048 bytes. Essa política de alocação implica que se desperdice metade do tamanho de um bloco por arquivo. Esse desperdício é, na verdade, resultante de um compromisso entre desempenho e economia de espaço em disco. A organização de blocos da partição em grupos de blocos também está relacionado com 9 um problema de desempenho, tendo como principal objetivo evitar a disperção de arquivos no disco. Dessa forma, o núcleo tenta alocar para um arquivo os blocos pentencentes a um mesmo grupo, reduzindo os movimentos de seek no momento de acess a esse arquivo. Cada grupo é composto por seis elementos distintos: superbloco, descritor do grupo, bitmap de inodos, tabela de i-nodos, e bloco de dados. A estrutura básica de construção de arquivos ext2 é o i-nodo: cada arquivo ou diretório no sistema de arquivo ext2 é descrito por um único i-nodo. Cada grupo de blocos possui um bitmap de i-nodos e uma tabela que contém ponteiros para i-nodos de cada arquivo, ou diretório, pertencente ao grupo. Um i-nodo descreve quais blocos compões um arquivo e também armazena uma série de informações relativas a esse arquivo. Todos os i-nodos de uma partição ext2 têm o mesmo tamanho (128 bytes). Modo: esse campo armazena informações relacionadas com os direitos de acesso ao objeto que o i-nodo referencia. Informações: fornece os direitos de acesso, leitura e escrita, associando o arquivo a um usuário e/ou a um grupo de usuários. Tamanho: o tamanho do arquivo em bytes, ou seja, o tamanho real do arquivo e não a quantidade de blocos que ele ocupa. Timestamps: data(hora, dia, mês, ano) em que o i-nodo foi criado ou modificado. Apontadores para blocos: valores que indicam quais blocos compõem o arquivo. Esses apontadores são empregados em 4 níveis: apontadores diretos (12), apontador de indireção simples(1), apontador de dupla indireção(1), e apontador de tripla indireção(1). Nas versões atuais do Linux, o tamanho máximo de um arquivo é limitado a 2 Gigabytes o que não explora toda a capacidade de endereçamento fornecida pela tripla indireção. Diretórios ext2 O sistema de arquivo ext2 implementa diretórios como um tipo de arquivo. O conteúdo desse arquivo é uma sequência de registros, na qual cada registro corresponde a um arquivo pertencente ao diretório. Qualquer diretório, quando criado, é inicializado com dois arquivos com nomes especiais: o arquivo ponto (.) e o arquivo ponto-ponto(..). O primeiro arquivo ponto, serve para fazer referência ao próprio diretório (diretório corrente), o segundo, arquivo ponto-ponto, referencia o diretório imediatamente superior na hierarquia, ou seja, o diretório pai do diretório corrente. Os diferentes campos que compõem cada um dos registros são: I-nodo: é o i-nodo que descreve a localização dos blocos que compõem o arquivo. 10 Tamanho da entrada: tamanho em bytes da entrada do diretório. Tamanho do nome do arquivo: quantidade de caracteres que formam o nome do arquivo. Tipo do arquivo: o ext2 posssui uma série de tipos para arquivos (arquivos regulares, pipes, diretórios, links simbólicos, dispositivos de entrada/saída e sockets). Cada um desses arquivos utiliza blocos de dados de diferentes formas, já que alguns arquivos armazenam dados (arquivos regulares e diretórios) e outros não (dispositivos entrada/saída). Nome: um string que fornece o nome do arquivo. Essa string possui um caracter escepical como marca de fim (\0) e deve sempre ocupar, por questões de desempenho, um tamanho múltiplo de 4 bytes. O tamanho do string é limitado em 256 caracteres. No ext2, um arquivo é localizado através de um caminho(path). O caminho é uma seqüência de diretórios separados pelo caractere barra ( /) e terminado pelo nome do arquivo. O caminho pode ser relativo ou absoluto. No caminho relativo, o sistema inicia a pesquisa pelo nome do arquivo a partir do diretório corrente. No caminho absoluto, a localização do arquivo é feita a partir do diretório raiz. Para encontrar o i-nodo que representa um arquivo no sistema ext2, o Linux necessita realizar um parsing no caminho para encontrar a hierarquia dos diretórios e finalmente acessar o arquivo. O ponto inicial para essa pesquisa é o primeiro i-nodo do super-bloco do sistema, já que nele estão armazenadas as informações relativas ao tamanho e ao formato do sistema de arquivos. De posse dessas informações, é então possível calcular qual grupo de blocos mantém o i-nodo referente a cada uma das entradas do caminho, para em seguida localizar o bloco correspondente no diretório, e acessá-lo para ler o i-nodo do próximo diretório na seqüência do caminho, ou o i-nodo relativo ao próprio arquivo. I/O no Sistema de Arquivos do Linux Um dos objetivos de um sistema operacional é “esconder” dos usuários as peculiaridades de um determinado hardware. A gerência de I/O realiza um papel análogo, ou seja, fornece uma interface uniforme para acesso a um determinado dispositivo independente de sua tecnologia. Um exemplo bastante comum são os discos rígidos. Nós encontramos discos IDE, EIDE, SCSI, entre outros, os quais possuem geometria, funcionalidades e capacidades diferentes. Entretando, eles são “vistos” de forma genérica como discos rígidos. Esse é o 11 objetivo da gerência da entrada e saída: criar uma camada de software que esconda, através de uma interface comum, os detalhes específicos de cada dispositivo. O processador não é o único dispositivo “inteligente” de um hardware. Cada dispositivo físico de entrada e saída possui um controlador. Um controlador nada mais é que um processador projetado para realizar uma determinada função específica. Assim, teclado, mouse e portas seriais são normalmente vinculados a um controlador serial; discos IDE, a um controlador IDE; discos SCSI, a um controlador SCSI; interface de rede, a controladores de redes; etc. Cada controlador possui um conjunto próprio de registradores de controle e estado(CSR- Control and Status Registers) os quais diferem de controlador para controlador. Os CSR são utilizados para inicializar, encerrar, diagnosticar e realizar operações em um controlador, ou seja, em um dispositivo. Ao invés de cada aplicação codificar a seqüência de comandos CSR, esses estão concentrados no núcleo do sistema operacional já que, por exemplo, ler e escrever são operações comuns a todas as aplicações. O software que implementa, no núcleo do sistema operacional, essas operações é conhecido como driver de dispositivos (device drivers). Device Drives - Drivers de Dispositivos Um driver de dispositivo é composto por um conjunto de funções e de estruturas de dados que controlam um ou mais periféricos tais como discos rígidos, teclados, mouse, monitores, interfaces de redes, etc. Cada driver interage com as diferentes partes do sistema operacional através de uma interface de programação(API) bem definida. Arquivos de Dispositivos Os arquivos de dispositivos são os arquivos especiais empregados para representar os dispositivos de entrada e saída. Além de um nome, cada um desses arquivos possui três atributos: tipo, número maior, número menor. O tipo do dispositivo indica se ele é um dispositivo orientado a caractere ou a bloco. O número maior é um número na faixa de 1 a 255 que serve para identificar uma classe de dispositivos. Todos os arquivos de dispositivos que possuem o mesmo número maior e o mesmo tipo dividem o mesmo device driver, pois isso representa que eles são da mesma classe. O número menor identifica um dispositivo específico entre um grupo de dispositivos de uma mesma categoria, ou seja, de um mesmo número maior. Normalmente, cada arquivo de dispositivo é associado a um dispositivo físico de entrada e saída, ou a uma partição lógica de um disco. Segurança O Sistema Operacional Linux é o segundo sistema operacional mais seguro do mundo. Seu pai, o Unix, é o único que o supera. Este é um dos motivos mais favoráveis a sua utilização, 12 principalmente em servidores. Outro fato que comprova esta segurança é que, das invasões realizadas com sucesso, apenas 1% está relacionado com Linux como alvo. Ainda, esta invasão a ele ocorre por dois motivos: falha humana (99,5% dos casos) e falha do sistema(0,5% dos casos). Porém segurança não é apenas relacionada à invasão mas também a vírus, trojans, worms e todos aqueles softwares mal intencionados. A cada 1000 pragas virtuais lançadas 1 é para Linux. O mais incrível é que qualquer falha ou praga é eliminada em questão de pouquíssimas horas devido ao grande número de programadores que o Linux possui. Diferente dos demais sistemas operacionais, o Linux fecha todas as portas por padrão, ou seja, mantém abertas somente as que realmente precisam estar. São justamente estas portas abertas que devem ser filtradas (protegidas) sem as fechar utilizando um Firewall (portão, muro, parede de fogo). Ele tem a função de liberar ou não o acesso as requisições feitas por endereços da internet (IPs), através de regras definidas pelo administrador do sistema. Não existe um padrão de regras que venham juntamente com o pacote padrão de instalação, se não for especificado o Sistema Operacional não vai filtrar. Outro ponto interessante de ressaltar é que todas configurações de firewall realizadas no Linux ou em qualquer outro sistema operacional devem ser tanto para meios externos (internet) quanto meios internos (intranet), nem mesmo os usuários internos estão livres da maldade. O Linux utiliza como firewall o iptables, que também pode ser chamado de ipchains ou ipfwadm depende da versão do kernel (núcleo do sistema) como mostra o quadro abaixo: Versão do Kernel Sistema Utilizado 2.0.x Ipfwadm 2.2.x Ipchains 2.4.x ou superior Iptables Segurança interna SAMBA - Compartilhamento de arquivos Apesar de praticamente não existir pragas para Linux, eles existem em massa para o sistema operacional da Microsoft. Isto representa perigo se você estiver em uma rede com 13 estações de trabalho windows, por conseqüência utiliza-se o samba para liberar acesso a arquivos no servidor linux. Este compartilhamento criado entre o servidor e estação pode permitir que um vírus ou trojan apague os arquivos lá encontrados, isto requer que você possua um bom antivírus instalado em cada estação e mantenha-o bem atualizado. Porém não basta apenas isso, mas deve-se tomar as seguintes precauções. . Não utilizar login único para toda a rede (mesmo que seja uma rede pequena). . Cada login deve ter acesso restrito somente ao que realmente precisa. . Contas de usuários visitantes devem ser evitadas, e se existirem deve ter o acesso mais restrito possível. . Não permitir que o usuários alterem as permissões de arquivo. . Não criar a conta root ou administrador. . Não compartilhar jamais a raiz do sistema (parece obvio mais já algumas pessoas o fazerem). SQUID – Acesso à Internet O squid é proxy(distribuidor) de internet, tem a função de liberar e controlar o acesso a internet em uma rede. Para que ele seja um aliado e ajudante no dia-a-dia é necessário bloquear além de sites e portas, as extensões executáveis e de arquivos compactados. Também devem se restringir o horário de acesso à Internet. CUIDADOS ESPECIAIS Senha e usuário root O ideal é que apenas que uma pessoa saiba esta senha. O usuário root não deve ser usado no cotidiano, apenas na instalação e manutenção dos serviços e usuários do servidor. SSH - Acesso remoto Este serviço permite o acesso à linha de comando do linux de qualquer outro local. Porém ao habilitar este serviço não deve-se liberar acesso ao usuário root. Telnet Protocolo e serviço muito conhecido nos ambientes Windows. Não é recomendado o uso, em hipótese alguma, no Linux, pois sua segurança já foi posta em cheque inúmeras vezes. 14 Windows 2000 A arquitetura do Windows 2000 é fortemente inspirada no princípio de micronúcleo, pois cada funcionalidade do sistema é oferecida e gerenciada por um único componente do sistema operacional. Todavia, módulos fora do micronúcleo executam operações em modo protegido (modo kernel), por isso, não é puramente micronúcleo. O Windows 2000 também segue uma organização em camadas, e explora o modelo orientado a objetos. Foi projetado de modo a permitir a execução de aplicações escritas para outros sistemas operacionais. A estrutura pode ser dividida em duas partes: modo usuário (onde estão localizados os sistemas protegidos) e o modo kernel (o executivo). O executivo constitui o núcleo do Windows 2000, exportando funções para serem utilizadas no modo usuário e funções que só são acessíveis por componentes (módulos) pertencentes ao próprio núcleo. Os principais componentes do executivo são: • Gerência de objetos; • Gerência de processos; • Gerencia de memória virtual; • Monitor de segurança; • Módulo de suporte; • Gerência de E/S. O núcleo do Windows 2000 foi projetado de forma a dar suporte ao multiprocessamento simétrico quando executado em máquinas multiprocessadas. O multiprocessamento assimétrico na presença de n processadores, um processador é pré-selecionado e dedicado a execução do sistema operacional, deixando para os processos de usuários os n-1 processadores restantes. Já o multiprocessamento simétrico, o sistema operacional pode ser executado em qualquer processador que esteja livre, ou ainda em todos os processadores simultaneamente, explorando melhor o potencial dos vários processadores existentes. Gerência de Memória O Windows 2000 implementa um sistema de memória virtual baseado em um espaço de endereçamento linear (plano) de 32 bits, o que oferece até 4 Gbytes de memória virtual. Esse espaço de endereçamento é normalmente dividido em duas partes de igual tamanho (2 Gbytes): uma destinada ao processo usuário (parte inferior) e outra destinada ao sistema operacional (parte superior). Em outros termos, uma aplicação (processo usuário) possui, no máximo, um tamanho de 2 Gbytes. Na realidade, o Windows 2000 oferece a opção de 15 modificar essa alocação inicial de forma a atribuir 3 Gbytes ao processo usuário e 1 Gbyte ao sistema operacional. Essa possibilidade permite que certas aplicações, como, por exemplo, banco de dados, armazenem uma grande parcela de dados dentro do espaço de endereçamento da própria aplicação (processo). O Windows 2000 prevê ainda uma extensão, denominada de VLM (Very Large Memory) – destinada aos processadores de arquitetura de 64 bits – que permite a um processo usuário alocar até 28 Gbytes de memória virtual suplementar. A alocação de memória por um processo Windows é realizada em duas fases. Inicialmente, o processo reserva um certo número de páginas da memória virtual sem necessariamente utilizá-la. Em seguida, à medida que o processo necessita de memória, essas páginas préalocadas são mapeadas a áreas efetivas de armazenamento no disco (área de swap). Essa segunda fase é conhecida, em terminologia Windows, como commit. Dessa forma, as páginas relativas ao espaço de endereçamento total de um processo usuário (2 Gbytes) podem estar em um de três estados: livres, reservadas ou dedicadas (commited). As páginas livres são as páginas do espaço de endereçamento não utilizadas pelo processo. As páginas reservadas correspondem àquelas pré-alocadas mas ainda não mapeadas a uma área de armazenamento real. Uma vez esse mapeamento efetuado, as páginas pré-alocadas tornamse páginas dedicadas. A distinção entre páginas reservadas e páginas dedicadas é justificada pela redução do tamanho do arquivo de paginação (swap) necessário a um processo. Apenas as páginas dedicadas consomem área de armazenamento. Por questões de desempenho, o Windows 2000 permite também que um processo, possuindo os privilégios necessários, bloqueie páginas em memória, fazendo com que essas páginas nunca sofram procedimento de swapping. Como a concepção do Windows é toda orientada a objetos, a memória alocada por um processo é representada através de um objeto memória. Dois processos podem compartilhar um mesmo espaço de endereçamento referenciando um objeto comum. Para o caso de compartilhamento de apenas uma região de memória o Windows oferece a abstração de visão (view). Essa abstração consiste em um processo mapear uma porção de seu espaço de endereçamento a um objeto (section object) o qual é utilizado por outros processos para acessos compartilhados a essa região. O mecanismo de view é bastante flexível. Ele permite que, em caso de swapping de uma região compartilhada de memória, as páginas correspondentes a essa região sejam transferidas ou para a área de swap ou para um arquivo especial (mapped file). È possível ainda fixar um endereço virtual para essa região compartilhada, permitindo assim que ela resida sempre em um mesmo endereço (virtual) em todos os processos que a utiliza. Finalmente, a área de view pode ter diferentes tipos de acesso, como por exemplo, apenas leitura, leitura e escrita, execução e outros. 16 Sistema de Arquivos O Windows 2000 possui um sistema de arquivos próprio, O NTFS (NT File System), projetado de forma a oferecer segurança de acesso, garantia da consistência de dados em presença de falhas e suporte a discos de grande capacidade. O Windows oferece ainda suporte a outros sistemas de arquivos como o FAT (MS-DOS e Windows 3,1), FAT32 (Windows 95, 98, Millenium), o HPFS (Os/2), além de formatos para cdrom (CDFS) e UDF (Universal Disk Format) para acesso a dados armazenados em DVDs. O grande diferencial do NTFS em relação aos seus predecessores da linha Microsoft está em cobrir as necessidades de alguns pontos considerados como críticos para aplicações em ambientes corporativos, a saber: - Facilidade de recuperação de dados e tolerância a falhas: para alcançar a confiabilidade, que e requisito as aplicações corporativas, uma das técnicas utilizada pelo Windows 2000 é o processamento de transações. Uma transação é definida como uma operação de E/S que altera os dados do sistema de arquivo, ou a estrutura de diretório do volume, de forma indivisível, isto é, cada alteração no sistema de arquivo só é considerada efetivada se for completamente realizada. O NTFS emprega esse modelo de transações para implementar seu recurso de recuperação do sistema de arquivos permitindo que este seja reconstruído, ou, ao menos, mantido em um estado consistente, após uma falha no sistema. - Segurança: O NTFS explora o modelo de objetos para oferecer segurança aos arquivos. Um arquivo aberto é implementado como um objeto arquivo o qual atua como um descritor, definindo os diferentes privilégios de acesso e requisitos de segurança a este. - Suporte a grandes discos e arquivos: o NTFS é projetado para suportar de forma eficiente acesso, manipulação e armazenamento em discos de grandes capacidades. - Fluxos de dados múltiplos: um arquivo e seus atributos são vistos como uma seqüência de bytes, denominada fluxo de dados. Dessa forma, no NTFS, um único arquivo pode ter associado vários fluxos de dados. Essa organização oferece uma grande flexibilidade pois permite que o fluxo de dados que compõe o arquivo seja interpretado de acordo com o fluxo de dados de seu atributo. - Facilidade de indexação: o NTFS permite que arquivos sejam acessados de forma indexada através de atributos (chaves de pesquisa) criados para cada arquivo. - Suporte para sistema POSIX: o NTFS implementa os recursos exigidos pelo POSIX como diferenciação de maiúsculas para nomes de arquivos e diretórios e atalhos (soft links). O NTFS é organizado sobre três estruturas básicas: setor, cluster e volume. O setor, normalmente composto de 512 bytes, é a menor unidade de alocação física do disco. 17 Setores contíguos podem ser organizados em grupos, formando os clusters. Um cluster constitui então a unidade básica de alocação do NTFS, isto é, um arquivo ocupa em disco sempre um número de bytes múltiplo do tamanho do cluster. Um volume corresponde a uma partição lógica do disco. Um volume é composto por uma série de clusters e possui de forma autocontida informações relacionadas a esse disco lógico, isto é, estrutura de diretório, cluster livres e ocupados, etc. Atualmente, o número máximo de clusters permitido a um arquivo no NTFS é 2³², sendo o tamanho máximo de um cluster limitado a 64 Kbytes. Um volume (disco lógico ou partição) é organizado em 4 regiões. A primeira região de um volume NTFS corresponde ao setor de boot, que na realidade pode ocupar até 16 setores físico do disco, apesar do nome “setor boot”. O setor de boot possui informações sobre o layout do volume, a estrutura do sistema de arquivos e o programa de boot do Windows. Essa região é seguida pela Máster File Table (MTF) a qual contém as informações sobre todos os arquivos e diretórios (folders) desse volume, assim como sobre o espaço livre. O MTF é organizado na forma de um conjunto de registros de tamanho variável, em que cada arquivo ou diretório possui um registro associado. Nesses registros, está incluído o próprio MTF, já que ele também não deixa de ser um tipo de arquivo. Cada registro do MTF mantém informações relacionadas ao atributo do arquivo (leitura, escrita, etc.), datas de criação e modificação, nome do arquivo, descritor de segurança. A terceira região é a dos arquivos de sistema, tipicamente de 1 Mbyte, em que são armazenados: uma cópia parcial da MFT (informações suficientes para recuperar erros físicos acontecidos na NFT); um arquivo de logs, referente ao controle de transações do NTFS; um bit map que fornece a ocupação dos clusters do volume; e uma tabela de atributos que define o tipo de acesso e esse volume (sequencial, indexado, etc). Finalmente, a quarta e última região corresponde à área disponível para os arquivos. Como mencionado anteriormente, um dos principais objetivos do NTFS é facilitar a recuperação em caso de falhas. A capacidade de recuperação do NTFS é essencialmente baseada em logs de transação. Uma operação que altere o sistema de arquivos é tratada como uma transação, a qual é gravada na região de logs associada a cada volume. Apenas após a gravação da transação é que a operação é efetivada. È importante salientar que a capacidade de recuperação do NTFS foi projetada para garantir a coerência e a recuperação de estruturas e dados do sistema operacional e não dados de arquivos de usuário. Dessa forma, um usuário jamais perderá o acesso a um volume (partição) em decorrência de uma falha física, ou do sistema, embora possa perder acesso ao conteúdo de um arquivo seu. Entretanto, para suprir a necessidade de recuperação total, o Windows disponibiliza uma série de ferramentas para a tolerância a falhas. 18 Windows NT O Windows NT é um sistema operacional para estações de trabalho e servidores. Utiliza novas tecnologias, é um sistema multitarefa de 32 bits com alto nível de segurança, capaz de executar uma grande variedade de programas, podendo ser executado em máquinas de diferentes fabricantes. Além da adaptabilidade do NT e do seu ambiente robusto, o NT foi projetado sob o modelo cliente-servidor, tanto interna como externamente. Cliente: um único computador de usuário que executa geralmente um processo e faz conexões de rede para acesso ao servidor. Servidor: um computador multitarefa que executa vários processos simultaneamente. Servidores são projetados para uma função específica de prover informações para vários outros micros simultaneamente. Suas principais funções são: servir arquivos, impressão, banco de dados e comunicação aos usuários da rede. O Windows NT (New Technology) é um Sistema Operacional multitarefa, ou seja, capaz de executar vários programas simultaneamente, e cada programa pode executar vários processos. Por exemplo: você pode copiar arquivos, imprimir um texto e trabalhar em uma planilha simultaneamente, enquanto seu computador recebe uma atualização de antivírus. É um sistema operacional multiplataforma, ou seja, pode ser instalado em computadores com processadores diferentes como Intel ou DECAlpha e pode executar programas escritos para outros Sistemas Operacionais. O Windows NT é bastante seguro em relação à travamento e “crashs”. O NT separa cada programa em áreas de memória diferentes, sendo que uma aplicação não interfere na execução de outras. Windows NT versão 4.0 O Windows NT 4.0, foi lançado em 24 de agosto de 1996. Essa atualização do Windows NT 3.5x aumentou a facilidade do uso e simplificou o gerenciamento, aumentou a taxa de transmissão da rede e forneceu um conjunto completo de ferramentas para desenvolvimento e gerenciamento de intranets. Em sua versão de servidor, incluía serviços mais rápidos de arquivos e impressão, suporte a aplicativos robustos, recursos de comunicação baseados em padrões e um servidor Web integrado (Internet Information Server). O Windows NT Workstation 4.0 usava a conhecida interface de usuário do Windows 95 e aprimorou o suporte a serviços de rede, fornecendo segurança e acesso fácil à Internet e a Intranets corporativas. Como o Windows NT 3.5x, o Windows NT 4.0 também tinha duas versões, Workstation e Server, que serviam para os mesmos propósitos. Service packs e optional packs subseqüentes ofereceram recursos adicionais incluindo funcionalidade de autoridade de certificação e chave pública, suporte a smart card, escalabilidade de multiprocessamento 19 simétrico (SMP) aprimorada, capacidade de clustering e suporte a modelos de objetos componentes (COM). Segurança A Microsoft fez com que a segurança se tornasse uma meta abrangente do sistema operacional Microsoft® Windows NT®. Como resultado, o Windows NT oferece o modelo de segurança mais robusto de todos os sistemas operacionais de servidores ou estações de trabalho disponíveis atualmente no mercado. O subsistema de segurança centralizado do Windows NT utiliza recursos de elaboração de segurança avançados como o logon de caminho confiável e um Security Reference Monitor - um local único no sistema operacional completo que fornece serviços de autorização de recursos. Esses recursos avançados fornecem um nível excepcional de garantia de segurança do sistema. Uma das razões para a estabilidade do NT é sua rígida segurança. De acordo com critérios de segurança nível C2 do Departamento de Defesa dos Estados Unidos, os endereços de memória devem ser protegidos de tal forma que uma aplicação não deve usar o mesmo endereço de outra. O Windows NT tem este nível de segurança e como resultado, aplicações executadas sob o NT são executadas em um espaço único de memória. Isto significa que se esta aplicação travar, somente aquela aplicação será afetada. Em outros sistemas operacionais, a falha em uma aplicação pode afetar todo o sistema sendo necessário desligar o micro. Com o Windows NT, basta teclar CTRL + ALT + DEL e finalizar o programa que está travado, mantendo o micro ligado e os outros programas intactos. Segurança no Internet Information Server Desde 1996, com o lançamento do Windows NT 4.0 com o Internet Information Server que a utilização deste produto tem se popularizado. Contudo, a "fama" do IIS é de um pacote de serviços para a Internet completamente inseguro. Infelizmente, esta afirmação possui um sentido indireto muito mais preocupante do que as falhas de segurança descobertas no produto. Significa que os profissionais que instalam servidores Windows e IIS não estão fazendo seu dever de casa ao corretamente configurar um servidor exposto para a Internet, potencial alvo de qualquer hacker ou defacer. Um servidor Windows 2000 / XP ou mesmo o IIS podem ser tão seguros quanto qualquer outra solução, desde que corretamente mantidos e configurados. Contexto de Segurança 20 O primeiro conceito que se deve ter em mente ao instalar o IIS, é de que o Windows NT / 2000 / XP possui um principio de unidade ou contextos de segurança. Estes contextos de segurança se traduzem, no Windows NT 4.0, nos famosos domínios, com seus Primary Domain Controllers e Backup Domain Controllers. Estes contextos, se corretamente configurados, proporcionam ao administrador uma enorme liberdade e flexibilidade na configuração de segurança, que passa a ser centralizada. Entretanto, em redes que possuam a exigência de serem seguras, traz também um risco: o comprometimento de um dos controladores de domínio traz toda a segurança abaixo, pois todas as contas são cadastradas e mantidas no mesmo. Para quem usa Windows 2000 / XP, foi introduzido o conceito de árvore, ou, no caso específico, do AD - Active Directory. Algumas características mudaram, como o fato de que não existem mais Primary ou Backup Domain Controllers. Contudo, o comprometimento de um Domain Controller traz tantos problemas quanto o comprometimento de um PDC ou BDC. Portanto, quando se deseja colocar um servidor IIS no ar, quanto mais restrito for o contexto de segurança, melhor. Assim, temos duas possibilidades: 1. Domínio ou AD separado para servidores Web .Em redes grandes, tipicamente em hosting centers, existe a necessidade de se utilizar as facilidades de controle de segurança centralizadas. Neste caso, deve-se posuir um domínio ou árvore AD separada APENAS para os servidores. Nenhuma outra parte da árvore ou qualquer outro domínio deve confiar nas contas ou neste contexto de segurança, que deve ser exclusivo para este fim. O servidor web deve ser instalado como MEMBER SERVER desta árvore ou domínio. Sob nenhuma hipótese, deve ser um controlador de domínio de qualquer natureza. 2. servidor Web instalado como stand alone server. Em redes com poucos servidores, tipicamente em um ambiente corporativo que não possui a finalidade de ser um provedor de serviços (hosting center por exemplo), o servidor web ou de serviços Internet deve ser um stand alone server, sem pertencer a nenhum domínio, ou sem ser um controlador de domínio. Solução mais segura e interessante para ambientes com poucos servidores onde o custo deve ser mantido baixo (não possam existir controladores de domínio específicos para o ambiente ou contexto de provimento de serviços à Internet). Instalação O trabalho de configuração de segurança do IIS começa na instalação do Windows. Apenas os componentes necessários devem ser instalados, e serviços e programas desnecessários devem ser excluídos da instalação. Serviços como Simple TCPIP Services, ou SNMP não devem ser usados. Além de absolutamente não serem necessárias, aumentam o risco de invasão. Existe um texto no livro "Firewalls and Internet Security", escrito por 21 dois grandes especialistas na área, Cheswick e Bellovin, que traduz isso de forma simples e engraçada, mas eficaz: Axioma 1 (Murphy) Todos os programas têm bugs. Teorema 1 (Lei dos Programas Grandes) Programas grandes possuem ainda mais bugs do que o seu tamanho pode indicar. Prova: por inspeção Corolário 1.1 Um programa relativo a segurança possui bugs de segurança. Teorema 2 Se você não executar um programa, não importará se ele possui ou não bugs. Prova: como em todos os sistemas lógicos, (falso ==> verdadeiro) = falso. Corolário 2.1 Se você não executar um programa, não importará se ele possui ou não bugs de segurança. Teorema 3 Máquinas expostas devem rodar tão poucos programas quanto possível; os que rodarem, devem ser tão pequenos quanto o possível. Prova: corolários 1.1 e 2.1 Corolário 3.1 (Teorema Fundamental dos Firewalls) A maioria dos hosts não consegue atender às nossas necessidades: eles rodam programas demais que são grandes demais. Desta forma, a única solução é isolar atrás de um firewall se você deseja rodar qualquer programa que seja. (Firewalls and Internet Security: Repelling the Wily Hacker William Cheswick /Steven Bellovin) A instalação do IIS em si é uma das fases que mais preocupa. A instalação PADRÃO dele coloca muita coisa sem utilidade, e diversos componentes susceptíveis a ataque e invasão no servidor. Todo cuidado deve ser tomado nesta fase. A instalação deve IGNORAR componentes de exemplo, os sites de tutorial, e principalmente, as ferramentas de gerência em HTML. APENAS o servidor Web deve ser instalado. Caso demais serviços sejam necessários, como servidor de FTP ou SMTP, apenas estes componentes devem ser selecionados, e até a documentação deve ser deixada de fora. Se existe a necessidade de experimentar, brincar com o servidor (testes) ou ler a documentação, faça-o em um computador separado, especificamente para esta função. A Microsoft também publicou ferramentas de gerência de servidores Windows NT / 2000 através de páginas web, ou do IIS. Estas ferramentas devem ser ignoradas sumariamente, inclusive a quem vem com o próprio IIS. Considerações sobre Ambiente de Desenvolvimento 22 Uma das principais falhas encontradas em servidores de produção são ambientes usados também para desenvolvimento, em um mesmo servidor. Servidores de desenvolvimento devem ser completamente isolados da Internet, e serem específicos para esta finalidade. Servidores de produção devem possuir apenas componentes usados na produção, não no desenvolvimento do site ou de aplicações. A grande maioria das ferramentas de desenvolvimento "abre" demais a segurança em favor da agilidade no desenvolvimento. Patches e atualizações A correta instalação de atualizações e patches de segurança é fundamental e requisito básico para um servidor seguro. Alerter Permite a emissão de alertas sob determinadas condições. Computer Browser Permite que o computador participe de eleições para master browser de uma rede. Divulga informações para possíveis invasores, por exemplo, se o servidor é ou não o master browser de uma rede, o que pode potencialmente revelar se o servidor é um controlador de domínio. Indexing Service / Index Server Serviço que cria índices de documentos para pesquisa mais rápida. Um dos principais calcanhares de aquiles do Windows em termos de segurança. Não deve ser usado. Messenger Permite o envio de mensagens ou noticias de computador para computador, via NetBIOS. Pode ser usado para revelar nomes de usuários válidos para um potencial ataque de força bruta. Network DDE Antigo serviço que usa a infra-estrutura NetBIOS. possui diversas falhas de segurança. Print Spooler Spool de impressão. Pode ser usado em um ataque DoS. Remote Registry Permite a modificação remota do registro, assim como a importação de políticas a partir de um controlador de domínio. Caso possua o MS Exchange não pode ser parado. 23 Server Funcionalidade básica da rede Microsoft, é responsável pela funcionalidade NetBIOS / SMB. Os compartilhamentos de rede, por exemplo, é uma de suas funções.Em servidores Internet, definitivamente não deve ser usado. Task Scheduler (usado apenas no Windows NT ou no 2000) Permite o agendamento de tarefas e pode ser usado para executar remotamente comandos. Não deve ser parado no Windows XP, pois o mesmo usa este serviço para manutenções internas do sistema. Telnet Servidor de TELNET. O TELNET não deve ser usado em nenhum sistema operacional, nem mesmo em UNIX, quanto mais em NT / 2000 / XP. Após a parada deste serviço, devese ir ao painel de controle, adicionar e remover programas, Instalação do Windows, e remover todos os componentes desnecessários. Configuração Internet Information Server A primeira coisa que deve ser feita após a instalação do IIS é a parada ou remoção do site web padrão (Default Web Site). Para isto: Deve ser mudada a porta do site para qualquer outra que não esteja sendo usada, como 8888 por exemplo, e que esteja sendo convenientemente filtrada no firewall. Em Segurança (Security) deve se configurar o site padrão para ser somente acessado com autenticação integrada (desmarque qualquer outra opção); Também deve ser configurado o site para não ser acessado por nenhum endereço IP, nem mesmo 127.0.0.1, colocando Deny, e não configurando nenhum IP na lista; finalmente, deve ser parado o site. Assim, estaremos com uma configuração quase pronta para receber o novo site. Cria-se um novo site web, de preferência em um disco isolado (partição lógica) apenas para esta finalidade (ao instalar o Sistema Operacional, é uma ótima prática instalá-lo em uma partição, e deixar outra para dados separada). Tenha certeza de criar um diretório que não participe de uma estrutura já existente, para ser o root do site web. Uma vez configurado o site, na porta 80, configure-o também para funcionar apenas no endereço IP que deve (e não "All unasigned"). Agora, devemos configurar as extensões que o servidor irá interpretar. Devem ser removidas todas e quaisquer extensões que não estão em uso, e, inclusive, as extensões usadas pelo Index Server. Exemplo de extensões a remover: .htm, .idq, .htr, .idc, .printer. Percebe-se que a remoção das extensões deve ser realizada para cada site criado (caso exista mais de um). Ainda sobre o Index Server, deve ser desmarcado a opção "Index this resource" na tab "Home 24 Directory". Ainda nesta tab, especial atenção deve ser dada a opção "Write" que não deve ser usada. Nas permissões de execução, deixe "Scripts Only". Caso a permissão de execução seja necessária, o faça em um diretório separado, e sem direito de leitura ou escrita. Uma ótima prática também e usar o recurso de espaço de memória separada. Entretanto, algumas aplicações não funcionarão. Neste caso, é uma questão de tentativa e erro. FrontPage Extensions As extensões de FrontPage são uma fonte maravilhosa para hackers e defacers. Deve-se procurar evitar utilizá-las. Caso não seja possível, é uma boa medida é baixar do site da Microsoft a versão mais atual, e, no momento da instalação, ao ser perguntado sobre a segurança, responda que deseja manter o nível mais alto. Firewall Um quesito muito importante, para qualquer computador com serviços Internet, é estar atrás de um Firewall corretamente configurado. Obviamente, como estamos falando de um servidor Web, que geralmente usa a porta 80, apenas esta porta deve estar liberada, nenhuma outra. Muitos utilizam o Terminal Service do Windows 2000 / XP para gerência remota. Se for o caso, deve ser liberado a porta 3389/tcp apenas para os IPs ou redes que podem realizar tal gerência. Apesar de não existirem ataques conhecidos que permitam invadir um computador pelo Terminal Service, existem ataques DoS que podem tirar o servidor do ar. Personal Firewalls devem ser evitados. Muitos deles são eficientes, mas apenas para uso em estações de trabalho. Em servidores de alto tráfego, os Personal Firewalls podem ter um impacto negativo muito grande na performance de rede do servidor. Caso as medidas acima sejam implementadas, será muito difícil para alguém invadir o servidor. Gerência de Processos Um processo representa uma unidade de propriedade de recursos e de trabalho a ser realizado. É um dos meios que o sistema operacional dispões para organizar as muitas tarefas que ele precisa realizar. No Windows NT, a parte do sistema operacional responsável pela criação, gerenciamento e exclusão de processos é implementada pelo gerenciador de processos que fornece um grupo de serviços nativos de processo que os subsistemas de ambiente possam usar para emulas as estruturas de processos que lhes são únicas. Esta meta evoluiu com o objetivo do NT de proporcionar vários ambientes de sistema operacional que podem ser executados no modo usuário. Os processos nativos do 25 NT têm como caracterýsticas que o diferenciam dos processos de outros sistemas operacionais: o São implementados como objetos e são acessados usando serviços de objeto; o Pode ter vários threads sendo executados em seu espaço de endereçamento. o Tanto os objetos de processo quanto os objetos de thread têm capacidade interna de sincronização. o O gerenciador de processos do NT não mantém relacionamento pai/filho nem nenhum outro tipo de relacionamento entre processos por ele criado. Se abstrairmos, um processo no Windows NT compreende o seguinte: o Um programa executável, que define códigos e dados iniciais. o Um espaço de endereçamento privado, que é um conjunto de endereços de memória virtual que o processo pode usar. o Recursos do sistema, como semáforos, portas de comunicação e arquivos, que o sistema operacional aloca ao processo durante a execução do programa. o Pelo menos um thread (linha de execução). Estrutura dos Processos No Windows NT, desenvolvedores que escrevem aplicações em Win32, MS-DOS e POSIX nunca vêem os threads e processos nativos do NT. O subsistema Win32 e outros subsistemas protegem os programadores desses threads e processos, criando ambientes personalizados onde um programador do Win32 vê apenas processos relacionados ao Win32, um programador de POSIX vê apenas processos relacionados ao POSIX e assim por diante. Uma das principais tarefas de um subsistema de ambiente do Windows NT é emular a API que as aplicações clientes do subsistema estão esperando (as APIS Win32 ou POSIX, por exemplo). Uma outra importante função é implementar as estruturas de processo exigidas por esses clientes. Os recursos necessários a um ambiente típico são: o Criar e terminar processos e linhas. o Registrar e manter relacionamentos entre processos. o Efetuar operações (tanto locais quanto em rede) em nome de um processo cliente. 26 o Ler, gravar e manipular o espaço de endereçamento de um processo cliente. o Interromper um thread cliente, possivelmente alterando seu contexto no modo usuário e reiniciando-a. o Capturar e lidar com exceções geradas pelos processos clientes. Impedindo Uso Inadequado Para impedir o uso inadequado, o sistema de segurança do Windows NT (especificamente seus mecanismos de proteção ao objeto) assegura que tais operações serão sempre cuidadosamente controladas. No nível mais básico, os subsistemas de ambiente do Windows NT são simplesmente processos ordinários. Uma vez que virtualmente todos os processos do modo usuário são criados por subsistemas de ambiente, estes controlam as ações de todos os processos usuários do sistema. Espaço de Endereçamento O NT utiliza, entre outros recursos, a implementação da Memória Virtual para manter cada processo em seu espaço de endereçamento sem que haja interferência entre os processos. Toda vez que um processo usa um endereço de memória, o sistema de memória virtual traduz o endereço para um endereço físico. Ele também impede que os processos acessem diretamente a memória ocupada por outros processos ou pelo sistema operacional. Para executar o código do sistema operacional ou para acessar a memória do sistema operacional, um thread tem de estar sendo executado no modo irrestrito do processador (modo kernel). Coleção de Recursos Cada processo está anexado um conjunto de diversos recursos do sistema. A Ficha de Acesso descreve as informações de segurança relacionadas ao processo. Também vemos uma série de estruturas de dados criadas pelo gerenciador de memória virtual (VM) para indicar os endereços virtuais utilizados pelo processo. O processo não pode ler nem alterar diretamente estas estruturas; o gerenciador de memória virtual cria-as e modifica-as indiretamente quando o processo aloca memória. A tabela de objetos indica que o processo está executando em um único thread, está com um arquivo aberto e utilizando uma seção de memória compartilhada. Gerência de Memória Trabalhando com mecanismo de gerência de memória virtual (VM Menager) o Windows NT viabiliza uma forma flexível e eficiente para operacionalização de eventos neste 27 mecanismo. Usando técnicas de paginação, o espaço de endereçamento virtual é mapeado no espaço de endereçamento físico através da lógica do processador. Neste mecanismo, a gerência de memória implementa a técnica de paginação, que é responsável por manter em memória física somente parte da memória virtual em uso. Especificamente no Windows NT, o tamanho da página é definido em função do tipo de processador, permitindo que a variação seja de páginas de 4 a 64 Kbytes. Sendo assim tanto a memória virtual como a memória física são divididas em blocos com o mesmo tamanho. O conjunto de frames que um processo possui em determinado instante de tempo na memória principal e denominado working set. Quando um programa execute, parte de seu código e/ou dados esta no working set, enquanto que o restante e deixado em disco. Embora algumas paginas estejam no working set do processo e, consequentemente, na mem6ria principal, elas ainda estão escritas em termos de endereços virtuais e, portanto, sues instruções precisam ser mapeadas antes de serem executadas pelo processador. Cada página da mem6ria virtual "era, na tabela de paginas, um registro denominado Page Table Entry (PTE). Todo PTE tem, entre outras informações, um bit que indica se a pagina associada aquela PTE esta ou não no working set (bit de validade). O PTE também indica que uma pagina não se encontra no working set do processo, mas pode ser recuperada com seu conteúdo intacto, através do flag de transição (transition flag). Alem disso, o PTE possui flags que permitem implementar a proteção ao nível de pagina. Sempre que uma pagina e referenciada, o bit de validade da entrada da tabela de paginas correspondente e verificado. Caso ele esteja ligado indicara que esta e uma pagina valida, pode esta no working set. Desta forma o sistema poderá localizar a pagina na memória real, através das demais informações contidas no PTE. Por outro lado, se o bit de validade não estiver ligado, significara que esta e uma pagina nãovalida, não pertencendo ao working set do processo. Neste cave, podemos dizer que ocorreu um page fault, que e a exceção gerada quando uma pagina referenciada não esta no working set. Quando isto acontece, o sistema se encarregara de trazer a pagina pare o working set, atualizar o PTE e executar novamente a referencia a pagina, que agora será valida. No caso da referência a uma página válida, o processador deve traduzir o endereço virtual gerado pelo programa em um endereço físico. A memória virtual é então dividida em blocos de memória virtual denominados de páginas virtuais, enquanto a memória física é dividida em blocos de células denominados páginas físicas. O mecanismo de mapeamento através de uma tabela de páginas realiza então o mapeamento de ambas as memórias. Sistemas de Arquivos CD-ROM File System (CDFS) 28 O sistema de arquivo CDFS foi desenvolvido pare o Windows NT pare implementar leitura em dispositivos de CD-ROM. File Allocation Table (FAT) O sistema de arquivo FAT foi desenvolvido pare sistemas baseados em MS-DOS e posteriormente utilizados no MS-Windows e OS/2. O FAT tem pouca preocupação com desempenho e segurança, sendo que nomes de arquivos estão limitados a oito caracteres, um ponto e mais três caracteres de extensão. High-Performance File System (HPFS) Desenvolvido pare sistemas OS/2, o sistema de arquivo HPFS possui major compromisso com desempenho e segurança que o sistema FAT. Nomes de arquivos nesse ambiente podem ter no máximo 254 caracteres. Windows NT File System (NTFS) O sistema de arquivo NTFS foi projetado especialmente pare o Windows NT com o intuito de oferecer alto grau de segurança e desempenho. A seguir destacamos suas principais características: nomes de arquivos podem ter no máximo 255 caracteres, incluindo brancos; nomes de arquivos FAT podem suportar ate 255 caracteres; partições NTFS dispensam o uso de ferramentas de recuperação de erros; implementa proteção de arquivos e diretórios mas não implementa encriptação; menor partição recomendada e de 50 Mbytes; - não pode ser implementado em disquetes; reduz a fragmentação no disco, na medida em que tenta sempre utilizar espaços contíguos de disco pare a gravação de arquivos. O recurso de nomes de arquivos longos (long file name—LFN) implementado no NTFS pode ser estendido pare partições FAT. Aplicações que não permitem visualizar nomes longos poderão ter acesso aos arquivos e diretórios através de um codinome (alias), criado pelo Windows NT. Windows XP A denominação XP vem da palavra exPerience. O Windows XP foi idealizado com o objetivo de unificar, em torno de um único produto, seu mercado corporativo com seu mercado de usuários domésticos. Na realidade, essa unificação é feita através de duas versões do Windows XP: o Windows XP Personal Edition, destinado ao mercado doméstico, que substitui o Windows 95, 98, Millenium, NT (versão workstation); e o Windows XP Professional Edition, voltado ao mercado corporativo que substitui o NT nas suas versões server. 29 As principais novidades introduzidas pelo Windows XP estão relacionadas com mecanismos de proteção ao sistema de arquivos e conectividade à Internet. Sob o ponto de vista de proteção do sistema de arquivo, o Windows XP impede que arquivos antigos substituam versões mais recentes. No caso de drivers de dispositivos, é possível restaurar a versão anterior na eventualidade da instalação de um driver mais recente apresentar problemas. O suporte à proteção, na presença de múltiplos usuários, foi estendida em relação aos mecanismos oferecidos pelo Windows 98 e pelo Windows Millenium embutidos em seu próprio núcleo. Em relação à conectividade em rede, quando conectado à Internet, o Windows XP oferece ao usuário algumas funcionalidades típicas de firewall embutidas em seu próprio núcleo. Além disso, uma série de ferramentas buscando simplificar o uso do Windows por usuários leigos forma introduzidas, como por exemplo, gravação de cdrom diretamente a partir do Windows Explorer, emprego de temas para tela de fundo, atualizações automáticas, mecanismos para publicação de arquivos de imagens e de texto na Internet, entre outros. Entre as novidades do Windows XP, está ainda um mecanismo de proteção como pirataria denominada de WPA (Windows Product Activation). Seu funcionamento á baseado na criação de um código único, válido apenas para o computador no qual o Windows XP é instalado. Esse código é criado no momento da instalação e é obtido através de identificadores próprios únicos a cada computador, tais como número de série da BIOS, do disco rígido, o endereço físico da placa de rede (endereço MAC), etc. Esse código é então informado à Microsoft, que imediatamente gera e reenvia um código de liberação para o uso do Windows XP. Ambos os códigos, o gerado na instalação e o código de instalação, são cadastrados na Microsoft. Sempre que houver uma modificação de hardware da máquina, ou a tentativa de burlar o sistema de ativação do Windows XP, o usuário deverá repetir o procedimento de ativação do Windows XP ou seja, recontactar a Microsoft e gerar uma nova chave de ativação. Esse procedimento criou, na comunidade de usuários, muita controvérsia devido a rumores de que a Microsoft aproveitava-se dele para obter informações adicionais sobre a configuração da máquina, como por exemplo, os softwares instalados. Essa polêmica levou à análise das transações realizadas, pelo mecanismo WPA por consultores independentes que concluíram que apenas o código de ativação é enviado à Microsoft. O Windows XP foi desenvolvido com a preocupação de manter a compatibilidade com várias aplicações já existentes para a família Windows, principalmente jogos e multimídia. A Microsoft divulgou que todos os aplicativos existentes para Windows 98, Millenium e Windows NT continuarão a funcionar normalmente no Windows XP. A mesma preocupação de compatibilidade existe a nível de hardware, assim sendo, o Windows XP dispõe de uma grande gama de drivers para os mais diversos periféricos. Além disso, é 30 possível instalar em uma máquina Windows XP drivers existentes para outras versões da família Windows. As diferenças entre as versões Windows XP Personal Edition e Windows XP Professional Edition estão relacionados com desempenho e atividades de gerenciamento. A versão Professional explora o multiprocessamento real oferecido pelas máquinas multiprocessadoras, ao passo que a versão Personal é otimizada para máquinas monoprocessadoras. Sob o ponto de vista do Sistema Operacional, o Windows XP é um Sistema Operacional de 32 bits e herda em muito a arquitetura NT 5.0. As modificações, segundo a Microsoft, estão em otimizações de algoritmos básicos e nas estruturas de dados internas ao núcleo. Essas melhorias fazem com que o Windows XP apresente um desempenho melhor que seus antecessores. O Windows XP, assim como o Windows 2000 (NT 5.0), não fornece a capacidade de realizar boot em modo DOS. A compatibilidade com aplicativos que rodam sob DOS (como o Clipper) é feita exatamente da mesma forma que no Windows 2000, ou seja, através de um emulador DOS. 31 CONCLUSÃO Através do assunto descrito neste trabalho, pode-se verificar que os sistemas operacionais Linux e Windows, seja ele da versão 2000 ao XP, são sistemas operacionais que atendem a maioria dos requisitos fundamentais para suprir as necessidade de diferentes classes de usuários que possuam ou não um alto grau de conhecimento em informática. Cada Sistema Operacional estudado, possui características um pouco diferentes em relação ao gerenciamento de memória, escalonamento, sistemas de arquivos e segurança. No Windows percebemos, alguma semelhança entre suas versões, algumas melhoradas ou adaptadas para a próxima versão que seria lançada, mas em geral, todos os Sistema Operacionais criados seguiram uma linha de desenvolvimento que favoreça o usuário, que na verdade é o maior beneficiário dessa tecnologia. 32 BIBLIOGRAFIA JENNING, Roger. Usando Windows NT SERVER 4 – 3ª Edição. Rio de Janeiro, 1997. www.unicamp.br www.ufrn.br www.microsoft.com.br www.babbo.com.br www.boadica.com.br www.lunixit.com.br 33