Skip to content

Instantly share code, notes, and snippets.

@edudobay
Last active January 18, 2017 17:00
Show Gist options
  • Save edudobay/854473da0cdac23c1071 to your computer and use it in GitHub Desktop.
Save edudobay/854473da0cdac23c1071 to your computer and use it in GitHub Desktop.

Linux

Obtendo ajuda

  • manual: man ALGUMACOISA ─ disponível para a maioria dos comandos, e também para alguns arquivos de configuração
    • aperte q (quit) para sair
    • manual dividido em seções (1 a 9); man SEÇÃO ENTRADA pode ser necessário para desambiguar algumas entradas. Por exemplo:
      • man 1 passwd → comando passwd
      • man 5 passwd → arquivo /etc/passwd
  • info ─ não costuma ser tão popular, mas costuma haver manuais mais completos por lá (porém alguns são só uma cópia do man). Veja por exemplo info grep
    • navegar dentro de cada seção: Tab pula para próximo link, Enter segue o link
    • navegar entre seções: next, previous, up
    • sair: q
  • comando --help ou comando -h: ajuda na própria linha de comando

Administração de usuários

  • Comandos: useradd, usermod, userdel; passwd (administração de senha)
    • Administração de senha: é possível bloquear/desbloquear a conta; é possível definir data para expiração da senha (o usuário é obrigado a mudar).
  • É possível criar grupos de usuários; os comandos são semelhantes: groupadd, groupmod, groupdel, gpasswd (este serve para administração geral do grupo, não só de senha; inclui adicionar/remover usuários)
  • root pode executar esses comandos
  • Qualquer usuário pode:
    • passwd ─ mudar minha própria senha
    • groups ─ mostra grupos dos quais faço parte
    • id ─ mostra usuário, grupos e seus IDs
  • Arquivos de configuração ─ não mexer diretamente! Mas é interessante ver como funcionam
    • /etc/passwd (man 5 passwd) ─ lista de todos os usuários existentes no sistema
    • /etc/group (man 5 group) ─ idem para grupos

Acesso remoto

  • SSH: Secure Shell. Maneira segura (criptografada) de acessar uma máquina remota
  • Implementação padrão: OpenSSH
  • Para acessar uma máquina, ela precisa ter rodando um servidor SSH (sshd ─ SSH Daemon)
    • Padrão: TCP porta 22
    • Arquivo de configuração: /etc/ssh/sshd_config
  • Conexão: ssh usuario@host (usuário que existe na máquina remota)
  • Login pode ser feito com senha ou através de autenticação de chaves públicas; o servidor SSH pode ser configurado para só permitir algum dos métodos
  • Outros serviços que podem ser feitos de maneira criptografada através do protocolo SSH:
    • Cópia de arquivos: scp; rsync (programa para transferência de arquivos mais robusto, que pode fazer transferências locais ou via SSH)
    • Montar máquina remota como sistema de arquivos (SSHFS)
    • X11 Forwarding: exibe no cliente aplicativos gráficos da máquina remota (ssh -X)
    • Encaminhamento de portas (Port forwarding), ou túnel SSH: canal de comunicação em que o cliente acessa recursos (portas TCP) como se estivesse no próprio servidor.

      • Conceito parecido com o de uma VPN, porém mais específico/restrito.
      • Exemplos:
        • Pode ser usado para acessar máquinas que estão na rede local do servidor porém não estão diretamente expostas à internet
        • Pode ser usado para acessar outra máquina na internet “fingindo” que a conexão foi feita a partir do servidor
        • Pode ser usado para acessar algum recurso do servidor que só é acessível por conexões locais (conexões entre dois programas que rodam no mesmo servidor)
      • Como funciona? O cliente (C) quer acessar a porta TCP “X” numa máquina A (que pode ser o próprio servidor (S) ou qualquer outra máquina que o servidor consiga acessar). Para isso, o cliente SSH disponibiliza uma porta TCP “Y” na máquina do cliente e encaminha tudo que chegar ali para o servidor SSH. O servidor SSH recebe essa informação e reencaminha para a máquina A na porta X. Quando a máquina A devolve informação, o servidor SSH manda de volta para o cliente SSH e o cliente SSH envia essa informação para a porta Y no cliente.

      image

      • Exemplos de uso:
        • acessar um recurso do host remoto que só está aberto para conexões locais dentro do próprio host. Em algumas situações, o acesso público desse recurso pode tecnicamente ser liberado, mas permitir isso apenas pelo túnel SSH é mais seguro.
        • acessar um recurso que está na rede local do host remoto, numa máquina que não está diretamente exposta à internet (por exemplo, um servidor de banco de dados que está na mesma rede que o servidor HTTP, mas em outra máquina)
  • VPN (Virtual Private Network) ─ serviço que estabelece uma conexão (geralmente criptografada) entre um cliente e um servidor e permite através dela que o cliente acesse outros computadores como se estivesse na mesma rede local que o servidor.
    • Sempre que o cliente quer enviar algum dado através da VPN, ele submete o dado ao servidor da VPN, e o servidor faz o envio para a máquina solicitada. Quando a máquina responde, o servidor VPN encaminha a resposta de volta para o cliente.

