Prévia do material em texto
W BA 11 34 _V 1. 0 ADMINISTRAÇÃO DE REDES LINUX 2 Allan Crasso Naia de Souza São Paulo Platos Soluções Educacionais S.A 2022 ADMINISTRAÇÃO DE REDES LINUX 1ª edição 3 2022 Platos Soluções Educacionais S.A Alameda Santos, n° 960 – Cerqueira César CEP: 01418-002— São Paulo — SP Homepage: https://www.platosedu.com.br/ Head de Platos Soluções Educacionais S.A Silvia Rodrigues Cima Bizatto Conselho Acadêmico Alessandra Cristina Fahl Ana Carolina Gulelmo Staut Camila Turchetti Bacan Gabiatti Camila Braga de Oliveira Higa Giani Vendramel de Oliveira Gislaine Denisale Ferreira Henrique Salustiano Silva Mariana Gerardi Mello Nirse Ruscheinsky Breternitz Priscila Pereira Silva Coordenador Henrique Salustiano Silva Revisor Paulo César Monteiro Nunes Editorial Beatriz Meloni Montefusco Carolina Yaly Márcia Regina Silva Paola Andressa Machado Leal Dados Internacionais de Catalogação na Publicação (CIP)_____________________________________________________________________________ Souza, Allan Crasso Naia de Administração de redes linux / Allan Crasso Naia de Souza. – São Paulo: Platos Soluções Educacionais S.A., 2022. 34 p. ISBN 978-65-5356-331-5 1.Administração de redes. 2. Linux. 3. Sistema operacional. I. Título. CDD 003.72 _____________________________________________________________________________ Evelyn Moraes – CRB 010289/O S729a © 2022 por Platos Soluções Educacionais S.A. Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de sistema de armazenamento e transmissão de informação, sem prévia autorização, por escrito, da Platos Soluções Educacionais S.A. 4 SUMÁRIO Apresentação da disciplina __________________________________ 05 Conhecendo o Linux _________________________________________ 07 Comandos e estrutura de diretórios _________________________ 17 Linhas de comando, interface do usuário e administração de tarefas _______________________________________________________ 28 Configuração e monitoramento de serviços _________________ 39 ADMINISTRAÇÃO DE REDES LINUX 5 Apresentação da disciplina Seja bem-vindo à disciplina Administração de Redes Linux! Nosso objetivo é apresentar os princípios da Administração em Redes Linux de acordo com as documentações dos principais sistemas operacionais baseados no Kernel do Linux. Durante nossas aulas, abordaremos o funcionamento da arquitetura Linux e falaremos sobre sua instalação, partindo de uma determinada distribuição. Além disso, estudaremos as diferenças entre gerenciamento do sistema operacional via interface gráfica e linha de comando, conhecido por CLI. Depois de aprendermos sobre a instalação e abordarmos os princípios básicos do Linux, partiremos para a apresentação dos comandos introdutórios para gerir o sistema operacional e seus recursos, bem como o interpretador de comandos Shell. Conhecido pela famosa “tela preta”, existem vários ambientes Shell no GNU Linux. Por padrão, muitas das distribuições do Linux utilizam o Bash, mas também citaremos outros Shells existentes e listados dentro do arquivo /etc/shells. Cabe ressaltar que cada Shell possui uma particularidade, e a maioria dos usuários se sente mais à vontade com o Bash. Falando do gerenciamento de redes Linux, inicialmente é necessário recapitular alguns conceitos introdutórios sobre redes de computadores, visto que termos como IP, roteamento e endereçamento são necessários para o bom andamento da disciplina e você precisa estar com eles claros. A partir daí, iniciaremos com comandos como ping, route e ifconfig, todos eles com um exemplo para nortear sua utilização. 6 É importante informar que a gerência do Kernel envolve operações que podem ser complexas e delicadas, principalmente quando um usuário depende de uma infra de redes, por exemplo, funcionando. Porém, frisamos que os conhecimentos abordados durante esta disciplina serão suficientes para solucionar alguns problemas enfrentados no cotidiano de um administrador de redes Linux. Diante dessa explanação resumida da disciplina, nós o convidamos a ler os materiais teóricos, assistir às videoaulas, fazer os exercícios e acompanhar os podcasts disponibilizados. Bons estudos! 7 Conhecendo o Linux Autoria: Allan Crasso Naia de Souza Leitura crítica: Paulo César Monteiro Nunes Objetivos • Conhecer o funcionamento da arquitetura Linux. • Realizar a instalação do Sistema Operacional Linux. • Realizar a administração de pacotes. 8 1. S. O. Linux Seja bem-vindo ao universo dos softwares livres. Aprender sobre Linux é uma excelente maneira de ramificar seus conhecimentos em tecnologia da informação. Antes de iniciarmos a conversa sobre gerenciamento de redes utilizando o Linux, vamos falar sobre os recursos que tornam esse sistema operacional importante. Você sabia que utiliza o Linux, ou já o utilizou, em seu celular? Ele é a base do Android. Isso quer dizer que ele não se limita à execução apenas em desktops ou servidores e outros dispositivos. Inclusive essa é uma das principais razões para aprendermos Linux, pois ele é utilizado em muitos dispositivos. O Linux não é tão popular quanto o Windows, porque utiliza uma interface diferente. O Windows utiliza uma interface gráfica, chamada de Interface Gráfica do Usuário (GUI), enquanto o Linux ainda é bastante utilizado via interface baseada em linha de comando (CLI) e, por esse motivo, segmenta seus usuários a um nicho bem específico. O que poucas pessoas sabem é que o Windows utiliza comandos quando os usuários “clicam” em ícones, comandos estes que no Linux você precisa optar, devido à utilização por interfaces GUI ter aumentado bastante, por digitar no terminal. A Figura 1 apresenta a imagem da interface gráfica da distribuição Ubuntu e a Figura 2, a interface do terminal do Linux. 9 Figura 1 – Interface gráfica da distribuição UBUNTU/LINUX Fonte: acervo do autor. Figura 2 – CLI Linux–Terminal Fonte: https://commons.wikimedia.org/wiki/File:1-Apt-get_command.png. Acesso em: 10 jun. 2022. 10 1.1 Interface Gráfica GUI Linux (Graphical User Interface) As interfaces gráficas do Linux têm o intuito de proporcionar aos usuários uma interação com o sistema operacional sem a necessidade de utilização de linhas de comando. Assim como os outros sistemas já conhecidos pelas suas respectivas interfaces, como o Windows e o Android, o Linux também permite acessar funcionalidades e opções de gerenciamento por meio de suas GUIs. A interface Linux é essencial para que qualquer usuário consiga manusear e ser atendido pelo sistema operacional. O intuito é aproximar mais usuários com suas distribuições baseadas no Kernel do Linux. Seguem as distribuições Linux conhecidas por suas interfaces: • Ubuntu. • Kurumin KDE. • Gnome CentOS. É importante frisar que a utilização por linhas de comando do Linux, ainda nos dias de hoje, visa otimizar recursos e melhorar a performance do gerenciamento de recursos. 1.2 Linha de comando Linux A linha de comando do Linux é uma interface baseada em texto que aceita comandos digitados nela. Esses comandos controlam as ações que os usuários desejam realizar no sistema computacional controlado pelo Linux. Sua utilização, dessa forma, é um dos motivos de o Linux ser considerado mais rápido do que o Windows. Cabe ressaltar que 11 suas distribuições possuem interface gráfica, mas, por opção, mais comumente é usado por linha de comando. O que inicialmente era uma barreira, hoje passa a ser uma vantagem, já que seu uso tem crescido no meio corporativo, com empresas como NASA e McDonald’s utilizam o Linux em seus servidores. Um dos motivos para isso é o fato de ser um Sistema Operacional Open Source, ou seja, livre e de código aberto, e, com isso, essas empresas e outras corporações, como o próprio governo brasileiro, não precisam gastar muitodinheiro com licenças proprietárias. 1.3 Demanda de utilização do Linux Hoje todos nós, enquanto usuários, estamos gerando e consumindo um grande volume de dados, o que causa um problema que precisa de solução, que é a segurança de acessos e armazenamento de dados. Logo, habilidades técnicas para analisar, processar, proteger e transmitir dados estão em alta. Dessa forma, o aprendizado em Linux pode trazer uma vantagem para o profissional no mercado. Trazemos a seguir alguns exemplos de profissões que necessitam de conhecimentos em Linux: • Engenharia de rede: os engenheiros de rede são responsáveis pelo gerenciamento dos computadores da rede, e a maioria dos sistemas operacionais de rede é baseada em Linux, como IOS da Cisco. • Cibersegurança: profissionais de cibersegurança monitoram e investigam ameaças de segurança aos dados em vários sistemas. O Linux é usado nesses casos para realizar testes de penetração do sistema e avaliar a vulnerabilidade nas redes. • Desenvolvimento/Programação: desenvolvedores projetam aplicativos para rodarem em diversas plataformas. Logo, pelo 12 fato de ser open source e ter seu código aberto, permite que desenvolvedores criem scripts e funções para executar ações complexas em um computador. O Linux também é usado nesse campo porque somente ele permite que os usuários acessem seu código-fonte, dando a eles a capacidade de experimentá-lo. • Análise de Dados: analistas de dados e cientistas classificam e analisam conjuntos de dados para encontrar padrões para relacionar e prever tendências e comportamentos. Dessa forma, eles usam o Linux devido à grande variedade de ferramentas e comandos disponíveis para a análise de dados, como MySQL e muito mais. Como já dito anteriormente, o Linux também é usado por ser gratuito, em distribuições que atendam às necessidades dos usuários, e distribuído em várias versões, uma para cada finalidade. Assim, por exemplo, distribuições como o Ubuntu são recomendadas para usuários iniciantes, pois sua interface gráfica é bem consolidada, enquanto para ambientes servidores são indicadas distribuições como o RedHat. 1.4 Instalação e configuração do Linux A instalação do Linux é similar a uma instalação do Windows. Os primeiros passos já são conhecidos nossos: • Faça download de uma distribuição Linux. • Crie uma mídia “inicializável”, ou, como o jargão utilizado na TI, “bootável”. • Insira a mídia no sistema computacional desejado e comece o passo a passo. 13 O foco do material não é mostrar a instalação a fundo, principalmente pelo fato de consumir muito espaço e as instalações poderem sofrer alguma mudança de acordo com a distribuição adotada. 1.5 Memória principal Não podemos deixar de abordar a memória quando estamos falando sobre um sistema operacional que tem como um dos pontos fortes a velocidade de processamento. Em âmbito geral, a memória é somente uma grande área de armazenamento para um conjunto binário. Assim como a memória, o Kernel, que é o núcleo do Sistema Operacional, também fica nessa área de códigos binários, e os processos concorrem para executarem suas operações em ambos. Dito isso, as entradas e saídas dos dispositivos periféricos passam pela memória principal, reforçando o que foi dito anteriormente de ser tudo em binário. Logo, a memória é um grande aliado da CPU, pois é nela que a CPU lê as instruções a serem processadas e, após o processamento, escreve novamente nela. Levando em consideração que a maioria das operações é executada a partir da CLI, essas rotinas acabam sendo mais leves, pois temos menos operações para realizar a mesma operação. Por exemplo, a instalação de um software no Windows pode ser mais demorada do que no Linux, pois os cliques realizados vão fazer as mesmas solicitações em linha de comando, enquanto, ao utilizarmos a CLI das distribuições dos Linux, já fazemos isso diretamente. 1.6 Gerenciamento de pacotes O gerenciamento de pacotes é um recurso pelo qual o Linux realiza a instalação de outros softwares no sistema computacional, podendo instalar, atualizar, consultar ou remover outros aplicativos. Existem 14 vários gerenciadores de pacotes, porém eles são baseados em duas distribuições apenas, o Debian e RedHat. Isso impactará em alguns comandos utilizados por cada distribuição, visto que o Debian utiliza o “apt-get”, enquanto o RedHat utiliza o “yum” para fazer o mesmo procedimento. Alguns comandos são substituídos por outros para facilitar sua utilização pelos usuários. Chamamos a atenção para o fato de que o intuito não é dificultar a rotina dos usuários, e sim auxiliá-los. Por isso, um comando utilizado a nível mais baixo, como o “dpkg”, tem o seu equivalente mais simples, porém desenvolve a mesma tarefa, nesse caso o “apt-get”, que acaba sendo uma interface que facilita a rotina do usuário. É importante observar que muitos dos comandos utilizados para o gerenciamento de pacotes requerem um privilégio, um acesso administrativo. No Linux, é utilizado o comando SUDO para acessar esse perfil com privilégios elevados, mas nem todo usuário possui perfil para fazer alterações de instalação ou atualizações nos softwares. Fazendo uma comparação com o Windows, se você está em um ambiente com mais controle, como um ambiente corporativo, não tem permissão, muitas das vezes, nem para consultar a sua interface de redes. Da mesma forma, no Linux, enquanto usuário, você deverá possuir perfis de administração. Assim, ao elevar o nível de usuário, você usa o comando “Sudo Su” e logo em seguida é solicitada a senha de acesso. 1.7 Instalando pacotes Os pacotes, ou softwares, são instalados a partir de fontes confiáveis disponíveis em servidores na internet. O usuário poderá enviar o pacote a ser instalado via FTP ou baixar diretamente utilizando o “apt-get”. Uma boa prática antes de optar pela instalação de um determinado pacote é realizar o update deste. Como exemplo, podemos citar a instalação de um pacote PHP para que a instalação do Moodle possa 15 ser realizada. Para a instalação do pacote Moodle, é necessário que os softwares PHP e MySQL estejam disponíveis. Porém, antes de instalar ambos os softwares, realize um update, pois ele já pode estar disponível. Se já estiverem instalados na sua versão mais recente, no CLI aparecerá uma mensagem informando essa condição, conforme mostrado na Figura 3. Figura 3 – Exemplo de pacote já instalado Fonte: acervo do autor. Seguem os comandos mencionados: • Sudo apt-get update: atualiza todos os pacotes e sua execução pode demorar um pouco. • Apt-cache search [palavra-chave]: pesquisa palavras-chaves dentro dos pacotes. • Apt-get install [pacote]: instala um pacote desejado. Uma observação importante sobre o comando apt-get install é que ele também pode ser utilizado para a atualização de pacotes. Vale lembrar que toda atualização precisa ser feita em duas etapas, isto é, primeiro é necessário atualizar o cache com o comando apt-get update e, em seguida, atualizar as dependências por meio do comando apt-get upgrade. 16 Referências CISCO. Networking Academy. NETACAD, 2022. Disponível em: www.netacad.com. Acesso em: 10 jun. 2022. MARTINS, J. F. et al. Sistemas operacionais de redes abertas. Porto Alegre: SAGAH, 2021. OLONCA, R. L. Administração de Redes Linux: Conceitos e práticas na administração de Redes em Ambientes Linux. São Paulo: Novatec, 2015. RAMOS, J. Guia Prático do Servidor Linux: Administração Linux para Iniciantes. São Paulo: Casa do Código, 2018. http://www.netacad.com http://www.netacad.com 17 Comandos e estrutura de diretórios Autoria: Allan Crasso Naia de Souza Leitura crítica: Paulo César Monteiro Nunes Objetivos • Conhecer e executar os comandos Linux e Unix. • Conhecer a estrutura de diretórios do Kernel Linux. • Dar exemplos para o dia a dia do profissional. 18 1. Comandos GNU Linux Neste Tema, vamos estudar sobre os comandos do GNU Linux e sobre Unix, sistemas de arquivos e padrão FHS.A definição sobre os sistemas Linux dependerá do contexto abordado, pois Linux quer dizer o kernel do sistema operacional que irá controlar todo o sistema computacional. Então, sempre que nos referimos ao Linux, na verdade estamos nos referindo a uma combinação de software chamada GNU/Linux. GNU é um software livre que fornece diretórios de código aberto de muitos comandos comuns do Unix. A partir desses diretórios, a parte Linux dessa combinação é o kernel Linux, que é o núcleo do sistema operacional, identificando os pacotes GNU. O kernel é carregado no momento da inicialização e permanece em execução para gerenciar todos os aspectos do sistema em funcionamento. Segundo as bibliografias disponíveis sobre a história desse sistema operacional, o Linux é baseado em Unix, um sistema operacional desenvolvido na AT&T Bell Labs na década de 1970. O Unix é escrito na linguagem C, o que o torna portátil entre os sistemas operacionais concorrentes, que costumavam ser desenvolvidos especificamente ao hardware para o qual eram escritos, como acontece hoje com os sistemas operacionais da Apple. Ele rapidamente ganhou popularidade em ambientes acadêmicos, bem como entre os programadores atraídos por sua modularidade. Com o tempo, foi modificado e bifurcado (ou seja, as pessoas o modificaram e essas modificações serviram de base para outros sistemas), de modo que atualmente existem muitas variantes diferentes. No entanto, Unix é agora uma marca registrada e uma especificação, de propriedade de um consórcio da indústria chamado Open Group. Dessa forma, somente softwares certificados pelo Open Group podem se chamar Unix. 19 Como na maioria dos sistemas operacionais, o Linux pode ser utilizado em dois modos: com interface gráfica (GUI) e por linha de comando (CLI). Utilizando o modo CLI, que é uma interface baseada em texto, o usuário interage por meio de comandos interpretados pela CPU, os quais são executados em um software conhecido como Terminal, como mostra a Figura 1. Figura 1 – Terminal Linux Fonte: https://www.informatique-mania.com/pt/applications/liberez-la-puissance-de-linux- avec-les-meilleurs-programmes-terminal/. Acesso em: 20 set. 2022. O terminal recebe o que o usuário digita e passa para um Shell, que, por sua vez, é responsável por interpretar as instruções e permite que a CPU execute o que foi digitado e retorne as respostas. Se os comandos digitados estiverem corretos, no próprio terminal é mostrada a execução solicitada, podendo ser a instalação de um pacote, software ou mesmo uma consulta de diretórios. A CLI começa com um log-in em texto. Se o log-in for bem-sucedido, após solicitados usuário e senha, você é levado a um Shell CLI personalizado para o seu usuário especificamente. A seguir trazemos 20 uma ilustração copiada do terminal da distribuição Linux e colado aqui com o intuito de mostrar como a CLI é apresentada ao usuário. O ambiente Linux permite o uso de Shells, que é a famosa tela preta. Existem vários ambientes Shell no ambiente GNU/Linux. Por padrão, a maioria das distribuições utiliza o Bash. No entanto, existem outros tipos de Shell e todos estão listados no arquivo “etc/shells”. Cada um dos Shell possuem suas particularidades. Por já vir nas distribuições, a grande maioria dos usuários se dá bem com o Bash. O Bash possui alguns recursos mais populares, como os apresentados a seguir: ubuntu 18.04 ubuntu tty2 ubuntu login: platos Senha: Os programas incluídos no sistema Ubuntu são softwares livres; os termos exatos de distribuição para cada programa estão descritos nos arquivos individuais em /usr share/doc/*/copyright. sue@ubuntu:~$ w 17:27:22 até 14 min, 2 usuários, carga média: 1,73, 1,83, 1,69 USER TTY DE LOGIN@ IDLE JCPU PCPU O QUE sue tty2 20:08 14,35 0,05s 0,00sw 21 • Scripting: a capacidade de colocar comandos em um arquivo e depois interpretá-los, utilizando efetivamente o Bash para executar o bloco de conteúdo do arquivo, o que resulta na execução de todos os comandos. Este recurso também possui algumas ferramentas de programação, como instruções condicionais e a capacidade de criar funções (sub-rotinas AKA). • Alias: permite abreviar ou criar apelidos para comandos longos. • Variáveis: usadas para armazenar informações para o Shell Bash e para o usuário. Podem ser usadas para modificar o modo de funcionamento de comandos e recursos, além de fornecerem informações cruciais para o sistema. 1.1 Prompt Além destes, o Bash possui uma lista de recursos maior. Foram listados apenas os mais populares. Esses comandos são executados no Shell, por meio da abertura de um terminal, que por sua vez utiliza o prompt como interface para a utilização dos comandos. A estrutura do prompt pode variar entre as distribuições, mas normalmente contém informações sobre o usuário e o sistema. A seguir trazemos a estrutura de prompt comum: sysadmin@localhost: ~ $ O prompt mostrado contém as seguintes informações: Nome de usuário: sysadmin @localhost : ~ $ 22 Nome do sistema: sysadmin@ localhost : ~ $ Diretório atual: sysadmin@localhost: ~ $ O símbolo “~“ é usado como abreviação para o diretório inicial do usuário. O mais comum é que o diretório inicial esteja no “/home” e tenha o nome da conta de usuário. Como um exemplo da estrutura mencionada temos: /home/sysadmin. 1.2 Comandos Iniciamos este tópico trazendo a informação de que o que parece um simples comando pode ser mais do que isso. Um comando pode ser uma chamada de um software, que, quando chamado por meio da CLI, executa uma ação específica escrita para um fim específico. O primeiro passo é digitar o nome do comando. Para isso, é necessário abrir o terminal e iniciar pelo “LS”, com mostrado no exemplo a seguir: ysadmin@localhost: ~ $ ls Desktop Documentos Downloads Músicas Imagens Modelos Públicos Vídeos O “LS” lista os arquivos e diretórios contidos na estrutura em que se está trabalhando. A utilização de qualquer comando segue um padrão base que está dividido em dois: [opções] + [argumento]. 23 A seguir, trazemos o formato padrão: comando [opções] [argumentos] As opções são usadas para modificar o comportamento principal de um comando, enquanto os argumentos são usados para fornecer informações adicionais, como nome de um arquivo ou de usuário. É importante frisar que cada opção e argumento normalmente são separados por espaço e, dependendo do que se deseja realizar, são combinados para que o sistema realize o que for desejado. 1.3 Argumentos Um argumento pode ser usado para especificar algo para o comando agir. Por exemplo, se o comando “LS” receber o nome do diretório como argumento, ele listará o conteúdo desse diretório. No exemplo a seguir, o “/etc/pppdiretório” é usado como argumento, e a saída resultante é uma lista de arquivos contidos nesse diretório: sysadmin@localhost : ~ $ ls /etc/ppp ip-down.d ip-up.d 1.4 Opções As opções podem ser usadas para alterar o comportamento de um comando. Por exemplo, o comando “LS” é utilizado para listar o conteúdo de um diretório. Associado ao LS, podemos usar o “-L”, que, por sua vez, resulta em uma listagem longa de informações sobre os arquivos disponíveis em um determinado diretório, como mostrado a seguir: 24 sysadmin@localhost: ~ $ ls -l total 0 drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Desktop drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Documentos drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Downloads drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Música drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Imagens drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Público drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Modelos drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 20:13 Vídeos1.5 Tipos de comandos É importante salientar que em uma estrutura com os comandos digitados existem informações que dizem muito sobre o que vai ser executado, sendo possível, inclusive, sabermos de onde o comando vem. Existem várias fontes diferentes de comandos dentro do Shell de sua CLI, e a seguir trazemos os tipos existentes: • Comandos internos: são incorporados ao próprio Shell. Como exemplo temos o “cd”. Quando um usuário digita o “cd”, o Shell Bash já está em execução e sabe como interpretá-lo, não exigindo que programas adicionais sejam iniciados. sysadmin@localhost: ~ $ type cd cd is a shell builtin • Comandos externos: são executáveis binários armazenados em diretórios pesquisados pelo Shell. 25 • Alias: permite que o usuário utilize abreviações ou apelidos para comandos mais longos. Quando o Shell vê um alias sendo executado, ele substitui a sequência mais longa antes de continuar a interpretar os comandos. Para saber quais alias estão disponíveis no Shell utilizado, digite “alias” no terminal, como mostrado no exemplo a seguir: sysadmin@localhost: ~ $ alias alias egrep=’egrep --color=auto’ alias fgrep=’fgrep --color=auto’ alias grep=’grep --color=auto’ alias l=’ls -CF’ alias la =’ls -A’ alias ll=’ls -alF’ aliás ls=’ls --color=auto’ 1.6 FHS (Filesystem Hierarchy Standard) O FHS (padrão para sistemas de arquivos hierárquicos) mantém o sistema de arquivos nas distribuições Linux organizado. Essa prática não é fácil, tendo em vista que a maior experiência dos usuários é com o Windows, em que definimos o sistema de arquivos de acordo com a conveniência do próprio usuário. Por exemplo, se você quiser usar uma pasta em “Meus Documentos” para guardar a instalação de um software, será possível. Porém, essa prática livre traz uma desorganização no sistema de arquivo. Por esse motivo, sempre que você acessa uma distribuição Linux, é possível encontrar as mesmas pastas, com o mesmo nome e, aparentemente, com a mesma função no sistema de arquivos. 26 Antes de prosseguirmos, cabe ressaltar que FSH não é um programa, e sim um conjunto de boas práticas não obrigatórias, mas muito respeitadas. Uma das principais implementações do FSH foi dividir os arquivos por tipos, entre os quais: • Arquivos Compartilháveis (Shareable): são arquivos que, mesmo localizados em uma determinada máquina, podem ser disponibilizados pelo usuário para que outras pessoas acessem via rede. • Arquivos Não Compartilháveis (Nonshareable): ao contrário dos compartilháveis, estes não podem ser compartilhados. Também existem os arquivos segmentados por modificação: • Variáveis (Variable): são arquivos que frequentemente sofrem alterações, como os arquivos de log. • Estáticos (Static): não são alterados com frequência, ou quase nunca, como os arquivos que guardam informações dos programas, que somente são acessados quando esses programas são atualizados. Além das categorias, a seguir listamos os principais diretórios: • /bin (Binarious – Binários essenciais dos usuários): guarda os principais programas do sistema computacional. No modo monousuário, por exemplo, os arquivos de inicialização ficam nesse diretório. Como exemplo, os navegadores são localizados no diretório “/usr/ bin”. • /dev (Device – Arquivos de dispositivos): concentra pontos de acesso para os dispositivos. Isso porque no Linux os dispositivos são representados com arquivos. Logo, nesse diretório são 27 armazenados os arquivos que auxiliam no reconhecimento dos hardwares quando utilizados no sistema computacional. Como exemplo, pense em um disco rígido; nos sistemas Linux, ele é representado como “/dev/sda”. Existem outros diretórios que fazem parte da estrutura de arquivo do Linux, porém, por serem muitos, trouxemos apenas uma visão geral sobre FHS. Essa estrutura pode mudar um pouco de distribuição para distribuição, mas tende a seguir as boas práticas preconizadas pelo FHS. Referências ARLEI. Usando o terminal. Prof. Suzano, 2007. Disponível em: https://sites.google. com/site/profsuzano/sistemas-operacionais/linux/ubuntu/usando-o-terminal. Acesso em: 20 set. 2022. NEGUS, Christopher. Linux – A bíblia: o mais abrangente e definitivo guia sobre Linux. 8. ed. Rio de Janeiro: Alta Books, 2014. OLONCA, Ricardo Lino. Administração de Redes Linux: Conceitos e Práticas na Administração de Redes em Ambiente Linux. São Paulo: Novatec, 2015. 28 Linhas de comando, interface do usuário e administração de tarefas Autoria: Allan Crasso Naia de Souza Leitura crítica: Paulo César Monteiro Nunes Objetivos • Criar linhas de comando utilizando Shell Script. • Conhecer as interfaces de usuários baseadas em Linux. • Automatizar tarefas administrativas. 29 1. Shell Neste Tema, vamos estudar sobre Shell, Shell Script, interfaces e tarefas administrativas. Para iniciar, vamos falar sobre Shell. Como você já deve ter lido ou ouvido, o Shell é um interpretador de comandos utilizados em várias tarefas administrativas em sistemas operacionais. No caso desta disciplina, vamos abordá-lo como interpretador para o Linux. Segundo Jargas (2008), o Shell executa a aplicação de um software que conecta e interpreta os comandos digitados por um usuário. É a conexão que esse usuário utiliza para mandar comandos para que a CPU possa executar. Por meio do Shell, podemos desenvolver comandos que automatizem tarefas para sistemas operacionais, no nosso caso o Linux, para serem executados de tempos em tempos. Como exemplo, podemos citar a inicialização de sistema, que pode ser automatizada utilizando um script desenvolvido utilizando o Shell. Como já vimos, existem alguns tipos de Shell. No caso de sistemas baseados no Kernel do Linux, um dos mais comuns é o Bash. O Shell pode ser de dois tipos, baseado em CLI ou em GUI. Como exemplo, podemos utilizar o Windows Shell, que provê aos usuários do Windows ferramentas com o desktop environment, a barra de tarefas e outras ferramentas utilizadas para gerenciar funções do sistema operacional. No mundo Linux, podemos citar o GNOME Shell, que, assim como no Windows, possui a funcionalidade de realizar a interface entre usuário e sistema operacional. Uma grande diferença entre o Linux e o Windows 30 é que naquele as aplicações costumam funcionar com Shells diferentes, sejam eles gráficos ou via terminal. Cada tipos diferentes de Shell pode conter seus próprios conjuntos de ferramentas e reconhecer blocos de comandos específicos. Nas distribuições Linux, comumente temos o Bash, que já vem instalado na maioria delas, bem como o ZSH e o Fish, o que nos leva ao Shell Script, que vamos abordar no próximo tópico. 1.1 Shell Script Segundo Neves (2008), é uma ferramenta para automatizar uma determinada tarefa, definição que remete ao conceito de algoritmos. O Shell Script é utilizado para programar e escrever uma estrutura, logicamente coerente, de instruções para realizar uma determinada tarefa. Como as tarefas referidas aqui são para automatizar rotinas do sistema operacional, é necessário ter um cuidado referente às permissões de execução desses scripts, já que eles são arquivos que podem ser executados. O sugerido é que sejam permissões de usuário comum, e não como root, levando em consideração que as execuções podem trazer danos ao próprio sistema operacional. Para escrever um script, é necessário escolher a forma, se via terminal ou modo gráfico. Lembre-se de dar a permissão de escrita para o arquivo, e, para isso, é necessário utilizar o comando “!chmod777%” – o comando “chmod” é utilizado para configurar as permissões em arquivos, e o valor“777” concede os direitos necessários para a utilização de um determinado arquivo, como leitura, escrita e execução (read, write e execute). Como mencionado anteriormente, um Shell inicia, mas não obrigatoriamente, sinalizando qual o interpretador está utilizando. A seguir temos um exemplo de sintaxe inicial padrão: 31 #!/bin/SHELL_ATUAL Segue um exemplo utilizando o BASH: #!/bin/bash Como exemplo, vamos escrever um script para trazer algumas informações do usuário, da máquina utilizada e do armazenamento do script: #!/bin/bash echo “Seu nome de usuário é:” whoami echo “Info de hora atual e tempo que o computador está ligado:” uptime echo “O script está executando do diretório:” pwd Depois de escrevermos os scripts, será necessário executá-los, e, para isso, há duas maneiras. A primeira é para se você estiver no mesmo diretório; nesse caso, basta utilizar o caminho a seguir: ./exemplo1.sh Para executar o script de outro diretório, será necessário informar o caminho completo até onde ele está armazenado, como no exemplo a seguir, considerando que o arquivo está salvo em “/tmp/scripts”. /tmp/scripts/exemplo1.sh 32 No próximo tópico, vamos abordar sobre o comando utilizados no script, a fim de elucidar o caminho e sua funcionalidade. Antes, temos que dizer que infelizmente não vamos conseguir trazer todos os comandos utilizados para desenvolver tarefas automatizadas via Shell Script e, por esse motivo, sugerimos que você busque em outras bibliografias para se aprofundar nesses conhecimentos. 1.2 Comandos A seguir vamos comentar sobre os comandos utilizados para desenvolver o script mostrado no tópico anterior. • Comando “echo”: exibe na tela a string entre aspas duplas. • Comando “whoami”: é utilizado para mostrar o usuário logado no sistema. • Comando “uptime”: é utilizado para exibir a hora atual, o tempo desde que o computador foi ligado, o número de usuários logados e uma média do número de processos carregados nos últimos um, cinco e 15 minutos. É muito útil quando se trata de gerenciamento de servidores ou gerenciamento de redes, porque muitos dispositivos, como roteadores Cisco, têm seus sistemas operacionais baseados no Kernel Linux, o que permite mensurar pontos como período de manutenção preventiva, ou se acontecem interrupções constantes. • Comando “pwd”: é responsável por exibir em qual diretório o arquivo está sendo executado. Como em toda linguagem de programação, como boa prática, faz- se necessário comentar seu código. Em Shell Script, não é diferente, e, para isso, você deve utilizar o caractere “#”, como no exemplo a seguir: 33 #!/bin/bash #A partir daqui você pode inserir um comentário #Este é um outro comentário para lembrá-lo de que eles são úteis para nortear os desenvolvedores. 1.3 Interfaces de usuário e desktop Vamos iniciar com as distribuições. No mundo Linux, esse termo é destinado sempre para nos referirmos a sistemas operacionais baseados no Kernel do Linux. Como exemplo de “distro”, podemos citar Ubuntu, Fedora e Debian. Cada distribuição possui um terminal, que é uma aplicação utilizada para darmos comandos ao sistema. Como já mencionamos por aqui, precisamos fazer uma introdução para falarmos de interfaces. Para isso, devemos diferenciar interfaces gráficas e desktop environment. Segundo Brito (2017), a interface gráfica é uma aplicação, em se tratando de sistemas operacionais. Logo, tudo que você faz nela é interpretado por um Shell. Então, as interfaces surgem com o intuito de facilitar o uso dos sistemas computacionais por usuários com menos conhecimentos técnicos específicos. Já o desktop environment é um conceito mais complexo, composto por várias aplicações, como calculadora, calendário e navegadores, incluindo a interface gráfica. Como exemplo podemos citar o projeto KDE e o Linux Mint, que utiliza como interface o Cinnamon, com aplicações GNOME como monitor do sistema. Então, perceba que o trunfo para a popularização dos sistemas operacionais, e consequentemente da utilização de computadores por 34 qualquer usuário, foi trazer as interfaces como tradutores de linguagem de alto nível para linguagem de baixo nível. Dessa forma, com um clique e sem se preocupar com comandos que aquele “clique” vai utilizar para se comunicar com a CPU, qualquer usuário pode utilizar os sistemas computacionais. Dessa forma, o Android transformou o Linux em um dos sistemas operacionais mais utilizados no mundo, quando o assunto é mobile. A Figura 1 ilustra um exemplo de interface com o aplicativo do calendário, mostrando uma parte do conjunto do desktop environment. Figura 1 – Interface gráfica da distribuição UBUNTU Fonte: acervo do autor. 1.4 Administrando tarefas Para a realização de tarefas em sistemas operacionais, é necessário possuir privilégios que permitam ao usuário executar certas tarefas. Para isso, são definidos níveis de usuários, a fim de fornecer segurança em um sistema operacional, no nosso caso o Linux. Cada usuário no sistema deve fazer log-in usando uma conta que permite que ele acesse arquivos e diretórios específicos, com determinadas permissões de 35 arquivo e diretório concedidas pelo sistema a usuários, grupos e todos os outros que efetuem log-in. Essas permissões podem ser editadas pelo usuário root. Existem muitas maneiras diferentes de executar um comando que requer privilégios administrativos, ou de root. Realizar log-in no sistema como um usuário root permite que você execute comandos como administrador. Porém, este é um acesso delicado, visto que você passa a ter privilégios para executar tarefas que podem, inclusive, danificar o sistema operacional. Nos sistemas operacionais Linux, como o Ubuntu, os comandos administrativos podem ser executados usando o comando “sudo”, o qual também permite que os usuários executem comandos como outro usuário, de forma semelhante ao comando “SU”. Dessa forma, você assume como root. Como exemplo, podemos citar a linha de comando a seguir: ~ $ sudo head /etc/shadow Depois de digitar o comando, será solicitada a senha de root. Uma das vantagens de utilizar o “sudo” é a diminuição do risco de utilização de comandos acidentalmente como root. Essa introdução sobre contas de usuários se faz necessária para entendermos que podemos configurar tarefas para serem executadas automaticamente em um período definido. Cada usuário possui um arquivo que serve para agendamento de tarefas. A seguir vamos abordar sobre esse executável, chamado de Cron. Segundo Lewis e Drake (2020), o Cron é um software DAEMON de agendamento de tarefas, encontrado em sistemas operacionais do tipo 36 Unix, incluindo as distribuições do Linux. Ele executa em background as tarefas configuradas. Por meio do Cron, podemos estipular ações a serem realizadas periodicamente pelo sistema, utilizando como parâmetros os seguintes dados: mês, dia do mês, dia da semana, hora e minuto. Esses parâmetros serão informados em uma linha, em um determinado arquivo que mencionaremos mais adiante. Vamos à prática? De acordo com Lewis e Drake (2020), a seguir é mostrada a sequência de comandos necessários para a instalação do Cron em uma máquina com o Ubuntu: • sudo apt update – Atualiza o índice de pacotes locais. • sudo apt install cron – Instala o Cron. • sudo systemctl enable cron – Habilita o Cron. Segundo Lewis e Drake (2020), as tarefas do Cron são registradas e gerenciadas em um arquivo especialmente conhecido como “crontab”. Cada conta de usuário no sistema pode ter seu próprio arquivo “crontab”, no qual poderá agendar as tarefas. A configuração do Cron se dá pelo comando “crontab” com as seguintes chaves: • Crontrab -l: mostra o “crontab” do usuário atual. • Crontrab -r: remove todo o “crontab” do usuário atual. • Crontrab -e: edita o “crontab” do usuário atual. Assim como em todas as linguagens de programação, o Cron possui caracteres reservados e destinados a fins específicos dentro deseu escopo. São eles: 37 • * (asterisco) – Em expressões Cron, um asterisco é uma variável crua que representa “todos”. Assim, uma tarefa agendada com * * * * *... será executada a cada minuto, de cada hora, de cada dia, de cada mês. • , (vírgula) – Vírgulas fragmentam os valores do agendamento para formarem uma lista. Se quiser executar uma tarefa no início e na metade de cada hora, em vez de escrever duas tarefas separadas (por exemplo, 0 * * * * ... e 30 * * * * ...), pode conseguir a mesma funcionalidade com um (0,30 * * * * ...). • - (hífen) – Um hífen representa um intervalo de valores no campo da agenda. Em vez de ter 30 tarefas agendadas realizadas em um comando que você quer executar nos primeiros 30 minutos de cada hora (como em 0 * * * * ..., 1 * * * * ..., 2 * * * * ... e assim por diante), bastaria que você as agendasse como 0-29 * * * *. • / (barra) – Podemos utilizar uma barra com um asterisco para expressar um valor de etapa. Por exemplo, em vez de escrever oito tarefas Cron separadas para executar um comando a cada três horas (como em: 0 0 * * * ..., 0 3 * * * ..., 0 6 * * * ... e assim por diante), você poderia agendá-las para executar da seguinte maneira: 0 */3 * * *. Cabe destacar uma opção importante referente à execução do Cron: não é necessário que ele seja parado ou reinicializado para que as informações sejam lidas pelo “crontab”. Após sua edição, as novas tarefas já estarão valendo. Ainda segundo Lewis e Drake (2020), esses são os comandos básicos utilizados para a visualização e a edição de uma tarefa no Linux. Existem muitos outros comandos que servem para o agendamento de tarefas, mas infelizmente não cabem todos aqui, e por isso sugerimos que você aprofunde seus conhecimentos fazendo uso das bibliografias disponíveis. 38 Referências BRITO, Samuel Henrique Bucke. Serviços de Redes em Servidores Linux. São Paulo: Novatec, 2017. FILHO, João Ediberto. Descobrindo o Linux: Entenda o Sistema Operacional GNU/ Linux. 3. ed. São Paulo: Novatec, 2012. JARGAS, Aurélio Marinho. Shell Script Profissional. São Paulo: Novatec, 2008. LEWIS, Shaun; DRAKE, Mark. Como usar o Cron para automatizar tarefas no Ubuntu 18.04. Digital Ocean, 2020. Disponível em: https://www.digitalocean.com/ community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804-pt. Acesso em: 20 set. 2022. NEVES, Júlio Cezar. Programação Shell Linux. 7. ed. São Paulo: Brasport, 2008. https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804-pt https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804-pt 39 Configuração e monitoramento de serviços Autoria: Allan Crasso Naia de Souza Leitura crítica: Paulo César Monteiro Nunes Objetivos • Configurar ativos de redes, conforme especificações. • Configurar a segurança da rede local e de seus ativos de acordo com a política de segurança da empresa. • Monitorar serviços de redes de acordo com as especificações e as necessidades locais. 40 1. Serviços essenciais do sistema No ambiente de computação atual, é raro ter uma máquina autônoma. Em quase todos os casos, um computador será conectado a uma rede para fornecer o acesso de que os usuários precisam. O acesso à rede é crítico por vários motivos. Normalmente, as atualizações do sistema operacional são feitas pela rede usando repositórios de software. Se o sistema for um servidor que fornece serviços, como compartilhamento de arquivos ou páginas da web, uma conexão de rede é essencial. Fornecer acesso à rede é responsabilidade do usuário root no sistema. Infelizmente, isso às vezes pode ser uma tarefa difícil, pois as placas de rede não são todas padronizadas, e, portanto, uma configuração adicional pode ser necessária. Além disso, há vários componentes que precisam ser configurados para que o sistema se conecte à rede, incluindo configurações de endereço IP, configurações de gateway e configurações de DNS (Domain Name System). 1.1 Fundamentos de rede Cada computador e cada dispositivo em uma rede possuem um identificador exclusivo. Assim, da mesma forma que você endereçaria uma carta para enviar pelo correio, os computadores usam o identificador exclusivo para enviar dados para computadores e dispositivos específicos em uma rede. A maioria das redes atuais, incluindo todos os computadores na internet, usa o protocolo TCP/ IP desenvolvido pela Internet Engineering Task Force (IETF) como padrão de comunicação na rede. Nesse modelo, o identificador exclusivo de um computador é seu endereço IP, o qual pode ser estático, atribuído 41 manualmente, ou dinâmico, atribuído pelo protocolo DHCP (Dynamic Host Configuration Protocol), executado como um serviço na rede. Uma tabela de roteamento é um pequeno banco de dados na memória gerenciado por todos os dispositivos da rede (ou seja, computador, roteador etc.). Ele é usado para calcular a jornada ideal através de outros roteadores na mesma ou em outras redes para mensagens que é responsável por encaminhar para um endereço de destino. TCP/IP é uma combinação dos dois protocolos mais populares. O protocolo TCP (Transmission Control Protocol) é utilizado para entrega confiável de dados entre computadores conectados através de uma LAN (Local Area Network) ou da internet, enquanto o protocolo IP (Internet Protocol) é o principal responsável pelo roteamento dos pacotes de dados até o destino Morada. Existem duas versões do protocolo IP usadas na internet: o IP versão 4 (IPv4) e, o mais atual, IP versão 6 (IPv6). O IPv4 é a versão usada na maioria dos sistemas atuais. 1.2 IPv4 público e privado Existem dois tipos de endereços IP usados em uma rede: público e privado. O InterNIC (Network Information Center) é o órgão global responsável pela atribuição de endereços públicos. Ele atribui IPs de rede com base em classe, sendo sempre exclusivos. Os endereços públicos estão disponíveis com roteadores de internet para que os dados possam ser entregues corretamente. A maioria das organizações usa a internet para enviar e-mail e navegar na web. Para fazer isso, apenas sistemas como servidores de e-mail, servidores web e proxies (que tratam de solicitações intermediárias de clientes que buscam recursos de outros servidores) precisam de conectividade direta com a internet para que usuários fora da LAN 42 possam se conectar a esses servidores. Em algumas ocasiões, serviços adicionais, como servidores de compartilhamento de arquivos, precisarão ter um endereço IP público para conexão direta com a internet. Por outro lado, os usuários que trabalham em suas próprias máquinas e desejam se conectar à internet não precisam de um endereço IP globalmente exclusivo. Em vez disso, podem receber endereços IP privados, que são convertidos em endereços IP públicos pelo gateway/ roteador. Na RFC 1918, uma parte do espaço de endereço IP foi designada como “endereços privados”. Esse intervalo de endereços não se sobrepõe aos endereços públicos. Os endereços privados podem ser reutilizados, o que significa que o risco de ficar sem endereços na internet foi mitigado. O espaço de endereço privado não é acessível diretamente pela internet. Dessa forma, para acessar dispositivos utilizando o espaço de endereço privado, um roteador usando NAT (Network Address Translation) precisará ser configurado. Existem três blocos de endereços privados: • 10.0.0.0/8 – Este endereço Classe A permite o intervalo de endereços de 10.0.0.1 até 10.255.255.254. Os 24 bits do ID do host estão disponíveis para a sub-rede. • 172.16.0.0/12 – Esta rede Classe B permite o intervalo de endereços de 172.16.0.1 até 172.31.255.254. Os 20 bits do ID do host estão disponíveis para sub-rede. • 192.168.0.0/16 – Esta rede Classe C permite o intervalo de endereços de 192.168.0.1 até 192.168.255.254. Os 16 bits do ID do host estão disponíveis para sub-rede. 43 1.3 Roteamento A função do roteamento é enviar um pacote IP, composto porum cabeçalho (endereço de origem e destino) e dados encapsulados, de um ponto a outro. Todos os dispositivos possuem tabelas de roteamento, as quais contêm rotas utilizadas para calcular o melhor caminho das mensagens que ele é responsável por encaminhar através de outros roteadores na mesma ou em outras redes. Assim, quando um computador envia pacotes para outro computador, ele consulta sua tabela de roteamento. Se um pacote estiver sendo enviado para um destino na mesma sub-rede, nenhum roteamento será necessário e o pacote será enviado diretamente ao computador. Por outro lado, se um pacote estiver sendo enviado para a internet ou outra rede, então o primeiro “salto” ou lugar que um pacote irá é para o que estiver no campo gateway padrão (uma configuração de rede com o endereço IP do roteador de rede), permitindo que o roteador (um dispositivo de rede que encaminha pacotes IP) decida o caminho ideal a seguir. O roteador da rede terá sua própria tabela de roteamento, incluindo sua própria rota padrão (para qual roteador enviar pacotes quando o destino estiver em outra rede ou sub-rede). A tabela de roteamento é uma lista de outros roteadores que estão conectados ao roteador atual. Se o roteador recebe um pacote para um destino de rede que possui em sua tabela de roteamento (normalmente esta será outra rede local), ele simplesmente o encaminha. Caso contrário, enviará o pacote para sua rota padrão (normalmente esta será a maneira de acessar a internet). Para visualizar a tabela de roteamento existente, execute o comando “route”: 44 root@localhost:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 192.168.1.0 * 255.255.255.0 UG 0 0 0 eth1 192.168.2.0 * 255.255.255.0 UG 0 0 0 eth0 Na saída da tabela de roteamento do Kernel, a primeira coluna contém o Destination, endereço de rede. A palavra default significa a rota padrão. A segunda coluna contém o definido Gateway para o destino especificado. Caso apareça um asterisco (*), significa que não é necessário um gateway para acessar a rede de destino. A coluna Genmask mostra a máscara de rede para a rede de destino. Na coluna Flags, “U” significa que a rota está ativa e disponível, enquanto “G” significa que o gateway especificado deve ser usado para essa rota. A coluna Metric define a distância até o destino, o que geralmente é listado no número de saltos (o número de roteadores entre a origem e o destino). A coluna Ref não é usada pelo Kernel Linux, e a coluna Use é usada para definir o número de pesquisas para a rota. Finalmente, a coluna Iface é usada para definir a interface de saída para essa rota. A rota padrão nesse exemplo foi configurada para usar a interface eth1, a segunda placa de rede do sistema. O dispositivo de rede com um endereço IP de 192.168.1.1 é designado como o gateway padrão, que é um roteador que passará pacotes dessa rede para outra rede. O endereço especificado para o gateway padrão deve estar em uma rede à qual seu sistema esteja conectado. 45 Para entender melhor a saída anterior, considere o seguinte: 1. Se os endereços de designação do pacote de rede estiverem na rede 192.168.2.0/24, o pacote será transmitido na rede à qual a placa de rede eth0 está conectada. O endereço IP de origem do pacote será 192.168.2.1 (o endereço IP atribuído à placa de rede eth0). 2. Se os endereços de designação do pacote de rede estiverem na rede 192.168.1.0/24, o pacote será transmitido na rede à qual a placa de rede eth1está conectada. O endereço IP de origem do pacote será 192.168.1.106 (o endereço IP atribuído à placa de rede eth0). 3. Todos os outros pacotes de rede são enviados ao roteador com o endereço IP 192.168.1.1,através da placa de rede eth1. root@localhost:~ # route add default gw 192.168.1.1 eth1 Agora, se alguma das rotas na tabela de roteamento não corresponder ao endereço especificado, o pacote será encaminhado para 192.168.1.1 (a rota padrão). 1.4 Segurança de redes Linux O comando “nmap” (network mapper) é uma ferramenta de código aberto usada por administradores de sistema para auditoria de redes, verificação de segurança e localização de portas abertas em máquinas host. Ele é capaz de escanear um host ou toda a sub-rede para encontrar portas TCP e UDP abertas. Essa ferramenta também é usada por invasores para encontrar portas vulneráveis. 46 Se o “nmap” for executado sem nenhuma opção, verificará as portas TCP abertas e relatará as portas abertas junto com o serviço em execução nelas. Por exemplo, execute o seguinte comando: root@localhost:~# nmap example.com Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-13 22:02 UTC Nmap scan report for example.com (192.168.1.3) Host is up (0.000013s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 53/tcp open domain Nmap done: 1 IP address (1 host up) scanned in 2.49 seconds Para verificar as portas TCP e UDP que podem estar abertas, o “nmap” pode ser executado com as opções -sT e -sU: root@localhost:~# nmap -sT -sU example.com Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-13 22:07 UTC WARNING: No targets were specified, so 0 hosts scanned. Nmap done: 0 IP addresses (0 hosts up) scanned in 0.03 seconds Para verificar quais hosts estão disponíveis em uma rede, o comando “nmap” fornece uma opção que executará ping efetivamente em todos os hosts na rede especificada. Por exemplo: 47 root@localhost:~# nmap -sP 192.168.1.3/24 Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-13 22:10 UTC Nmap scan report for example.com (192.168.1.3) Host is up. Nmap done: 256 IP addresses (1 host up) scanned in 10.46 seconds O comando network status “netstat” fornece muitas informações sobre conexões de rede, estatísticas de interface, tabelas de roteamento e muitos outros detalhes da configuração de rede que foram discutidos anteriormente. Ele foi projetado para ser executado no sistema local, ou seja, não verifica portas em sistemas remotos. Na avaliação da segurança da rede, as opções mais úteis do “netstat” são aquelas que mostram as portas de rede que estão abertas no momento e o estado das conexões. Para visualizar todas as portas abertas e os processos que as abriram, execute o seguinte comando: root@localhost:~:~# netstat -lunpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.11:33314 0.0.0.0:* LISTEN - tcp 0 0 192.168.1.2:53 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN - 48 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 16/sshdtcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN - tcp6 0 0 :::53 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN 16/sshd tcp6 0 0 ::1:953 :::* LISTEN - udp 0 0 192.168.1.2:53 0.0.0.0:* - udp 0 0 127.0.0.1:53 0.0.0.0:* - udp 0 0 127.0.0.11:38117 0.0.0.0:* - udp6 0 0 :::53 :::* - O protocolo, o número da porta, o nome do processo e o PID são os campos-chave na saída anterior. Cabe ressaltar que a gerência do Kernel envolve operações complexas. Por esse motivo, é importante ter ciência de que é necessário muito estudo para contemplar uma gerência que atenda à necessidade do usuário. No entanto, as noções trazidas durante nossa aula serão suficientes para sanar as necessidades introdutórias. Os comandos de redes existentes no Linux trazem muitos recursos que possibilitam uma análise detalhada do tráfego da rede. Dessa forma, é possível testar e auditar a maioria das situações de redes. 49 Referências BRITO, Samuel Henrique Bucke. Serviços de Redes em Servidores Linux. São Paulo: Novatec, 2017. FILHO, João Ediberto. Descobrindo o Linux: Entenda o Sistema Operacional GNU/ Linux. 3. ed. São Paulo: Novatec, 2012. JARGAS, Aurélio Marinho. Shell Script Profissional. São Paulo: Novatec, 2008. NEVES, Júlio Cezar. Programação Shell Linux. 7. ed. São Paulo: Brasport, 2008. 50 Sumário Apresentação da disciplina Conhecendo o Linux Objetivos 1. S. O. Linux Referências Comandos e estrutura de diretórios Objetivos 1. Comandos GNU Linux Referências Linhas de comando, interface do usuário e administração de tarefas Objetivos 1. Shell Referências Configuração e monitoramento de serviços Objetivos 1. Serviços essenciais do sistema Referências