Skip to content

Latest commit

 

History

History
266 lines (192 loc) · 10.3 KB

File metadata and controls

266 lines (192 loc) · 10.3 KB

Unix

Um documento para o aprendizado do Sistema Operacional Unix com base em tópicos.

Sumário

Introdução

Unix

  • Existem duas versões primárias do Unix: System V e BSD.
  • Foram criados diversas versões (flavors) com base nestas duas versões primárias.
  • Padrão POSIX.
  • Richard Stallman inicia o projeto GNU em 1984 com a intenção de criar um sistema Unix-like, mas com distribuição livre.
  • Em 1991, Linus Torvalds dá início a criação do Linux. Atualmente, o Linux é o kernel, enquanto as ferramentas, shell e arquivos de sistema fazem parte do GNU. Por isso, damos o nome de GNU/Linux.

Kernel

  • Camada de nível mais baixo do Unix.
  • Controla processos, dispositivos de entrada/saída, operações de arquivos do sistema e outras funções necessárias para a operação do sistema.
  • Construído para um hardware específico.
  • Não pode ser manuseado pelo usuário (geralmente).
  • Facilita a criação e gerenciamento de processos (muitas vezes chamados de jobs ou tasks).
  • O kernel manuseia a memória do sistema. Quando um processo é iniciado, mas a memória física não oferece mais suporte para a execução desta tarefa, a memória virtual entra em ação para acomodar este processo, movendo algumas partes para o disco rígido. Quando esta mesma porção é solicitada novamente, ela retorna para a memória física. Este procedimento é chamado de paging.
  • Ainda temos outro aspecto quanto a memória, chamado de swap. Neste caso, o processo é movido por completo para o disco rigído. O espaço destinado a este processo no disco rígido chama-se swap space no Unix. É importante certificar-se de que o espaço destinado para este processo seja suficiente, do contrário o usuário será punido com uma perda de performance considerável.

Shell

  • É o interpretador da linha de comando.
  • Reponsável por permitir a interação entre o usuário e as operações no sistema.
  • Existem três shells primários: Bourne Shell (conhecido como sh), C Shell (csh) e Korn Shell (ksh).
  • Não somente, existem outras variantes para o Shell. Utilize a que estiver mais adequada para as suas necessidades.

Componentes

  • São os utilitários e arquivos do sistema. É o que torna capaz a visualização, organização e interação de modo consistente com os arquivos e diretórios disponíveis em dispositivos de armazenamento pelo usuário.

Sistema

Inicialização

  • Chamamos de boot process, o processo que ocorre entre a posição inicial do seu sistema (desligado), até o momento em que o seu sistema está completamente carregado/disponível/acessível.
  • O processo de identificação do device é chamado de bootstrapping.
  • O dispositívo de boot não precisa ser um dispositivo físico. O mesmo pode ser feito através da rede ou por um dispositivo de armazenamento externo (USB, CD-ROM).
  • O dispositivo de boot contém apenas as informações necessárias para carregar o sistema operacional.
  • Após o bootstrapping, o kernel começa a ser carregado.

Autenticação

  • O Log In e Log Out pode ser efetuado através de uma GUI ou na CLI, depende da variante que estiver sendo utilizada (Mac, Solaris, Linux, etc).
  • No momento da autenticação através da CLI temos um banner, o qual consiste, geralmente, de 3 (três) linhas indicando a versão do OS, do kernel e o host/ip da rede.
  • Em sistemas públicos, estas informações devem ser ocultadas por razões de segurança.
  • É possível utilizar a autenticação remota através do protocolo TCP/IP.
  • Este protocolo permite a transferência de dados entre diferentes sistemas.
  • Alguns métodos para login remoto são: ssh, telnet, sftp, ftp.
  • Haviam outros métodos para conexão remota, mas foram abandonados por questões de segurança. São eles: rcp, rlogin e rsh.
  • O telnet possui a mesma função do rsh e do rlogin, já o ftp é similar ao rcp.
  • Para haver a comunicação entre os sistemas (local <-> remoto), o acesso precisa estar liberado (sem firewalls ou restrições do sistema).

Via SSH

  • Possibilita acesso remoto a fim de possibilitar a execução de comandos em outro sistema.
  • O uso é feito com, no mínimo: <command> <hostname>
  • command: refere-se ao protocolo de comunicação que o usuário deseja utilizar.
  • hostname: refere-se ao nome atual da máquina ou o IP da rede (192.168.0.*).
  • Dar preferência o uso do SSH ao telnet, pois a sessão será encriptada.
  • Caso seja o primeiro acesso remoto, uma chave de autenticação será registrada na máquina. Caso alguém tente modificá-la ou ter acesso ao sistema que não seja por essa chave, o usuário (admin) será notificado.
  • Ao utilizar ssh hostname, o protocolo assume que o usuário deseja logar no sistema remoto com o mesmo nome do usuário.
  • Para acessar com outro usuário, deve-se utilizar o comando ssh username@hostname.