Arquivos e armazenamento

Discos e partições

  • Um disco rígido é uma sequência enorme de bytes. Para organizar os dados lá dentro, são criados sistemas de arquivos
  • Tipos de sistemas de arquivos comuns:
    • ext2, ext3, ext4 ─ um dos mais usados no Linux; bastante estável, bastante testado pelo tempo
    • btrfs ─ já tem bastante utilização no Linux, mas ainda não é considerado completamente estável
    • xfs
  • Ubuntu Help: Linux Filesystems Explained
  • Sistemas de arquivos usados em outros sistemas operacionais: FAT, NTFS (Microsoft); HFS+ (Mac OS X)
  • Os tipos de sistemas de arquivos diferem em vários aspectos. Cada um é uma maneira diferente de organizar os dados dentro do disco rígido.
  • As informações guardadas no sistema de arquivos geralmente se dividem em duas partes: dados (o conteúdo dos arquivos) e metadados ─ informações sobre cada arquivo, como: nome, data de modificação, proprietário (usuário/grupo), permissões (leitura/gravação/execução).
  • Sistemas de arquivos podem eventualmente conter erros ou inconsistências. O programa fsck é normalmente usado para verificar e reparar esses erros (semelhante ao chkdsk ou scandisk da Microsoft). O programa fsck verifica qual é o tipo de sistema de arquivos da partição selecionada e encaminha para um programa mais específico (por exemplo, fsck.ext4).
  • Um disco rígido costuma ser particionado. Uma tabela de partição é uma estrutura de dados que é gravada em disco e especifica a localização e o tamanho de cada partição.
  • Existem diversos formatos de tabelas de partição. O mais tradicional é o MBR, mas ele possui diversas limitações. É comum que novos sistemas usem tabelas de partição GPT.
  • Utilitários para manipular tabela de partições
    • fdisk, para tabelas de partição MBR
    • gdisk, para tabelas de partição GPT
    • parted, para ambos os tipos de tabelas, e geralmente mais intuitivo
  • Toda partição tem um sistema de arquivos, e cada partição pode ter um sistema de arquivos diferente. Por exemplo, é possível ter em um computador uma partição NTFS para o Windows e uma partição ext4 para o Linux.
  • Cada sistema operacional deve ser instalado em uma partição com um sistema de arquivos apropriado. Por exemplo, não se deve instalar Linux numa partição FAT pois esse tipo de partição não satisfaz algumas necessidades do Linux (por exemplo, o sistema de arquivos FAT não armazena permissões nem proprietários).
  • É comum usar mais de uma partição para um sistema Linux. Uma configuração comum é instalar o sistema operacional em uma partição e deixar os arquivos dos usuários em outra partição. Também é comum que o próprio sistema operacional esteja dividido em mais de uma partição.
  • Um tipo especial de partição é a partição swap. É uma partição que serve como uma extensão da memória RAM do computador; só é usada quando a memória RAM está muito cheia, pois o acesso aos discos é muito mais lento do que o acesso à RAM. Esse tipo de partição não tem um sistema de arquivos.
    • No Windows também existe esse conceito, com o nome de memória virtual, e com a diferença de que é um arquivo dentro do sistema de arquivos e não uma partição separada.
  • Partições podem ser redimensionadas; a questão delicada é redimensionar o sistema de arquivos que está dentro de cada partição. Ao reduzir uma partição, é necessário reduzir o sistema de arquivos e realocar quaisquer dados que estejam na região a ser excluída da partição. Esse processo tem que levar em conta o tipo de sistema de arquivos; no Linux, há um programa para redimensionar cada tipo de sistema de arquivos.
  • LVM (Logical Volume Manager): é uma camada de abstração construída sobre as partições físicas do disco. Com ela, é possível usar vários discos rígidos como se fossem um só ─ por exemplo, podemos fazer uma partição de 60 GB que fique distribuída entre dois discos de 40 GB. Também facilita redimensionamento e outras operações com partições. As “partições abstraídas” do LVM recebem o nome de volumes lógicos (logical volumes).

