Um documento para o aprendizado do Sistema Operacional Unix com base em tópicos.
- Introdução
- Sistema
- Usuários e Grupos
- Arquivos do Sistema
- Configurações do Ambiente
- Comandos do UNIX
- Ferramentas
- Processos
- Rotinas
- Segurança
- Shell Script
- Utilidades para UNIX Admins
- 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.
- 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.
- É 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.
- 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.
- 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.
- 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
telnetpossui a mesma função dorshe dorlogin, já oftpé similar aorcp. - Para haver a comunicação entre os sistemas (local <-> remoto), o acesso precisa estar liberado (sem firewalls ou restrições do sistema).
- 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.
- 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
addressnã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
telnetsabe que
- 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
exitoulogoutpara 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.
- Para rodar o manual de algum comando disponível no UNIX, basta digitar
man <command>.
Em progresso
- 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.
- 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.
Em progresso
Em progresso
-
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
Em progresso
Em progresso
Em progresso
- Hardening SSH - Configurações feitas no
/etc/ssh/sshd_config- Não permitir login diretamente pelo usuário root:
PermitRootLogin no - Usar separação de privilégios durante execução:
UsePrivilegeSeparation yes - Limitar acesso a usuários ou grupos:
AllowUsers root adminouAllowGroup admins - Alterar porta padrão:
Port 1234 - Limitar tempo de inatividade do login:
LoginGraceTime 1m
- Não permitir login diretamente pelo usuário root:
Em progresso
- Usuários logados:
wouwho