Via telnet

  • Nem todos os sistemas permitem o uso de SSH, sendo assim será necessário o uso do telnet.
  • Diferente do SSH a sintaxe mínima do telnet é: <command> <address> <port>. Ex: telnet 192.168.0.1 8080.
  • O campo address não se refere somente a um endereço de IP, podendo ser também um domain name, por ex: telnet google.com 80.
  • Não realiza a encriptação de dados durante a sessão (local <-> remoto).
  • Outra diferença é que o telnet vai abrir um prompt para que seja inserido o username e password.
  • Permite o envio de requisições na rede, como por exemplo uma requisição HTTP. Ex: GET / HTTP/1.1
  • Nem sempre o telnet sabe que

Finalizar/desligar o sistema

  • Após completar o trabalho, recomenda-se sair apropriadamente do sistema para não interromper os processos de forma abrupta.
  • Deve-se utilizar os comandos exit ou logout para finalizar a sessão.
  • Para desligar o sistema, o usuário pode utilizar os comandos: halt, init 0, init 6, poweroff, reboot, shutdown.
  • Nem todos os sistemas rodam estes comandos. Para saber mais, utilize o man pages.

Man Pages

  • Para rodar o manual de algum comando disponível no UNIX, basta digitar man <command>.

Usuários e Grupos

Em progresso

Arquivos do Sistema

  • Componente do Unix que habilita a visualização, organização segurança e interação de arquivos e diretórios.
  • Existem 3 (três) tipos de file systems: orientado a disco, orientado a rede e virtual.
  • Orientado a Disco (disk-oriented): arquivos do disco rígido, CD-ROM, DVD, USB. Por exemplo: UFS, FAT, NTFS.
  • Orientado a Rede (network-oriented): arquivos que podem ser acessados por um ambiente remoto. Por exemplo: NFS, Samba e WebDAV.
  • Especial: arquivos temporários e de processo.

Aspectos Básicos

  • Uma coleção lógica de arquivos em uma partição no disco.
  • Uma partição é, por sua vez, um container de informações.
  • No Unix, tudo se inicia a partir do diretório root (este diretório não deve ser confundido com o diretório root do usuário).
  • O Unix utiliza uma estrutura hierarquica.
  • O UNIX trabalha com camnhos relativos e absolutos, além de ser Case Sensitivity.

Navegação

Em progresso

Configurações do Ambiente

Em progresso

Comandos do UNIX

  • ls - listar o conteúdo do diretório

     $ ls -la 		# -l para listagem longa e -a para exibir todos os arquivos, incluindo os ocultos
    
  • cd <path> - mudar de diretório (change directory)

     $ cd ..			# muda para o diretório pai
     $ cd .			# muda para o diretório atual
     $ cd			# ou
     $ cd ~			# muda para o diretório home do usuário atual
     $ cd /var/www	# muda para o diretório /var/www
     $ cd -			# volta para o diretório anterior, neste caso, ~
    
  • pwd - exibir o caminho do diretório atual (print working directory)

     $ pwd
     /var/www/my-awesome-project
    
  • history, !! e !101 - exibir o histórico de comandos e executar comandos do histórico

     $ history		# exibe o histórico de comandos
     100 cd ~
     101 pwd
     102 ls -la
     $ !!			# executa o último comando, neste caso, ls -la
     $ !101			# executa o comando de número 101 da lista, neste caso, pwd
    
  • mkdir - criar diretórios (make directories)

     $ mkdir project 		# cria o diretório project
    
  • cp - copiar arquivos e diretórios (copy)

     $ cp file.txt mydir		# copia o arquivo para o diretório
    
  • mv - mover (ou renomear) arquivos e diretórios (move)

     $ mv file.txt mydir				# move o arquivo para o diretório
     $ mv oldname.txt newname.txt	# renomeia o arquivo
    
  • man - exibir a documentação/manual dos comandos (manual)

     $ man ls		# exibe o manual do comando ls
     $ man history	# exibe o manual do comando history
     $ man pwd		# exibe o manual do comando pwd
    
  • cat - concatenar e exibir arquivos (concatenate)

     $ cat file1.txt file2.txt
     content fom file1
     content fom file2
    
  • head - exibir as primeiras linhas do arquivo

     $ head file1.txt			# exibe as primeiras 10 linhas por padrão
     line1
     ...
     line10
    
     $ head -n 20 file1.txt		# exibe as primeiras 20 linhas
     line1
     ...
     line20
    
  • tail - exibir as últimas linhas do arquivo

     $ tail file1.txt			# exibe as últimas 10 linhas por padrão
     line90
     ...
     line99
    
     $ tail -n 20 file1.txt		# exibe as últimas 20 linhas
     line80
     ...
     line99
    
  • touch - criar arquivo

     $ touch README.md 		# cria o arquivo README.md
    

Ferramentas

Em progresso

Processos

Em progresso

Rotinas

Em progresso

Segurança

  • Hardening SSH - Configurações feitas no /etc/ssh/sshd_config
    1. Não permitir login diretamente pelo usuário root: PermitRootLogin no
    2. Usar separação de privilégios durante execução: UsePrivilegeSeparation yes
    3. Limitar acesso a usuários ou grupos: AllowUsers root admin ou AllowGroup admins
    4. Alterar porta padrão: Port 1234
    5. Limitar tempo de inatividade do login: LoginGraceTime 1m

Shell Script

Em progresso

Utilidades para UNIX Admins

  • Usuários logados: w ou who