Estrutura de diretórios

  • Cada sistema de arquivos é naturalmente hierárquico ─ cada diretório pode conter outros diretórios e arquivos, e sempre há um diretório raiz. (Diretório e pasta são a mesma coisa.)
  • Filesystem Hierarchy Standard: estrutura padrão dos diretórios em sistemas Linux
  • No Linux, todos os sistemas de arquivos são acessados por uma única hierarquia. Ao iniciar o sistema operacional, um sistema de arquivos (contido em uma partição) precisa estar definido como raiz da hierarquia (root filesystem), e todos os outros que vierem são montados em algum ponto da hierarquia de pastas.
  • Montar um sistema de arquivos é o mesmo que disponibilizar seu conteúdo em alguma pasta dentro da hierarquia pré-existente. Essa pasta é denominada ponto de montagem (do sistema de arquivos que está sendo montado), e tem que ser uma pasta que já existe dentro de outro sistema de arquivos já montado (exceto quando montamos o sistema raiz, é claro).
  • Para montar um sistema de arquivos, dizemos em que partição ele se encontra e sobre qual pasta ele deve ser montado. Eventualmente podem ser especificados alguns parâmetros (depende do tipo do sistema de arquivos).
    • Usa-se o comando mount para montar, e umount para desmontar
    • root pode montar e desmontar, em geral; mas há ferramentas para que um usuário comum monte e desmonte mídias externas, como o udisks, através do comando udisksctl ou das opções que costumam ser disponibilizadas em shells gráficos.
    • O arquivo /etc/fstab (man fstab) descreve os sistemas de arquivo que devem ser montados por padrão
  • Alguns diretórios montados não vêm de partições do disco; são sistemas de arquivos virtuais. Seu conteúdo não vem de arquivos, mas geralmente de informação provida por algum programa. Um exemplo é o /proc, que contém informações sobre o kernel e sobre os processos que estão sendo executados.
  • Vamos ver um exemplo. Considere a seguinte estrutura:

    /
    ├── bin
    ├── boot
    │   └── (bootfiles)
    ├── etc
    ├── home
    │   ├── denise
    │   └── theo
    ├── lib
    └── usr

    Ela poderia ser realizada com um único sistema de arquivos. Mas vamos considerar a situação em que os diretórios boot e home são mantidos em partições separadas. Então temos três partições ─ duas para esses diretórios, e uma partição raiz, conforme essa tabela:

    Partição Ponto de montagem
    part1 /
    part2 /boot
    part3 /home

    A seguir, representamos o conteúdo do sistema de arquivos de cada partição:

    (part1)/
    ├── bin
    ├── boot (vazio)
    ├── etc
    ├── home (vazio)
    ├── lib
    └── usr
    
    (part2)/
    └── (bootfiles)
    
    (part3)/
    ├── denise
    └── theo

    Ao ligar um sistema com essas partições, primeiramente a partição part1 deve ser montada como raiz. Existirão no sistema de arquivos raiz então as pastas vazias /boot e /home. Sobre elas serão montadas as partições part2 e part3, respectivamente, e então teremos nossa hierarquia completa.

  • A pasta /dev contém referências aos dispositivos de hardware disponíveis para o sistema. Nessa pasta há um dispositivo para cada disco, e também um para cada partição de cada disco.
    • Em um computador pessoal, cada disco recebe um nome que geralmente está no formato sdX, em que X representa alguma letra — o primeiro disco é sda, o próximo sdb, e assim por diante
    • Em servidores na nuvem que são virtualizados, esse nome pode estar num outro formato — por exemplo, vdX ou xvdX
    • Os nomes dos dispositivos para as partições são compostos por: nome de dispositivo do disco + número da partição. Por exemplo, se o primeiro disco tem 3 partições, teremos sda1, sda2 e sda3.

Redes

  • Interface de rede é o nome dado no Linux para um dispositivo, real ou virtual, que provê ao computador acesso a uma rede. Em um computador é comum termos
    • interfaces Ethernet (rede cabeada)
    • interfaces de rede sem fio
    • interface loopback: rede do computador com ele mesmo. Usada para comunicação entre programas rodando no mesmo computador. É uma interface virtual
  • IP (Internet Protocol): protocolo de comunicação usado em redes que geralmente estão conectadas à internet (mas não precisam estar), e usado pela maioria das aplicações.
    • A comunicação pelo protocolo IP é segmentada em pacotes. O pacote é uma estrutura (uma sequência de bytes com algumas características ditadas pelo protocolo) que encapsula o dado que está sendo transmitido.
    • O protocolo tem duas versões, IPv4 e IPv6. A versão 4 é a mais difundida e o que falaremos a seguir se refere principalmente a ela. A versão 6 foi desenvolvida para superar algumas limitações da versão 4 (por exemplo, aumentando enormemente a quantidade de endereços possíveis). Sua adoção ainda segue lenta e ainda não se prevê a substituição total do IPv4 pelo IPv6.
    • Para estabelecer comunicação pelo protocolo IP, a cada interface é atribuído um endereço IP que identifica o computador na rede.
    • O endereço IPv4 é formado por 4 octetos (bytes) que assumem valores de 0 a 255 e são normalmente escritos separados por pontos — por exemplo, 172.19.115.8.
    • Endereços IP não são arbitrários! A estrutura dos endereços IP reflete a topologia da rede. Endereços “parecidos” se referem a dispositivos na mesma rede. Quando escrito como uma sequência de bits, o endereço pode ser separado em uma porção que identifica a rede (um prefixo de tamanho variável) e outra que identifica o dispositivo dentro da rede. Portanto, endereços que coincidem nos bits de rede representam dispositivos na mesma rede.
      • Máscara de subrede é uma sequência de 4 octetos (ou 32 bits) que indica quais são os bits do endereço que correspondem à subrede — eles são preenchidos com 1; os bits que correspondem à parte do dispositivo são preenchidos com 0.

        Por exemplo, se uma subrede é representada pelos três primeiros octetos (24 bits) e o dispositivo pelo octeto restante (8 bits), a máscara de subrede é a sequência de bits 11111111 11111111 11111111 00000000, ou em decimal 255.255.255.0.

    • O espaço de possíveis endereços IP é dividido entre endereços privados e públicos.
      • Os endereços públicos pertencem a uma entidade internacional controladora da internet (IANA) e são delegados aos provedores de internet, que por sua vez os concedem aos clientes. As concessões têm um tempo de validade (da ordem de horas); após o final da concessão, ela pode ser renovada, ou pode ser concedido um novo endereço.
      • Os endereços privados podem ser usados livremente dentro de uma rede local. Endereços privados não são acessíveis por fora da rede local.
      • Se uma rede local usa uma faixa de endereços privados mas está conectada à internet, um dispositivo dessa rede está funcionando como gateway. Ele tem um endereço IP público e todo o tráfego entre um dos computadores da rede e a internet passa obrigatoriamente por ele.
        • Como a rede usa endereços privados, o gateway faz o que é conhecido por NAT (Network Address Translation) — os pacotes vindos da rede interna são transmitidos pela internet como se fossem originadas do próprio gateway, sem informação sobre o IP original. O gateway manipula os pacotes que saem, inserindo uma informação que será também incluída nos pacotes que voltam, e assim ele consegue identificar o destino correto para eles dentro da rede local.
  • MAC Address: endereço associado à interface de rede (cada interface tem esse número pré-programado na sua fabricação), e é usado apenas em um nível de abstração mais baixo que o endereço IP. Para saber mais, leia a seção sobre redes e subredes :-P

Redes, subredes, inter-redes (internet!)

  • A internet tem esse nome pois ela é feita da conexão entre várias redes, e na verdade cada rede pode ainda ser uma composição de outras redes menores.
  • Por exemplo, um provedor que fornece serviços de internet para uma cidade pode dividir sua infraestrutura entre os bairros; em cada bairro ele mantém uma estação, além de uma estação central que interliga as estruturas da cidade toda e que as conecta ao exterior da cidade.
  • A composição de redes é hierárquica. Quaisquer dois dispositivos que estejam ligados à internet estão em na mesma rede; porém a comunicação entre eles geralmente tem que passar por vários outros dispositivos pois eles em geral não estão na mesma subrede. Imagine como uma árvore; para chegar de uma folha a outra percorrendo a estrutura da árvore, é preciso passar por vários ramos intermediários.
  • Rede local é o termo normalmente aplicado ao nível mais específico de subrede.
  • Um dispositivo que conecta duas redes é chamado gateway. O tipo de dispositivo mais usado para essa função é o roteador. A função do roteador está ligada também a estabelecer rotas entre pontos da rede.
  • Quando um nó precisa estabelecer conexão com outro nó que não esteja na mesma subrede, ele se comunica com um roteador, e o roteador encaminha os dados para outra subrede. Esse processo se repete até alcançar o destino final.
  • As redes de telecomunicações são organizadas em camadas no que conhecemos como modelo OSI. Geralmente ordenamos as camadas por ordem crescente de nível de abstração. O que falamos até agora estava na camada 3; abaixo dela (em nível de abstração) há o seguinte:
    • Camada 3 — camada de rede: cuida do encaminhamento de tráfego de um nó qualquer a outro nó qualquer
    • Camada 2 — camada de enlace (data link layer): cuida do encaminhamento e controle de tráfego dentro de uma rede local
    • Camada 1 — camada física: a camada 2 (assim como as demais acima dela) trabalha com sequências de bits. A camada 1 cuida da transmissão física (e da recepção) desses bits.
  • Na camada de enlace, o que identifica uma interface de rede é o endereço MAC (Media Access Control). A tradução de endereços IP para endereços MAC é feita pelo protocolo ARP.
  • Um roteador Wi-Fi costuma ter duas funções: a de gateway e a de ponto de acesso. Uma rede pode ter vários dispositivos funcionando como pontos de acesso Wi-Fi, mas apenas um gateway para cada rede de destino.

Servidores

Alguns tipos de servidores comuns que podem prover serviços para outras máquinas (via redes locais ou via internet):

  • Servidor SSH
  • Servidor SMB (Samba) ─ compartilhamento de arquivos e impressoras, compatível com o de redes com Windows. SMB (ou SMB/CIFS) é o nome do protocolo, e Samba é a implementação em software livre para ambientes Unix.
  • Servidor FTP (File Transfer Protocol) ─ permite que clientes façam download e upload de arquivos do e para o servidor.
    • Pode ser configurado de várias formas: pode ser totalmente público ou pode exigir autenticação; pode desabilitar a função de upload ou restringi-la apenas para certos usuários.
    • Não é muito seguro. Uma alternativa é usar o FTP com criptografia via TLS (FTPS), ou usar outro método intrinsecamente mais seguro como SFTP (ver a seção sobre SSH).
  • Servidor HTTP (HyperText Transfer Protocol)
  • Servidores de email (POP, IMAP, SMTP)
  • Servidores de banco de dados
  • Servidor NTP (Network Time Protocol) ─ usado para sincronização de relógios pela internet. É muito importante por exemplo para aplicações que usam chaves de autenticação com validade temporal limitada.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment