Buscar

Sistema operacional Linux e o servidor Web Apache - 5

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

DEFINIÇÃO
Apresentação de comandos para realizar operações básicas, de manipulação de permissões de arquivo e
diretório e gerenciamento de usuários e grupos, no terminal do Linux. Introdução ao servidor Web Apache,
suas configurações e seus principais parâmetros.
PROPÓSITO
Compreender o sistema operacional Linux e o servidor Web Apache, amplamente utilizados no mercado,
tendo em vista a capacitação profissional.
PREPARAÇÃO
Antes de iniciar o conteúdo deste tema, faça uma revisão sobre a camada de aplicação do modelo OSI e os
protocolos HTTP e HTTPS.
Para melhor aproveitamento do dos estudos, recomendamos dispor de uma máquina Linux para treinar
comandos e seguir os exemplos do módulo 4. Caso não disponha de um computador com o Linux instalado,
há duas formas simples de obtê-lo, sem precisar reinstalar seu computador:
Mais simples e rápido: busque um emulador Linux. Existem alguns disponíveis gratuitamente na
internet. 
Mais avançado: instale uma máquina virtual com uma distribuição Linux de sua escolha.
OBJETIVOS
MÓDULO 1
Compreender o funcionamento do terminal de comandos do sistema operacional Linux
MÓDULO 2
Descrever o sistema de arquivos e seu esquema de permissões
MÓDULO 3
Descrever a organização de usuários e grupos e os principais comandos para o seu gerenciamento
MÓDULO 4
Reconhecer o funcionamento do servidor Web Apache
INTRODUÇÃO
Para estudarmos os principais comandos de forma detalhada, precisamos entender seu funcionamento e sua
organização. Veremos, ainda, o sistema operacional Linux e o servidor Web Apache.
MÓDULO 1
 Compreender o funcionamento do terminal de comandos do sistema operacional Linux
O SISTEMA OPERACIONAL LINUX
Antes de iniciarmos o estudo deste tema, assista ao vídeo sobre a história do sistema operacional Linux onde
serão abordados assuntos como sua distribuição e execução básica.
Uma das características mais conhecidas do Linux, assim como dos sistemas UNIX em geral, é sua linha de
comandos, baseada em interpretadores conhecidos como shell. Todo e qualquer gerenciamento do sistema
pode ser feito por meio de comandos nesse ambiente shell, também conhecido como terminal de comandos.
Apesar de existir ambiente gráfico com janelas para o Linux, muitos administradores de sistema não o
utilizam, por diferentes razões:
Nem toda operação pode ser realizada no ambiente gráfico ou exigirá a instalação de novos programas
para este fim.
Para muitas operações, o uso de comandos permite maior agilidade em comparação com o ambiente
gráfico.
O ambiente gráfico é um software que, naturalmente, consome recursos da máquina onde está
executando, ocupando espaço em memória, disco e demandando processamento.
O Linux é disponibilizado em grandes pacotes, conhecidos como distribuições. Neles estão contidos o núcleo
do sistema operacional, uma variedade de aplicações e utilitários, além do programa instalador, que será
responsável por implantar o sistema no computador.
ACESSANDO O LINUX (LOGIN)
O Linux é um sistema operacional multiusuário e com atenção à segurança, o que nos obriga a sempre
realizar autenticação para acessá-lo.
Cada usuário possui o nome (username) e senha pessoal para a autenticação no sistema (login).
 Tela de login no Ubuntu Linux em ambiente gráfico.
 Tela de login no Ubuntu Linux em ambiente texto.
Como na maioria dos sistemas operacionais, o Linux possui um superusuário padrão, com amplos poderes
sobre o sistema, conhecido por ‘root’.
Um descuido ao digitar comandos como ‘root’ poderá comprometer os dados e o funcionamento do próprio
servidor.
Por isso, muitas distribuições não habilitam o acesso direto a ele, exigindo que outras contas de usuários
comuns sejam criadas. Assim, temos um primeiro nível de acesso com poderes limitados.
Em um sistema sem ambiente gráfico, o terminal de comandos é exibido imediatamente após o acesso (login)
ao sistema. Caso esteja em um ambiente gráfico, ainda será necessário abrir o terminal em uma janela.
UTILIZANDO O TERMINAL DE COMANDOS
O elemento mais importante do terminal é o PROMPT de comando. É uma espécie de “palavra mágica”
exibida pelo terminal, indicando que ele está pronto para receber comandos.
No Linux, o PROMPT é representado pelos caracteres $ ou #. O segundo é exibido somente para o usuário
‘root’. Assim, é possível rapidamente saber se o comando que iremos digitar será executado como um usuário
comum, de poderes limitados, ou como o superusuário ‘root’.
$ comando
Em verde, vemos o PROMPT de um usuário comum. Se o usuário fosse o ‘‘root’’ o PROMPT seria o ‘#’. Em
vermelho, um comando qualquer digitado pelo usuário.
Para executar o comando, deve ser pressionada a tecla ENTER.
 ATENÇÃO
Alguns terminais de comando para Linux utilizam o caractere % como PROMPT para usuários comuns.
VARIAÇÕES DO PROMPT DE COMANDO
Para auxiliar o usuário, muitas distribuições Linux já trazem um PROMPT pré-configurado com informações
adicionais e úteis a qualquer momento.
bob@servidor:/tmp $
Deste exemplo sabemos que:
‘BOB’
javascript:void(0)
É o nome do usuário executando o terminal de comandos. Todos os comandos que ele digitar serão
executados pelo usuário ‘bob’, com as permissões e os poderes desse usuário.
‘SERVIDOR’
É o nome (hostname) da estação Linux. Essa informação é muito útil para um administrador quando ele está
conectado simultaneamente a diversos servidores, que dá a certeza de que está enviando o comando para o
servidor Linux certo.
‘/TMP’
É o diretório atual – falaremos mais adiante sobre isso. Ter essa informação visível no PROMPT facilita
operações envolvendo arquivos e diretórios.
O terminal de comandos do Linux possui grande variedade dos mesmos. Na prática, cada comando é um
programa próprio. Portanto, ao digitá-los, estamos executando programas.
Vamos ver alguns exemplos de comandos do terminal Linux?
WHOAMI
‘Quem sou eu?’ Informa o nome do usuário (username).
$ whoami 
bob
HOSTNAME
Informa o nome da estação Linux. Esse nome é definido durante a instalação do Linux e pode ser trocado
posteriormente.
PWD
Informa o diretório atual do usuário.
HISTORY
Exibe uma lista dos últimos comandos digitados pelo usuário.
EXIT / LOGOUT
Ambos os comandos encerram a sessão, sendo exigida nova autenticação (login) para usar o sistema.
A ESTRUTURA DE COMANDOS DO TERMINAL
LINUX
Os comandos são estruturados como:
$ comando [opções] [argumentos]
javascript:void(0)
javascript:void(0)
Os argumentos indicam ações para os programas. Pode ser, por exemplo, o nome de um ou mais arquivos
que serão lidos ou escritos pelo comando.
As opções modificam o comportamento do programa ou como as respostas serão elaboradas. Em geral, as
opções são iniciadas com hífen ( - ).
Repare, no exemplo anterior, que as opções e os argumentos são mostrados entre colchetes [ ]. Essa
representação é utilizada nas documentações de comandos para indicar itens opcionais, ou seja, que não
precisam ser incluídos cada vez que o comando é executado. A separação de opções e argumentos é feita
sempre pelo caractere ‘espaço’.
Como conhecer as opções e os argumentos para cada comando?
O Linux possui um comando específico para exibir os manuais de seus comandos.
$ man [comando]
No argumento, informe o nome do comando para o qual deseja ver o manual. Por exemplo:
$ man pwd
Para obter as instruções do comando ‘pwd’.
Vamos conhecer outros comandos úteis?
MORE ARQUIVO
Permite visualizar o conteúdo do arquivo indicado no argumento, página por página. Exemplo:
$ more trabalho.txt LESS ARQUIVO
Permite visualizar o conteúdo do arquivo indicado no argumento, página por página. É semelhante ao
comando ‘more’, porém tende a ser mais rápido. Exemplo:
$ less trabalho.txt CAT ARQUIVO
Permite visualizar o conteúdo do arquivo indicado no argumento.
$ cat trabalho.txt HEAD –N ARQUIVO
Exibe as ‘n’ primeiras linhas do arquivo indicado no argumento.
$ cat trabalho.txt 
LINHA 1 
LINHA 2 
LINHA 3 
LINHA 4 
LINHA 5 
 
$ head -2 trabalho.txt 
LINHA 1 
LINHA 2O comando ‘cat’ retornou todo o conteúdo do arquivo, que possui 5 linhas ao todo. Ao usar o comando ‘head
-2’, apenas as duas primeiras linhas foram retornadas.
TAIL –N ARQUIVO
Exibe as ‘n’ últimas linhas do arquivo indicado no argumento. Muito útil, por exemplo, para visualizar os
últimos registros de um longo arquivo de logs do sistema.
TOUCH ARQUIVO
Se não existir um arquivo com o nome passado no argumento, ele será criado vazio. Se existir, apenas será
atualizada a informação de hora da última modificação, porém o seu nome e conteúdo não serão modificados.
Neste tema, será um comando útil para criar arquivos, ainda que vazios, para estudar outros comandos.
LAST
Exibe os últimos acessos ao sistema, indicando o nome dos usuários e eventos de carga (boot) do Linux.
WHO
Lembrando que o Linux é um sistema multiusuário e multitarefas, permitindo que diversos usuários se
conectem simultaneamente. O comando ‘who’ exibe a lista de usuários conectados no momento.
UNAME –A
O comando exibe diversas informações sobre o Linux, e a opção ‘-a’ faz com que exiba todas de uma só vez.
Dentre as informações exibidas estão o nome da estação (hostname), a versão do núcleo do sistema (kernel)
e a plataforma de hardware sobre a qual o Linux está executando.
IP ADDR
Exibe os endereços atribuídos às interfaces de rede. Exemplo:
 
$ ip addr 
1: lo: mtu 1500 group default qlen 1 
link/loopback 00:00:00:00:00:00 
inet 127.0.0.1/8 brd 127.255.255.255 scope global dynamic 
13: eth0: <> mtu 1500 group default qlen 1 
link/ether 00:4e:c8:a5:89:13 
inet 169.254.14.90/16 brd 169.254.255.255 scope global dynamic 
14: wifi0: <BROADCAST,MULTICAST,UP> mtu 1500 group default qlen 1 
link/ieee802.11 4c:c2:90:1f:a5:f1 
inet 192.168.1.70/24 brd 192.168.1.255 scope global dynamic 
 
No último bloco são exibidas as configurações da interface de rede ‘wifi0’ e o endereço IP atribuído. Esse
comando será útil no último módulo, sobre o Apache.
Em versões mais antigas, também podia ser usado o comando ‘ifconfig’.
 
$ifconfig 
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 1500
inet 127.0.0.1 netmask 255.0.0.0 
loop (Local Loopback) 
RX packets 0 bytes 0 (0.0 B) 
RX errors 0 dropped 0 overruns 0 frame 0 
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 
 
wifi0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 
inet 192.168.1.70 netmask 255.255.255.0 broadcast 192.168.1.255 
ether 4c:c2:90:1f:a5:f1 (Ethernet) 
RX packets 0 bytes 0 (0.0 B) 
RX errors 0 dropped 0 overruns 0 frame 0 
TX packets 0 bytes 0 (0.0 B) 
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 
 
Em distribuições mais recentes, como o Ubuntu 18.04, o comando ‘ifconfig’ não é instalado por padrão e pode
ser incluído posteriormente com o pacote ‘net-tools’.
EDITANDO ARQUIVOS NO LINUX
Uma ferramenta fundamental no Linux são os editores de texto, que permitem alterar o conteúdo de arquivos
texto, muito usados para a configuração de programas e serviços.
Existem vários editores disponíveis e alguns já costumam ser instalados pelas principais distribuições Linux.
Um desses editores, simples de usar, é o ‘nano’.
$ nano ARQUIVO
Ao executar o comando ‘nano’, basta passar o nome do arquivo que deseja editar como argumento. Se o
arquivo não existir, ele poderá ser criado. Uma vez aberto, navegue usando as setas do teclado, como em um
editor de texto qualquer.
Repare que no rodapé da tela são exibidas as combinações de tecla para as principais operações do editor
‘nano’.
^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos 
^X Exit ^R Read File ^\ Replace ^U Paste Text^T To Spell ^_ Go To Line
 EXEMPLO
Para sair do editor use a combinação de teclas “Crtl-X”. Nesse momento, confirme se deseja salvar as
alterações feitas no arquivo.
Um dos editores mais famosos entre os usuários do Linux é o ‘vim’, versão melhorada do clássico editor ‘vi’ do
Unix. É uma ferramenta leve e muito poderosa, que oferece muitos recursos avançados, além de auxiliar na
manipulação de configurações e códigos-fonte. Apesar de seu uso não ser tão simples quanto o do ‘nano’,
vale a pena conhecer.
EXECUTANDO UM COMANDO COMO O
SUPERUSUÁRIO ‘ROOT’
No Linux, certas operações só podem ser realizadas pelo usuário ‘root’, como criar usuários e instalar
programas e gerenciar serviços, assim como o Apache.
Antigamente, as distribuições Linux permitiam criar uma senha para o usuário ‘root’ no ato da instalação,
porém essa é uma prática que traz riscos para a segurança do sistema e está caindo em desuso. Atualmente,
é mais usual a criação de usuários comuns com poderes para executar comandos individualmente como o
‘root’.
Com o comando ‘sudo’, usuários comuns autorizados conseguem executar outros comandos com os poderes
de ‘root’.
$ sudo COMANDO
Na primeira vez, o ‘sudo’ vai te pedir para digitar sua própria senha, por segurança, e em seguida executará o
‘COMANDO’ com a identidade do ‘root’.
Exemplo: Para reiniciar o Linux, pode ser usado o comando ‘reboot’. No entanto, um usuário comum não tem
permissão para executá-lo, sendo necessário o uso do ‘sudo’.
$ sudo reboot
Para desligar o Linux, podem ser usados os comandos a seguir, sempre com o ‘sudo’ para ter os poderes do
usuário ‘root’.
$ sudo halt 
$ sudo shutdown –h now
 RELEMBRANDO
Lembre-se de que somente usuários previamente autorizados conseguirão usar o ‘sudo’. 
 
Uma das maneiras de configurar a autorização é por meio de grupos de usuário. O comando ‘sudo’ possui
uma configuração versátil, portanto, verifique as recomendações da distribuição Linux que estiver usando, pois
a nomenclatura de grupos costuma variar.
VERIFICANDO O APRENDIZADO
MÓDULO 2
 Descrever o sistema de arquivos e seu esquema de permissões
Agora que já sabemos como o terminal de comandos do Linux funciona, começaremos a explorar comandos
para realizar tarefas importantes de administração do sistema.
Neste módulo, vamos conhecer o sistema de arquivos do Linux e aprender os comandos mais importantes
para gerenciá-lo.
Uma característica do sistema de arquivos no Linux, e que se destaca para todo novo usuário, é o fato de ser
CASE-SENSITIVE.
O que isso significa?
Significa que ele distingue caracteres maiúsculos de minúsculos nos nomes de arquivos. Um exemplo: “Linux”,
“LINUX” e “linux” são interpretados pelo sistema como nomes DIFERENTES.
Na prática, essa característica exige ainda mais atenção dos usuários e administradores do sistema, pois a
troca de apenas um caractere entre maiúsculo ou minúsculo será suficiente para que uma operação seja feita
com o arquivo ou diretório errado. Não é incomum, mesmo para usuários experientes, enfrentar problemas
desse tipo por mera distração.
A ESTRUTURA DE DIRETÓRIOS DO LINUX
Assim como a maioria dos sistemas operacionais modernos, o Linux utiliza diretórios que nos permitem
organizar e estruturar melhor os arquivos armazenados.
No Linux, todos os arquivos são organizados em uma única estrutura de diretórios. Isso significa que todos os
diretórios e arquivos estão sob um ponto conhecido como RAIZ da árvore, representada pelo caractere ‘/’.
/ 
├── bin 
├── boot 
├── dev 
├── etc 
├── home 
├── mnt 
├── opt 
├── root 
├── sbin 
├── tmp 
├── usr 
└── var
 Árvore simplificada de diretórios do Linux.
Alguns desses diretórios têm finalidades específicas. Entre eles, podemos destacar:
/BIN
Onde estão armazenados os programas que respondem pelos comandos do sistema.
/ETC
Onde estão armazenados os arquivos de configuração do sistema, inclusive o cadastro de usuários e grupos
(falaremos mais adiante).
/HOME
Sob o /home são criados diretórios para cada usuário existente. Por exemplo, o usuário ‘bob’ terá um diretório
privado em /home/bob. Para bob, o diretório /home/bob é o seu diretório Home.
/ROOT
É o diretório exclusivo do usuário ‘root’.
/TMP
Arquivos temporários de usuários e programas.
Outros dispositivos, discos internos ou externos, são montadosnessa mesma e única árvore. Essa
abordagem destoa, por exemplo, do Windows, em que cada sistema de arquivos é identificado por uma letra
(C:, D:, E:) com sua raiz própria de diretórios.
É importante observar que não há obrigação de que o diretório home de um usuário seja criado dentro de
‘/home’ e nem que o diretório home tenha o mesmo login do usuário. Por simplicidade e padronização, essas
duas práticas são amplamente adotadas, mas não são compulsórias. Logo, não há impedimento técnico para
que o home do usuário ‘bob’ seja o diretório ‘/tmp/xyz’, por exemplo.
javascript:void(0)
javascript:void(0)
javascript:void(0)
javascript:void(0)
javascript:void(0)
REPRESENTAÇÃO DO CAMINHO DE DIRETÓRIOS
Quando queremos identificar a localização exata de uma casa, precisamos de um endereço completo e não
apenas do número da casa. Da mesma forma, quando queremos nos referir a um arquivo, precisamos indicar
sua localização exata dentro da árvore de diretórios, descrevendo todo o caminho desde a raiz até o diretório
onde o arquivo está.
A representação é feita usando o caractere ‘/’ como separador dos diretórios.
 EXEMPLO
/home/bob/documentos/identidade.pdf
O arquivo se chama ‘identidade.pdf’ e está dentro do diretório ‘/home/bob/documentos’.
‘documentos’ é um diretório, que está dentro de ‘/home/bob’.
‘bob’ é um diretório que está dentro de ‘/home’; ‘home’ é um diretório abaixo da raiz de diretórios.
A raiz é representada pelo caractere ‘/’ no início do caminho. O caminho iniciado na raiz é chamado de
caminho absoluto, pois representa precisamente a localização do arquivo dentro da árvore.
E qual comando permite ver o conteúdo de um diretório? 
É o comando ls
O comando ‘ls’ lista o conteúdo de um diretório, exibindo todos os arquivos e diretórios existentes nele. No
argumento podemos informar outro diretório para o qual queremos essa listagem.
$ ls /tmp 
Irá exibir a lista de arquivos do diretório /tmp. 
Quando digitamos, porém, simplesmente ‘ls’, sem argumentos, ele também retorna um resultado.
Mas de qual diretório?
Para responder a essa pergunta, precisamos entender o conceito de diretório atual. Enquanto usamos um
terminal de comando, sempre estamos em algum diretório, que é o atual. Se realizarmos alguma operação
sem indicar um caminho absoluto, o diretório atual será utilizado.
Assim, quando digitamos ‘ls’, o comando retornará a lista de arquivos e diretórios no atual.
Para saber qual é o diretório atual, usamos o comando ‘pwd’.
$ pwd 
/home/bob
A resposta indica que nosso diretório atual é ‘/home/bob’. Quando for executado o comando ‘ls’, a resposta
será o conteúdo desse diretório.
E se eu digitasse o comando a seguir?
$ ls testes
Repare que o argumento ‘testes’ não inicia com a barra ‘/’, portanto, não é um caminho absoluto, a partir da
raiz de diretórios. Nesse caso, o comando ‘ls’ irá listar o diretório ‘testes’ dentro do atual. Ou seja, ele retornará
o conteúdo do diretório ‘/home/bob/testes’.
Um caminho que não inicia pela raiz, que não começa com ‘/’, é chamado de caminho relativo. Ao contrário
do caminho absoluto, o relativo depende do diretório atual para se referir a um arquivo ou outro diretório.
$ ls trabalhos/arquivos
O argumento do comando ‘ls’ foi um caminho relativo, logo, o ‘ls’ irá listar o conteúdo de
‘/home/bob/trabalhos/arquivos’.
Como navegar entre os diretórios, mudando o diretório atual?
Para isso, existe o comando ‘cd’ (change dir).
 EXEMPLO
Nosso diretório atual é /home/bob.
$ cd testes
Nesse momento, entraremos no diretório ‘testes’, dentro do diretório /home/bob – caso o diretório ‘testes’ não
exista, receberemos um erro e a operação não será realizada.
 Navegação pela árvore de diretórios com o comando ‘cd’.
Para voltar (subir) um nível na árvore de diretórios, usamos o argumento ‘..’, que representa o diretório acima,
ou diretório ‘pai’.
 Navegação pela árvore de diretórios com o comando ‘cd’.
Nesses exemplos, usamos um caminho relativo, ou seja, o resultado final sempre dependerá do diretório
atual. Se usarmos um caminho absoluto, o comando ‘cd’ nos levará para um diretório específico.
$ cd /etc
Após o comando, o diretório atual será /etc, não importando qual era inicialmente.
$ cd /
Após o comando, o diretório atual será a raiz do sistema, não importando qual era inicialmente.
O comando ‘cd’ também pode ser usado sem nenhum argumento. Nesse caso, o diretório atual passará a ser
o seu diretório home.
O diretório home de um usuário pode ser representado pelo caractere ‘~’. Assim, se um usuário digita o
comando:
$ cd ~
O diretório atual será o home do usuário que digitou o comando. Por exemplo, se o diretório home de ‘bob’ é
‘/home/bob’ e ele digita o comando:
$ cd ~/trabalho
Seu diretório atual passará a ser ‘/home/bob/trabalho’.
Vejamos, a seguir, comandos para criar e excluir diretórios e arquivos. Vamos lá?
$ MKDIR DIRETÓRIO
Para criar um novo diretório, indicando seu nome no argumento:
$ mkdir textos
Será criado o diretório de nome ‘textos’ dentro do diretório atual.
O mkdir também permite criar um diretório em qualquer ponto da árvore de diretórios, indicado por caminho
absoluto. Exemplo:
$ mkdir /tmp/textos
O diretório ‘textos’ será criado dentro do diretório /tmp.
$ RMDIR DIRETÓRIO
O ‘rmdir’ pode ser usado para apagar diretórios. É importante notar que ele não é capaz de apagar o seu
conteúdo, assim, o comando só conseguirá apagar um diretório se ele já estiver vazio.
O ‘rmdir’ também não conseguirá apagar um diretório se ele for o seu atual. Nesse caso você deve mudar o
seu diretório atual. Por exemplo, usando o comando ‘cd ..’ para subir um nível.
$ RM ARQUIVO
O comando ‘rm’ é usado para apagar arquivos. O argumento é o arquivo que deve ser apagado. Pode ser
passado um caminho relativo ou absoluto.
Exemplos:
$ rm trabalho.doc
Será apagado o arquivo trabalho.doc no diretório atual.
$ rm /home/bob/trabalho.doc
Será apagado o arquivo /home/bob/trabalho.doc. É importante notar que esse arquivo será apagado
independentemente do seu diretório atual, pois o argumento é um caminho absoluto.
$ rm atividade/trabalho.doc
Esse argumento é um caminho relativo, pois não começa na raiz (‘/’), desse modo, o comando ‘rm’ irá procurar
o diretório ‘atividade’ dentro do diretório atual e, dentro de ‘atividade’, o arquivo ‘trabalho.doc’.
O ‘rm’ também pode ser usado para apagar um diretório com todo o seu conteúdo, incluindo outros diretórios.
Essa operação é feita com a opção ‘-r’ (r de recursão), porém deve ser usada com extrema cautela.
Incorretamente, pode remover muito mais que o desejado e até apagar arquivos importantes para o
funcionamento do sistema operacional.
PROPRIEDADES DE ARQUIVOS E DIRETÓRIOS
Quando digitamos simplesmente o comando ‘ls’, vemos o conteúdo do diretório atual, porém não há distinção
entre o que é arquivo e o que é diretório.
bob@servidor:~$ ls 
arquivo1 arquivo2 arquivo3 linux testes trabalho
Para auxiliar nosso trabalho, as distribuições Linux costumam trazer o comando ‘ls’ configurado para colorir os
itens conforme seu tipo, mas é só isso. Sem essa funcionalidade, não podemos distinguir se cada item é
arquivo ou diretório.
E existem outras propriedades de arquivos e diretórios relacionadas à segurança que precisamos conhecer.
Para isso, o comando ‘ls’ possui opções que determinam as informações que ele irá exibir. Uma dessas
opções é o ‘-l’:
bob@servidor:~$ ls -l 
-rw-r----- 1 bob adm 240 May 20 15:37 arquivo1 
-rw-r--r-- 1 bob adm 1797 May 20 15:37 arquivo2 
-rw-r--r-- 1 bob bob 708 May 20 15:38 arquivo3 
drwxrwxr-x 4 bob aluno 4096 May 20 14:33 linux 
drwxrwxr-x 4 bob bob 4096 May 20 14:33 testes 
drwxrwxr-x 6 bob bob 4096 May 20 14:32 trabalho
Cada linha representa um item contido no diretório atual, ou seja, representa um arquivo ou diretório. Vamos
entender como as linhas são compostas:
O primeiro caractere de cada linha indica se é um diretório (d) ou um arquivo(-).
Em seguida, temos uma sequência de 9 caracteres que representam as permissões de segurança.
Da primeira linha exibida pelo comando ‘ls –l’, temos:
rw-r-----
Essa sequência é dividida em três partes, de 3 caracteres cada: Permissões do proprietário, do grupo e de
outros.
Todo arquivo e diretório possuem um usuário proprietário, algo como o ‘dono’ do arquivo. As permissões do
proprietário definem os poderes que esse usuário, o ‘dono’, tem sobre o arquivo.
A mesma coisa vale para as permissões do grupo. Todo arquivo e diretório possuem um grupo associado.
Essas permissões definem os poderes concedidos aos seus usuários membros. Para qualquer outro usuário,
não sendo o proprietário e nem pertencendo ao grupo, são definidas as permissões para outros.
rw- r-- ---
Permissões do proprietário Permissões do grupo Permissões para outros
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
O formato anterior é bem simples. Os caracteres sempre aparecerão na ordem: rwx
O significado dessas letras também é simples. Se a linha corresponde a um arquivo:
r – Significa que há permissão para leitura do arquivo. Ou seja, pode-se abrir e ler o conteúdo do arquivo.

w – Significa que há permissão para escrever no arquivo.

x – Significa permissão para executar o arquivo. Essa é uma permissão importante, pois dá o controle sobre o
que pode ser executado no sistema.
Se a permissão não estiver concedida, ‘r’, ‘w’ ou ‘x’ serão substituídos por ‘-‘.
Voltando ao nosso exemplo:
rw- r-- ---
Permissões do
proprietário
Permissões do grupo Permissões para outros
O proprietário pode
ler e escrever no
arquivo, mas não
pode executá-lo.
Os usuários que pertencem ao
grupo podem ler o arquivo,
mas não podem modificá-lo
nem o executar.
Qualquer outro usuário (que não seja
o proprietário e não pertença ao
grupo) não tem qualquer permissão
sobre o arquivo.
 Descrição das permissões do exemplo.
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
As permissões mudam um pouco seu significado quando a linha corresponde a um diretório. Veja a tabela a
seguir, que compara os efeitos de cada permissão entre arquivos e diretórios:
Arquivo Diretório
r (read) O arquivo pode ser lido. Sem essa
permissão, não é possível ler o conteúdo
do arquivo.
O conteúdo do diretório pode ser
visto. Sem essa permissão, não é
possível listar o conteúdo do
diretório com o comando ‘ls’, por
exemplo.
w (write) O arquivo pode ser modificado. O conteúdo do diretório pode ser
modificado. Permite criar novos
arquivos e diretórios, renomear ou
apagar arquivos e diretórios
existentes. 
Mas, para essa permissão ser
efetiva, a permissão ‘x’ (a seguir)
também deve estar concedida.
x
(execute)
O arquivo pode ser executado. É usado em
arquivos de programas e scripts. Sem
essa permissão, o Linux se recusará a
executar o programa nesse arquivo/script.
O diretório pode ser acessado. Sem
essa permissão, não é possível
acessar o diretório usando o
comando ‘cd’.
 Descrição das permissões possíveis para arquivos e diretórios.
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
javascript:void(0)
SCRIPT
Arquivos de texto com sequências de comandos que podem ser executados pelo sistema para a realização de
alguma tarefa.
De volta ao exemplo, cada linha produzida pelo comando ‘ls -l’ traz mais algumas informações:
-rw-r----- 1 bob adm 240 May 20 15:37 arquivo1
Já vimos que:
- Indica que arquivo1 é um arquivo. O ‘d’ indicaria que é um diretório.
rw-r----- Permissões de usuário, grupo e outros.
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
Os demais campos são:
1 Refere-se a como o sistema de arquivos organiza as informações de diretórios. Não
vamos nos preocupar com ele agora.
bob É o usuário proprietário do arquivo. Portanto, é bob quem terá as permissões rw-
sobre o arquivo.
adm É o grupo do arquivo. Os usuários do grupo adm terão as permissões r-- .
240 É o tamanho do arquivo em bytes. Quando o arquivo é muito grande, pode ser
usada a opção ‘-h’ no comando ‘ls’, que mostrará o tamanho em unidades de mais
fácil visualização (KB, MB, GB).
May 20 
15:37
Data e hora da última modificação do arquivo ou diretório.
arquivo1 O nome do arquivo ou diretório.
 Análise das informações sobre o arquivo.
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
Neste vídeo vamos conhecer um pouco mais sobre as propriedades e a estrutura de diretório do Linux .
COMANDOS PARA ALTERAR AS PERMISSÕES DE
ARQUIVOS E DIRETÓRIOS
No exemplo anterior, vimos que o arquivo de nome ‘arquivo1’ pertence ao grupo ‘adm’, cujas permissões são
r--. Na prática, os usuários que pertencem ao grupo ‘adm’ poderão apenas ler esse arquivo.
Como alterar o proprietário, o grupo e as permissões de um arquivo?
CHGRP GRUPO ARQUIVO
O comando chgrp (change group – mudar grupo) permite alterar o grupo de um arquivo ou diretório.
Antes
-rw-r----- 1 bob adm 240 May 20 15:37 arquivo1
Exemplo:
$ chgrp alunos arquivo1
Muda o grupo do ‘arquivo1’ para ‘alunos’.
Depois
-rw-r----- 1 bob alunos 240 May 20 15:37 arquivo1
O comando também permite a mudança sobre vários arquivos ou diretórios de uma só vez:
$ chgrp alunos arquivo1 arquivo2 arquivo3
O comando anterior mudou o grupo dos 3 arquivos para ‘alunos’.
Mais adiante, veremos como criar e gerenciar grupos de usuários.
CHOWN USUÁRIO ARQUIVO
Com o comando ‘chown’ (change owner – mudar proprietário), modificamos o proprietário de um arquivo ou
diretório.
Exemplo:
$ ls –l 
-rw-r----- 1 bob alunos 240 May 20 15:37 arquivo1 
$ chown joe arquivo1 
$ ls –l 
-rw-r----- 1 joe alunos 240 May 20 15:37 arquivo1
Assim como o ‘chgrp’, o ‘chown’ também permite mudar o proprietário de diversos arquivos de uma só vez.
$ chown bob arquivo1 arquivo2 arquivo3
Uma vantagem do ‘chown’ é que ele permite mudar, também, o grupo no mesmo comando.
$ chown bob:alunos arquivo1
Nesse exemplo, o proprietário será alterado para ‘bob’ e o grupo para ‘alunos’, ao mesmo tempo.
CHMOD PERMISSÕES ARQUIVO
O comando ‘chmod’ permite modificar as permissões de um arquivo ou diretório. Sua sintaxe é simples: O
primeiro argumento representa as novas permissões, e o segundo é o nome do arquivo ou diretório sobre o
qual a mudança será aplicada.
Assim como o ‘chown’ e o ‘chgrp’, o ‘chmod’ também permite aplicar as mudanças sobre mais de um arquivo
ou diretório de uma só vez, bastando incluir os nomes como argumentos adicionais.
Para as permissões, existem duas formas de representação: a numérica e a simbólica.
 
A representação numérica, ou representação OCTAL, é composta por três dígitos numéricos (ABC): o
primeiro (A) para as permissões do proprietário, o segundo (B) para grupo e o terceiro (C) para outros.
Cada dígito vai assumir um valor de 0 a 7, num total de 8 combinações possíveis para as três permissões que
ele representa.
 
Exemplo:
O dígito 4 representa permissão de leitura, apenas.
Se usarmos o comando: $ chmod 444 arquivo
As permissões do ‘arquivo’ serão: r--r--r--
Proprietário, grupo e outros têm apenas permissão para leitura.
Mas não é necessário decorar o significado de cada uma das 8 combinações possíveis, pois sua dedução é
uma simples soma binária. As permissões possíveis são: R, W e X – sempre nessa ordem. 
 
Cada uma dessas permissões pode ser ligada ou desligada, representada como um bit de valor ‘1’ ou ‘0’.
O bit correspondente ao X terá valor 1.
O bit correspondente ao W terá valor 2.
O bit correspondente ao R terá valor 4.
R W X
4 2 1
 
A conta é simples: Quando a permissão está ligada, soma-se seu valor.
As combinações possíveis são:
---  0 − nenhuma permissão
--x  1 − somente execução (1)
-w-  2 – somente escrita (2)
-wx  3 − escrita + execução (2+1)
r--  4 − somente leitura (4)
r-x  5 − leitura + execução (4+1)
rw-  6 − leitura + escrita (4+2)
rwx 7 − todas as permissões (4+2+1)
 
Exemplo:
$ chmod 740 arquivo
As permissões do ‘arquivo’ serão alteradas para:
rwxr----- O proprietário tem todas as permissões; grupo, somente de leitura; e os demais usuários, nenhuma
permissão.
 
Ao usar a representação numérica, sempre temos que explicitar todas as permissões. Se quisermos trocar
apenas parte das permissões, sem modificar outras, será necessário usar o comando ‘chmod’ com a
representação simbólica. 
Na representação simbólica, montamos uma ‘frase’ contendo as alterações que desejamos fazer, e veremos
que é possível modificar apenas parte das permissões.
 
O formato usa uma combinação de:
Qualificador: ‘u’ (proprietário), ‘g’ (grupo), ‘o’ (outros) e ‘a’ (todos).
Ações: ‘+’ (incluir a permissão), ‘-‘ (retirar a permissão) e ‘=’ (substituir as permissões).
Permissões: ‘r’, ‘w’ e ‘x’.
Várias permissões podem ser declaradas ao mesmo tempo, separadas por vírgulas.
 
Exemplo:
$ chmod u+rx arquivo
Nesse exemplo, serão incluídas (+) as permissões ‘r’ e ‘x’ para o proprietário (‘u’). Se uma ou ambas já
existiam, permanecem. Note que nada será feito quanto à permissão de escrita (w). Se o proprietário já a
tinha, continuará com ela. Se não, continuará sem ela. Repare também que apenas as permissões do
proprietário serão afetadas.
 
$ chmod u+rx,g+r,o-r arquivo
Nesse exemplo, serão incluídas (+) as permissões ‘r’ e ‘x’ para o proprietário. Será incluída (+) a permissão ‘r’
para o grupo e será removida (-) a permissão ‘r’ dos outros.
$ chmod a=rw arquivo
Nesse exemplo, o qualificador ‘a’ (all) fará com que as permissões sejam aplicadas, ao mesmo tempo, para
proprietário, grupo e outros. A ação ‘=’ indica que as permissões deverão ser conforme o indicado. Ou seja,
apenas ‘r’ e ‘w’. Como o ‘x’ não foi incluído, ele será retirado das permissões onde existir.
As permissões do ‘arquivo’ serão, independentemente dos valores iniciais: rw-rw-rw-
Repare que, nos dois primeiros exemplos, não é possível afirmar quais serão as permissões do arquivo após
usar o comando ‘chmod’, porque apenas parte delas foi modificada e o resultado final depende das situações
iniciais, que não foram apresentadas.
 
Exemplo:
Situação inicial:
r-xr--r--
Comando:
chmod u+w,g+x,o-r
Situação final:
rwxr-x---
Foi incluída (+) a permissão ‘w’ para o proprietário, incluída (+) a ‘x’ para o grupo e excluída (-) a ‘r’ para os
demais.
COPIANDO ARQUIVOS
Para copiar arquivos no Linux, usamos o comando ‘cp’. Sua sintaxe é simples:
$ cp origem destino
O primeiro argumento é o nome do arquivo que iremos copiar. Pode ser indicado apenas o nome, se ele
estiver no diretório atual. Caso não esteja, deve ser indicado com o caminho completo.
O destino é o nome para o qual será copiado. Observe que:
O destino pode ser um caminho completo, permitindo direcionar a cópia para qualquer diretório.
Se o destino for apenas um nome, sem caminho completo, o arquivo será copiado com esse nome no
diretório atual.
No destino pode ser indicado um nome diferente do original para a cópia.
Se o destino for o nome de um diretório existente, o arquivo será copiado para dentro desse diretório
com o mesmo nome original.
 EXEMPLO
$ cp arquivo1 arquivo2
Nesse exemplo, nenhum dos argumentos é um caminho completo, portanto, origem e destino serão tratados
no diretório atual. O ‘arquivo1’ será copiado como ‘arquivo2’.
Repare que o ‘arquivo2’ possuirá conteúdo idêntico ao do ‘arquivo1’, afinal foi feita uma cópia, mas são
arquivos independentes. Alterações em um não se aplicarão ao outro.
$ cp /etc/resolv.conf /tmp
O arquivo ‘/etc/resolv.conf’ (arquivo ‘resolv.conf’ no diretório ‘/etc’) será copiado para ‘/tmp’. Como ‘/tmp’ é um
diretório, a cópia terá o mesmo nome original. Ou seja, o caminho completo da cópia será ‘/tmp/resolv.conf’.
Repare o próximo exemplo: 
$ cp /etc/resolv.conf /tmp/qualquer
Supondo que não exista um diretório de nome ‘qualquer’ dentro de ‘/tmp’, o arquivo ‘/etc/resolv.conf’ será
copiado para o ‘/tmp’ com o nome de ‘qualquer’.
Se ‘/tmp/qualquer’ existir como diretório, a cópia segue o exemplo anterior, e o caminho completo da cópia
será ‘/tmp/qualquer/resolv.conf’.
MOVENDO ARQUIVOS
No Linux, o comando ‘mv’ é usado para mover e renomear arquivos. Sua sintaxe é semelhante à do comando
‘cp’:
$ mv arquivo1 arquivo2
Nesse exemplo, o ‘arquivo1’ será simplesmente renomeado para ‘arquivo2’. Como nenhum caminho foi
indicado, toda a operação se restringe ao diretório atual.
Se for usado o comando:
$ mv arquivo1 /tmp/arquivo2
Nesse caso, o ‘arquivo1’ será movido para o diretório /tmp e será renomeado para ‘arquivo2’.
Suponha, porém, que ‘/tmp/arquivo2’ seja um diretório já existente. O ‘arquivo1’ será movido para esse
diretório e seu nome original será mantido. No final, o caminho completo dele será ‘/tmp/arquivo2/arquivo1’.
LINKS SIMBÓLICOS
Um recurso importante e muito útil do Linux é o link simbólico, um tipo especial de arquivo que aponta para
outro arquivo ou diretório. Todas as operações em um link, de leitura ou escrita, serão realizadas no seu alvo.
Existe outro tipo de link, o hard link, porém, nesse texto abordaremos somente os links simbólicos, também
chamados de soft links.
Identificar um link é fácil com o comando ‘ls –l’. A primeira letra de cada linha, que indica o tipo do arquivo,
será ‘l’ de link.
$ ls -l 
lrwxrwxrwx 1 bob bob 8 May 24 15:13 nome_do_link -> arquivo1
No exemplo, temos a linha que corresponde a um link de nome ‘nome_do_link’. Repare que o ‘ls -l’ já informa
o alvo do link, nesse caso o ‘arquivo1’. Ou seja:
Ao ler o conteúdo do link, leremos o conteúdo de ‘arquivo1’.
Ao abrir um editor e alterar o conteúdo do link, alteraremos o conteúdo de ‘arquivo1’.
Importante ressaltar que se o link simbólico for apagado, seu alvo (‘arquivo1’) não será afetado.
O link também pode apontar para diretórios, como no exemplo a seguir:
lrwxrwxrwx 1 bob bob 4 May 24 15:17 temporario -> /tmp
Temos um link de nome ‘temporario’ apontando para o diretório ‘/tmp’. Ao entrar nesse diretório com o
comando ‘cd’, visualizamos o conteúdo do diretório ‘/tmp’. Qualquer alteração que fizermos, criar, apagar ou
modificar arquivos será realizada no diretório ‘/tmp’, que é para onde o link aponta.
Para criar um link, usamos o comando ‘ln’ com a opção ‘-s’.
$ ln –s ALVO LINK
 EXEMPLO
$ ln –s arquivo1 arquivo2
Será criado um link com nome ‘arquivo2’ apontando para ‘arquivo1’.
$ ln –s /etc/resolv.conf arquivo3
Será criado um link com nome ‘arquivo3’ apontando para o alvo ‘/etc/resolv.conf’. O comando ‘ls –l ‘mostrará a
linha:
lrwxrwxrwx 1 bob bob 16 May 24 15:25 arquivo3 -> /etc/resolv.conf
A sintaxe do comando é a mesma para criar links de diretórios.
VERIFICANDO O APRENDIZADO
MÓDULO 3
 Descrever a organização de usuários e grupos e os principais comandos para o seu gerenciamento
O Linux é um sistema operacional multiusuário, capaz de gerenciar diversos usuários do sistema, garantindo
sua independência e proteção de dados. Como vimos no módulo anterior, o gerenciamento de segurança é
vinculado aos usuários e pelas permissões de acesso a arquivos e diretórios.
Neste módulo, veremos como o Linux trata seus usuários e grupos e os principais comandos para esse
gerenciamento.
 Fonte: Unsplasg | Por: Ilya Pavlov .
GERENCIAMENTO DE USUÁRIOS E GRUPOS
No Linux, cada usuário é representado por um nome, também chamado de username (nome de usuário). Em
geral, o username é uma palavra de até 31 caracteres alfanuméricos, sem espaços e cujo primeiro caractere
deve ser uma letra. Ele será o identificador do usuário, usado para acessar o sistema, definir permissões etc.
O username é definido por quem está criando o usuário e deve ser único naquele sistema. Em geral, não são
admitidas letras maiúsculas no username.
Por razões práticas, o sistema trata internamente os usuários por meio de um número. Por isso, sempre que
um usuário é criado, o sistema, automaticamente, atribui a ele um número, conhecidocomo UID (User ID –
Identificador de usuário).
Um comando que permite descobrir o UID de um usuário é o ‘id’.
$ id 
uid=1000(bob) gid=1000(bob) groups=1000(aluno),4(adm)...
A primeira parte da resposta, em destaque, nos mostra que o UID do usuário ‘bob’ é ‘1021’.
A maneira como o Linux organiza a distribuição de números UID pode variar entre distribuições, já que esse
comportamento é configurável. Em geral, os números mais baixos são reservados para usuários do sistema
que já vêm pré-configurados.
Aos usuários “comuns”, criados posteriormente, são reservados os números mais altos, por exemplo, acima
de ‘1000’. Portanto, nesse caso, o primeiro usuário criado receberia o UID ‘1000’; o segundo, ‘1001’.
 ATENÇÃO
A numeração de UID não precisa ser contínua, mas é obrigatório que:
Não pode haver repetição, ou seja, cada usuário tem um UID exclusivo.
O UID zero é exclusivo do usuário ‘root’.
A principal vantagem em usar o UID está na simplicidade para fazer referência a um usuário usando um
número inteiro, de tamanho fixo e reduzido (por exemplo, 32 bits), e não como uma sequência de caracteres
de tamanho variável.
Quando um usuário é criado no Linux, ele é registrado no arquivo ‘/etc/passwd’, que funciona como um banco
de dados dos usuários. Como quase tudo no Linux, é um arquivo texto, podendo ser visualizado com um
editor de texto comum.
 ATENÇÃO
Apesar de poder ser alterado manualmente com o editor, não é recomendável fazê-lo, já que um pequeno
descuido pode criar sérios problemas ao sistema, seus usuários e programas.
A estrutura do arquivo ‘/etc/passwd’ é bem simples, com uma linha por usuário, onde são registradas as
informações mais básicas de cada um, como username, UID, diretório HOME etc.
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin 
bin:x:2:2:bin:/bin:/usr/sbin/nologin 
sys:x:3:3:sys:/dev:/usr/sbin/nologin 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/usr/sbin/nologin 
bob:x:1000:1000:,,,:/home/bob:/bin/bash
 Trecho do arquivo /etc/passwd, onde o caractere ‘:’ é o separador de colunas.
Repare na primeira coluna o username do usuário e, na terceira, o UID.
Antes, a senha também era guardada nesse arquivo, devidamente cifrada. No entanto, esse mecanismo
passou a ser considerado frágil e um novo foi criado, utilizando outro arquivo para armazenar a senha, o
‘/etc/shadow’.
bob:$6$iq0Z3IcUYLZCFjay$ezM1slkXqPTxLez9/bzvkiHEJPEq/JUGyGDe4pBhPfUsMvA/:18407:0:99999:7:::
 Uma linha do arquivo /etc/shadow referente ao usuário bob.
A segunda coluna contém a senha “cifrada” do usuário. Na realidade, o que está gravado nesse arquivo é um
hash da senha do usuário. Esse mecanismo dificulta a obtenção da senha original, mesmo que o servidor seja
invadido e esse arquivo copiado.
TROCANDO A SENHA DO USUÁRIO
O comando ‘passwd’ permite mudar a senha.
$ passwd 
Changing password for bob. 
Current password: ********* 
New password: ******** 
Retype new password: ******** 
passwd: password updated successfully
 ATENÇÃO
Os asteriscos (*) não são exibidos pelo comando ‘passwd’, foram incluídos aqui para representar a digitação
das senhas.
Inicialmente é necessário digitar a senha atual, garantindo que a operação está sendo feita pelo próprio
usuário. Depois, a nova senha deve ser digitada duas vezes para confirmação.
O usuário ‘root’ pode usar o comando ‘passwd’ para trocar a senha de outro usuário, bastando indicar o
username como argumento. Por exemplo:
$ passwd joe
CRIANDO USUÁRIOS
Para criar um usuário no Linux, podemos usar o comando ‘adduser’, que é interativo e simples. Como deve
ser executado pelo usuário ‘root’, é necessário o ‘sudo’.
$ sudo adduser USERNAME
No argumento deve ser indicado o username do novo usuário, muitas vezes chamado de “login do usuário”. O
comando pedirá uma senha inicial para o novo usuário e fará algumas perguntas, opcionais.
$ sudo adduser joe 
Adding user `joe' ... 
Adding new group `joe' (1002) ... 
Adding new user `joe' (1002) with group `joe' ... 
Creating home directory `/home/joe' ... 
Copying files from `/etc/skel' ... 
New password: ******** 
Retype new password: ******** 
passwd: password updated successfully 
Changing the user information for joe 
Enter the new value, or press ENTER for the default 
 Full Name []: Joe 
 Room Number []: 1234 
 Work Phone []: 5678 
 Home Phone []: 98765432 
 Other []: 
Is the information correct? [Y/n] Y
Ao término, pede-se para confirmar a efetiva criação da conta. Novamente, os asteriscos (*) não são exibidos
na tela.
A seguir vamos entender como é feita a criação de grupos.
GRUPOS
O Linux permite a criação de grupos de usuários, facilitando bastante a administração do sistema. Como
vimos anteriormente, as permissões de arquivos permitirão realizar atribuições a vários usuários de uma só
vez.
Assim como os usuários, os grupos também possuem números de identificação, o GID (Group ID).
 ATENÇÃO
É importante ressaltar que UID e GID seguem numerações independentes, então será muito comum ver um
mesmo número atribuído ao UID de um usuário e ao GID de um grupo. Isso não é um problema, pois são
conjuntos distintos.
Uma dúvida comum é se todo usuário é obrigado a pertencer a pelo menos um grupo. A resposta curta é SIM,
mas precisa ser explicada: do ponto de vista do usuário, existem o grupo primário e os grupos secundários.
GRUPO PRIMÁRIO
Todo usuário deve pertencer a um grupo primário, apenas um. Este é configurado diretamente na linha do
usuário no arquivo ‘/etc/passwd’. Quando um usuário cria um arquivo ou diretório, o seu grupo primário é
atribuído inicialmente como o grupo desse novo arquivo ou diretório.
Geralmente, os comandos para criação de usuário vêm previamente configurados para criar um grupo
exclusivo para cada novo usuário, com o mesmo username do usuário e atribuído como grupo primário para
ele. Por isso, ao criar a conta ‘bob’, veremos que também foi criado um grupo bob. 
Anteriormente, vimos o comando ‘id’, que traz informações sobre o usuário, como o seu UID.
$ id 
uid=1000(bob) gid=1000(bob) groups=1000(aluno),4(adm)...
A segunda informação que ele nos traz é exatamente o grupo primário da conta ‘bob’: um grupo também de
nome ‘bob’ e com GID ‘1000’. Observe que, nesse exemplo, o UID do usuário bob e o GID do grupo ‘bob’ têm
o mesmo número, o que foi uma coincidência.
GRUPOS SECUNDÁRIOS
Os grupos adicionais aos quais um usuário pertence são chamados de grupos secundários. Enquanto o
primário é definido quando a conta de um usuário é criada, a participação em grupos secundários é definida
posteriormente, depois que a conta do usuário já foi criada. 
 
Nenhum usuário é obrigado a pertencer a grupos secundários.
Vamos entender agora os principais comandos para o gerenciamento de grupos?
CRIANDO GRUPOS
Toda manipulação de grupos só pode ser feita pelo usuário ‘root’, então não se esqueça de usar o comando
‘sudo’.
$ sudo addgroup GRUPO 
Passando no argumento o nome do grupo:
$ sudo addgroup aluno 
Adding group `aluno' (GID 1003) ... 
Done.
O grupo ‘aluno’ será criado ‘vazio’, ou seja, sem usuários membros.
MANIPULANDO OS GRUPOS DE USUÁRIOS
É possível mudar o grupo primário de um usuário, mas cuidado para não criar problemas de segurança no
seu sistema.
$ sudo usermod -g GRUPO LOGIN
$ sudo usermod -g aluno bob
Trocará o grupo primário de bob para ‘aluno’.
PARA ADICIONAR UM USUÁRIO A UM GRUPO SECUNDÁRIO,
USE O COMANDO
$ sudo usermod –a –G GRUPO LOGIN
Repare nas opções ‘–G’ (maiúsculo), que indica grupo secundário, e ‘-a’ para incluir (append) o grupo.
$ sudo usermod –a –G aluno bob
O usuário ‘bob’ será incluído no grupo secundário ‘aluno’. 
Também é possível incluir o usuário em diversos grupos de uma só vez (separados por vírgula e sem
espaços):
$ sudo usermod –a –G aluno,professor bob
O usuário ‘bob’ será incluído nos grupos secundários ‘aluno’ e ‘professor’.
PARA RETIRAR UM USUÁRIO DE UM GRUPOSECUNDÁRIO $ sudo
gpasswd –d LOGIN GRUPO
Exemplo:
$ sudo gpasswd –d bob aluno PARA EXCLUIR UM GRUPO $ sudo groupdel GRUPO
Neste exemplo, estamos apagando o grupo ‘aluno’:
$ sudo groupdel aluno OBTENDO INFORMAÇÕES SOBRE GRUPOS
groups [USERNAME]
O comando ‘groups’ permite obter a lista de grupos aos quais um usuário indicado no argumento pertence. Se
o argumento de username for omitido, a informação prestada será sobre o usuário que executou o comando. 
members GRUPO
O comando ‘members’ exibe a lista de usuários que pertencem a um grupo.
$ members alunos 
alice bob joe
O comando ‘members’ não é instalado por padrão em algumas distribuições Linux. Verifique na documentação
como instalá-lo manualmente.
O ARQUIVO /ETC/GROUP
É onde o Linux guarda as informações dos grupos existentes e de seus membros. Assim como o ‘passwd’ e
‘shadow’, também usa uma linha para cada grupo, iniciando com o nome do mesmo.
alunos:x:1004:alice,bob,joe
A linha em destaque representa o grupo ‘alunos’, cujo GID é ‘1004’ e tem como membros: ‘alice’, ‘bob’ e ‘joe’.
Como vimos, o Linux é um sistema operacional multiusuário, capaz de gerenciar diversos usuários do sistema.
Assista ao vídeo a seguir e veja em maiores detalhes o emprego do recurso sudo e dos grupos no Linux.
VERIFICANDO O APRENDIZADO
MÓDULO 4
 Reconhecer o funcionamento do servidor Web Apache
A administração de serviços no Linux requer o conhecimento do terminal de comandos e de operações com
arquivos e usuários. Agora que já temos uma base sobre esses assuntos, estamos prontos para prosseguir e
compreender o funcionamento, a configuração básica, a organização de arquivos e a administração do
servidor Web Apache.
SERVIDOR WEB APACHE
Dentre os programas mais utilizados em servidores da internet em todo o mundo está o Apache. Para
começar este tópico, precisamos entender o que é o Apache e o papel que ele desempenha em servidores.
O Apache é um servidor HTTP ou, como muitos chamam, um servidor Web. Ele é responsável por receber e
processar requisições enviadas por clientes HTTP. Quando acessamos um site, do outro lado estamos sendo
atendidos por um servidor HTTP.
SERVIDOR HTTP
São executados em processos do tipo background, ou seja, sem intervenção manual de um administrador
para responder às solicitações recebidas.
javascript:void(0)
O Apache se destaca por ser um software de alta confiabilidade, gratuito e de código-fonte aberto, permitindo
que qualquer pessoa possa modificá-lo para uso pessoal ou contribuir com melhorias para a comunidade de
usuários.
O Apache é mantido pela The Apache Software Foundation e um grande número de programadores contribui
com o seu desenvolvimento. Como possui diversos módulos opcionais para variadas funcionalidades, tem
grande versatilidade.
 ATENÇÃO
É importante frisar que diferentes distribuições Linux utilizam distintos esquemas de organização das
configurações do Apache. Neste tema, abordaremos a organização usada nas distribuições baseadas no
Debian, como a Ubuntu Linux.
Mais importante do que entender a organização é compreender a lógica de administração. Assim, você saberá
do que precisa quando se deparar com uma distribuição que utiliza um esquema diferente.
INSTALAÇÃO DO APACHE
Geralmente, o Apache pode ser instalado por dois caminhos:
CAMINHO 1
CAMINHO 2
CAMINHO 1
Baixando seu código-fonte e compilando-o. Apesar de existir farta documentação, é uma atividade mais
complexa e exige a instalação prévia de bibliotecas, compiladores etc. Em geral, é a opção para usuários
avançados e em casos mais específicos.
CAMINHO 2
O segundo caminho, mais simples, é a instalação por meio de pacotes fornecidos pelas principais
distribuições Linux. Os pacotes já trazem o programa pronto para executar, além de bibliotecas e outras
dependências. As rotinas de atualização também são facilitadas, assim como a instalação de módulos
opcionais.
A instalação do Apache na distribuição Ubuntu Linux é feita com o comando:
$ sudo apt install apache2
O ‘apt’ é o programa gerenciador de pacotes usado pelo Ubuntu. Ele irá obter na internet os pacotes do
Apache e fará sua instalação. Após isso, o Apache estará configurado com uma página inicial de
demonstração, que pode ser acessada a partir de outro computador.
Usando o comando ‘ip addr’, obtenha o endereço IP do servidor. Em outra máquina, na mesma rede, abra um
navegador (Internet Explorer, Firefox, Chrome) e digite o endereço do servidor. Exemplo: http://192.168.1.70
 Página de teste do Apache, pacote padrão do Apache na distribuição Ubuntu Linux.
Antes, era comum escrever toda a configuração do Apache em um único arquivo, como o ‘/etc/httpd.conf’.
O problema dessa abordagem é que, quanto mais sites eram criados no servidor, maior ficava esse arquivo,
até ser impraticável administrá-lo. Para piorar, aumentavam as chances de se cometer um erro acidental na
configuração, afetando todo o servidor.
Não era incomum o servidor sair do ar, e consequentemente todos os sites hospedados, por um erro
acidental, muitas vezes difícil de ser diagnosticado.
Para facilitar a administração, a configuração do Apache passou a ser modularizada, composta por diversos
arquivos, organizados por tipo de configuração, em diretórios específicos.
Uma árvore de diretórios de configuração típica está representada a seguir:
/etc/apache2/ 
├── conf-available 
├── conf-enabled 
├── mods-available 
├── mods-enabled 
├── sites-available 
└── sites-enabled
 Organização de diretórios de configuração do Apache na distribuição Ubuntu Linux. Fonte: Autor
Vamos entender como funciona?
ARQUIVOS
DIVISÃO DOS DIRETÓRIOS EM GRUPOS
LEITURA DOS ARQUIVOS
ARQUIVOS
No diretório ‘/etc/apache2’ estão localizados arquivos com configurações globais do Apache. Entre eles:
‘ports.conf’, em que são declaradas as portas TCP que o Apache abre para receber solicitações – Por
padrão, 80 para HTTP e 443 para HTTPS.
‘apache2.conf’, o arquivo principal de configuração. Mas, nenhuma configuração deve ser incluída aqui.
Por padrão, esse arquivo contém instruções para que as configurações sejam obtidas nos demais
arquivos e diretórios.
DIVISÃO DOS DIRETÓRIOS EM GRUPOS
Dentro de ‘/etc/apache2’ há seis diretórios, divididos em três grupos:
conf - Para configurações gerais do Apache.
mods - Para configuração de módulos.
sites - Para configuração de sites.
LEITURA DOS ARQUIVOS
Para cada um desses grupos, há um diretório ‘available’ (disponível) e um ‘enabled’ (habilitado). Quando o
Apache é iniciado, ele lê todos os arquivos dos diretórios ‘enabled’:
/etc/apache2/conf-enabled
/etc/apache2/mods-enabled
/etc/apache2/sites-enabled
Cada um dos arquivos presentes nesses diretórios será lido e sua configuração carregada pelo Apache. Se
listarmos, porém, o conteúdo de qualquer um desses diretórios, veremos que todos os seus arquivos são, na
verdade, links.
$ ls –l /etc/apache2/conf-enabled 
lrwxrwxrwx 1 root root 30 May 26 12:53 charset.conf -> ../conf-available/charset.conf 
lrwxrwxrwx 1 root root 44 May 26 12:53 localized-error-pages.conf -> ../conf-available/localized- 
lrwxrwxrwx 1 root root 46 May 26 12:53 other-vhosts-access-log.conf -> ../conf-available/other- 
lrwxrwxrwx 1 root root 31 May 26 12:53 security.conf -> ../conf-available/security.conf 
lrwxrwxrwx 1 root root 36 May 26 12:53 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf
Observe o ‘l’ no início de cada linha, indicando que se trata de links simbólicos.
Todos os links no diretório ‘conf-enabled’ apontam para arquivos que estão no respectivo diretório ‘conf-
available’. 
Mas por que essa organização?
Para permitir que as configurações possam ser escritas livremente e só ativadas quando desejado. Um
arquivo nos diretórios ‘available’ não será lido pelo Apache. Isso permite que escrevamos uma configuração,
mas só a ative posteriormente, criando o link em ‘enabled’ para esse arquivo.
Assim, o Apache pode trazer diversas configurações de módulos opcionais que permanecerão inativasaté
que o administrador as ative manualmente. Isso vale para as configurações de site. É possível retirar um site
do ar meramente apagando o ‘link’ da configuração deste, não sendo necessário editar arquivos com outras
configurações.
Nos diretórios ‘available’ estarão os arquivos texto com as configurações, ativas ou não. Nos diretórios
‘enabled’ existirão apenas links para as configurações ativas.
 EXEMPLO
O arquivo ‘/etc/apache2/mods-available/ssl.conf’ possui configurações para ativar o protocolo criptografado
HTTPS. Se o seu servidor não vai utilizar esse recurso, não há necessidade de ter esse módulo habilitado.
Por outro lado, para ativar o HTTPS, basta criar o link no diretório ‘enabled’ e o recurso estará disponível para
uso.
 IMPORTANTE
O nome dos arquivos de configuração deve terminar com ‘.conf’.
ATIVANDO E DESATIVANDO MÓDULOS,
CONFIGURAÇÕES E SITES
Sabemos que para ativar as configurações devem ser criados links nos diretórios ‘enabled’ apontando para
arquivos no diretório ‘available’. No entanto, o Apache traz comandos que facilitam essa tarefa:
A2ENCONF E A2DISCONF
O comando ‘a2enconf’ habilita (enable) as configurações, enquanto o ‘a2disconf’ as desabilita (disable).
Exemplo de uso: 
$ sudo a2enconf charset
O nome da configuração é passado no argumento, e a terminação ‘.conf’ dos arquivos pode ser omitida. 
Nesse exemplo, foi ativada a configuração ‘charset’. O programa criou o link: 
‘/etc/apache2/conf-enabled/charset.conf’
apontando para
‘/etc/apache2/conf-available/charset.conf’
Os comandos para habilitar e desabilitar módulos e sites são semelhantes.
A2ENMOD E A2DISMOD
O comando ‘a2enmod’ habilita módulos opcionais do Apache, enquanto o ‘a2dismod’ desabilita.
A2ENSITE E A2DISSITE
O comando ‘a2ensite’ habilita sites, enquanto o ‘a2dissite’ desabilita.
Após qualquer alteração nas configurações, é necessário avisar ao Apache para que ele as releia ou reinicie o
processo.
Para as tarefas de controle do processo do Apache existe o comando ‘apache2ctl’, que oferece diversas
opções. Entre elas:
$ APACHE2CTL START
$ APACHE2CTL CONFIGTEST
$ APACHE2CTL STOP
$ APACHE2CTL RESTART
$ APACHE2CTL GRACEFUL
$ APACHE2CTL STATUS
$ APACHE2CTL START
Inicia o processo do Apache, retornando erro se o processo já estiver executando.
$ APACHE2CTL CONFIGTEST
Executa uma análise dos arquivos de configuração do Apache em busca de erros de sintaxe, sem interferir
com o processo em execução. Deve-se observar que nem todo erro será detectável por esse teste.
$ APACHE2CTL STOP
Encerra o processo do Apache. Nenhuma nova requisição será recebida e os usuários receberão um aviso do
tipo “servidor inacessível”.
$ APACHE2CTL RESTART
Encerra e reinicia o processo do Apache. Não deve ser usado apenas para carregar novas configurações, pois
as requisições em andamento serão interrompidas imediatamente. Deve-se usar com cuidado, já que
eventuais erros de configuração poderão impedir o processo de reiniciar, deixando-o parado.
$ APACHE2CTL GRACEFUL
Envia um sinal para o Apache reiniciar, relendo os arquivos de configuração, porém sem interromper as
requisições em andamento. Se o processo não estava em execução, ele é iniciado. Também é possível que
erros na configuração impeçam o processo de reiniciar, deixando-o parado.
$ APACHE2CTL STATUS
Exibe informações sobre o processo em execução do Apache. Há também o argumento ‘fullstatus’, com
informações detalhadas sobre as requisições sendo atendidas (requer o módulo ‘mod_status’ habilitado).
Como já vimos, quando o Apache é instalado é feita uma configuração inicial com uma página de teste. O
nome do arquivo deste site pode variar dependendo da distribuição Linux.
Nas distribuições Debian e Ubuntu, esse arquivo é o /etc/apache2/sites-enables/000-default.conf e seu
conteúdo é reproduzido a seguir:
<VirtualHost *:80> 
 # The ServerName directive sets the request scheme, hostname and port that 
 # the server uses to identify itself. This is used when creating 
 # redirection URLs. In the context of virtual hosts, the ServerName 
 # specifies what hostname must appear in the request's Host: header to 
 # match this virtual host. For the default virtual host (this file) this 
 # value is not decisive as it is used as a last resort host regardless. 
 # However, you must set it for any further virtual host explicitly. 
 #ServerName www.example.com 
 
 ServerAdmin webmaster@localhost 
 DocumentRoot /var/www/html 
 
 # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, 
 # error, crit, alert, emerg. 
 # It is also possible to configure the loglevel for particular 
 # modules, e.g. 
 #LogLevel info ssl:warn 
 
 ErrorLog ${APACHE_LOG_DIR}/error.log 
 CustomLog ${APACHE_LOG_DIR}/access.log combined 
 
 # For most configuration files from conf-available/, which are 
 # enabled or disabled at a global level, it is possible to 
 # include a line for only one particular virtual host. For example the 
 # following line enables the CGI configuration for this host only 
 # after it has been globally disabled with "a2disconf". 
 #Include conf-available/serve-cgi-bin.conf 
</VirtualHost> 
O arquivo parece grande, mas repare que muitas linhas começam com o caractere ‘#’. Toda linha iniciada com
o ‘#’ é considerada comentário e não é lida pelo Apache. As linhas em branco também são ignoradas.
 ATENÇÃO
A maioria dos arquivos de configuração no Linux usa essa mesma lógica, assim, é fácil inserir textos,
comentários e observações para serem lidos por pessoas e não pela máquina.
Portanto, desse arquivo, o que será efetivamente lido pelo Apache é somente isso:
<VirtualHost *:80> 
 ServerAdmin webmaster@localhost 
 DocumentRoot /var/www/html 
 ErrorLog ${APACHE_LOG_DIR}/error.log 
 CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 
EXAMINANDO O ARQUIVO DE CONFIGURAÇÃO
Antes de analisar o significado de cada uma dessas linhas, precisamos ter em mente qual é o objetivo dessa
configuração: trata-se de uma configuração inicial, com uma página simples de demonstração, a única
presente no servidor.
Em um servidor com vários sites, existirão vários arquivos de configuração semelhantes a esse, um para cada
site.
<VIRTUALHOST *:80>
SERVERADMIN WEBMASTER@LOCALHOST
DOCUMENTROOT /VAR/WWW/HTML
ERRORLOG /VAR/LOG/APACHE/ERROR.LOG
CUSTOMLOG /VAR/LOG/APACHE/ACCESS.LOG COMBINED
<VIRTUALHOST *:80>
A diretiva ‘<VirtualHost>’ permite configurar os endereços e as portas em que o site responde. 
Um servidor Linux pode ser configurado com diversos endereços IP. O Apache permite que determinados
sites respondam em somente um desses endereços. É possível, por exemplo, designar um endereço IP para
cada site. A desvantagem desse tipo de configuração é que você precisará de novos endereços para cada
novo site, o que nem sempre é possível. 
A configuração mais usada hoje consiste em um único endereço IP sendo usado para atender a diversos
sites. 
Nessa linha de ‘<VirtualHost>’, o ‘*:80’ significa que o site responderá em todos os endereços IP do servidor e
na porta 80. 
Lembre-se que a porta 80 é a padrão (well known port) para o protocolo HTTP, assim como a porta 443 é a
padrão para o protocolo HTTPS. A princípio, qualquer porta pode ser utilizada pelo Apache, se já não estiver
em uso por outro processo. Mas será necessário divulgar, além do endereço, o número da porta para compor
a URL.
 Por exemplo, se for usada a porta 8000, a URL será: ‘http://www.meusite.com:8000’.
SERVERADMIN WEBMASTER@LOCALHOST
Informação que será passada a um cliente em caso de erro no acesso ao site, contendo um e-mail para
contato.
DOCUMENTROOT /VAR/WWW/HTML
Uma das configurações mais importantes de um site é onde está seu conteúdo. Nesse caso, o diretório
‘/var/www/html’.
ERRORLOG /VAR/LOG/APACHE/ERROR.LOGA diretiva ‘ErrorLog’ define em que arquivo serão gravados os registros (logs) de erro. A cada erro ocorrido,
uma nova linha é gerada nesse arquivo, com as informações sobre ele, além de data e hora.
CUSTOMLOG /VAR/LOG/APACHE/ACCESS.LOG COMBINED
A diretiva ‘CustomLog’ define em que arquivo serão gravados os registros de acesso aos sites. O parâmetro
‘combined’ define um formato predeterminado para esses registros.
A DIRETIVA DIRECTORYINDEX
O acesso a um site é sempre feito por meio de uma URL (Uniform Resource Locator) digitada no navegador. A
URL é, em resumo, uma frase que contém todas as informações para localizar um recurso como site ou
arquivo.
 EXEMPLO
http://site-exemplo.com/info.html
Nessa URL constam o protocolo (HTTP), o endereço do site (‘site-exemplo.com’) e o nome do recurso
procurado (‘info.html’). O cliente (navegador) se conecta ao servidor do site e requisita o recurso ‘info.html’.
Nesse exemplo, o servidor Apache buscaria o arquivo ‘info.html’ no diretório do site e o enviaria ao cliente.
Muitas vezes, porém, usamos uma URL sem indicar um recurso, como em http://site-exemplo.com. 
Nesses casos, como o Apache sabe que arquivo buscar?
Para esta função, há a diretiva ‘DirectoryIndex’, que permite definir um ou mais arquivos que serão procurados
pelo Apache, em ordem.
 EXEMPLO
• DirectoryIndex principal.html 
Define o nome do arquivo a ser procurado. 
 
• DirectoryIndex principal.html opcional.html 
O Apache procurará o arquivo ‘principal.html’. Se não encontrar, irá procurar o ‘opcional.html’.
Na ausência dessa diretiva, o Apache assume como padrão o arquivo ‘index.html’.
CONFIGURANDO DOIS SITES NO MESMO
SERVIDOR
Atualmente, é muito comum um servidor hospedar diversos sites independentes utilizando somente um
endereço IP. A diretiva ‘Servername’ permite determinar na configuração do site o nome (domínio) pelo qual
ele responderá.
Mas é importante lembrar que o cliente deverá conseguir resolver esse nome, assim, não basta configurar o
Apache para responder por ele, também é preciso registrá-lo em um servidor DNS.
Vamos simular a configuração de dois sites em um servidor Apache?
Na tabela a seguir, relacionaremos todas as informações necessárias para a configuração:
Site A Site B
Nome (domínio) do site www.site-teste1.com www.site-teste2.com
Diretório com o conteúdo do site /var/www/site-teste1 /var/www/site-teste2
Arquivo “principal” (DirectoryIndex) index.html default.htm
Arquivo de configuração 
(/etc/apache2/sites-available)
site-teste1.conf site-teste2.conf
 Resumo de configurações para a criação dos sites.
 Atenção! Para melhor visualização da tabela, utilize o celular na posição horizontal.
CRIANDO OS DIRETÓRIOS PARA OS SITES
Também é necessário colocar o conteúdo. Nesse exemplo, copiaremos o arquivo de demonstração
(‘/var/www/html/index.html’) para este fim.
$ sudo mkdir /var/www/site-teste1
$ sudo cp /var/www/html/index.html /var/www/site-teste1
$ sudo mkdir /var/www/site-teste2
$ sudo cp /var/www/html/index.html /var/www/site-teste2/default.htm
 Repare que, no segundo exemplo, o arquivo foi copiado mudando o nome para ‘default.htm’. 
Lembre-se: O nome e o caminho do arquivo HTML de demonstração, que usamos como base, variam
conforme a distribuição Linux. Qualquer arquivo HTML pode ser usado como conteúdo nesse teste.
 Importante: O Apache é executado por um usuário com poucos privilégios. O nome do usuário varia com a
distribuição Linux: ‘www-data’, ‘apache’ etc. É importante que os arquivos nos diretórios dos sites
(‘/var/www/site-teste1’ etc.) possam ser lidos pelo usuário do Apache. Uma opção é garantir que os arquivos
possuam permissão de leitura para outros e os diretórios, permissões de leitura ‘r’ e de acesso ‘x’ também
para outros.
CRIANDO OS ARQUIVOS DE CONFIGURAÇÃO PARA OS SITES
Usando um editor de textos, criamos o arquivo ‘/etc/apache2/sites-available/site-teste1.conf’ e o preenchemos
com o seguinte conteúdo:
<VirtualHost *:80> 
 ServerName www.site-teste1.com 
 ServerAdmin webmaster@site-teste1.com 
 DocumentRoot /var/www/site-teste1 
 DirectoryIndex index.html 
 ErrorLog /var/log/apache2/site-teste1-error.log 
 CustomLog /var/log/apache2/site-teste1-access.log combined 
</VirtualHost>
Do mesmo modo, criamos o arquivo /etc/apache2/sites-available/site-teste2.conf e o preenchemos:
<VirtualHost *:80> 
 ServerName www.site-teste1.com 
 ServerAdmin webmaster@site-teste2.com 
 DocumentRoot /var/www/site-teste2 
 DirectoryIndex index.html 
 ErrorLog /var/log/apache2/site-teste1-error.log 
 CustomLog /var/log/apache2/site-teste1-access.log combined 
</VirtualHost>
HABILITANDO OS SITES $ sudo a2ensite site-teste1 
$ sudo a2ensite site-teste2 ENVIANDO UM SINAL PARA O APACHE RELER
AS CONFIGURAÇÕES $ sudo apache2ctl graceful
Neste vídeo serão demonstradas e comentadas as etapas da configuração de dois sites em um servidor
Apache. Confira!
É possível acessar os novos sites a partir de um navegador, simulando o acesso de um usuário comum. Isso
poderá ser feito a partir de um computador executando o sistema operacional Windows.
No entanto, é preciso que o navegador consiga resolver os nomes dos sites para o endereço do servidor
Apache. Como os domínios dos sites que criamos não existem na internet, será necessário “enganar” o
Windows.
O procedimento a seguir deve ser feito com cautela, pois pode causar danos ao Windows. Será necessário
que o usuário tenha permissão de administrador do sistema.
1. Execute o editor notepad como administrador.

2. Abra o arquivo 
C:\Windows\System32\drivers\etc\HOSTS

3. Inclua as seguintes linhas, trocando o endereço IP pelo endereço IP do servidor Apache que você obteve
com o comando ip addr.
192.168.1.70 www.site-teste1.com 
192.168.1.70 www.site-teste2.com
Salve o arquivo. Não se esqueça de desfazer essa configuração após terminar seus testes.
Essa alteração fará com que o Windows reconheça os endereços dos novos sites, mesmo que eles não
existam na internet.
No seu computador com Windows, abra um navegador de sua preferência. Digite os sites configurados:
www.site-teste1.com e www.site-teste2.com.
Os dois sites serão exibidos da mesma maneira, pois o conteúdo é o mesmo, obtido na página de
demonstração. Mesmo sem conhecer HTML, edite esses arquivos e faça uma pequena alteração no texto
deles. Recarregue as páginas no seu navegador e veja as alterações.
Confira alguns exemplos e aproveite para praticar!
PARA PRATICAR 1
Na configuração dos sites, indicamos arquivos de log em que o Apache incluirá os registros de acessos, um
por linha:
Busque esses arquivos e veja o seu conteúdo. Observe o formato e as informações que ele contém.
Você pode usar o comando ‘less ARQUIVO’. 
PARA PRATICAR 2
Vamos acessar um recurso que não existe no servidor e veremos o que acontece:
No seu navegador, busque um recurso inexistente no site. Por exemplo, digite a URL:
‘http://www.site-teste1.com/abc.html’
Como não existe um recurso com o nome ‘abc.html’, o Apache retornará uma página com o conhecido
erro 404 (recurso não encontrado). 
HABILITANDO O HTTPS NO SERVIDOR APACHE
Uma limitação do protocolo HTTP é que ele não conta com a criptografia dos dados para tráfegos, sendo
possível que um terceiro consiga interceptar as informações transmitidas e até modificá-las. Para resolver
essa fragilidade, foi criado o protocolo HTTPS que é, basicamente, o protocolo HTTP com uma camada
adicional de criptografia.
Atualmente, é considerado obrigatório que um site utilize o HTTPS se transmite dados pessoais de um
usuário, solicita senhas, cartão de crédito etc.
O HTTPS é simples de configurar no Apache, mas pode parecer complicado porque se baseia em certificação
digital e são necessárias algumas ações, além da simples configuração de um arquivo.
Em poucas palavras, o certificado digital é como um documento autenticado no cartório, afirmando que você é
realmentequem diz ser. O cartório desse exemplo são as autoridades certificadoras (CA).
O processo de obtenção de um certificado deve seguir alguns passos:
Criação das chaves criptográficas (pública e privada).
Elaboração da requisição de certificado (CSR).
Envio da requisição (CSR) a uma autoridade certificadora (CA).
Emissão do certificado pela autoridade certificadora (CA).
Instalação do certificado digital emitido pela autoridade certificadora (CA). 
É importante lembrar que a maioria das autoridades certificadoras cobra pelo serviço, já que precisa realizar
verificações de segurança. O valor varia dependendo do tipo de certificado solicitado e da autoridade
certificadora. 
PARA PRATICAR 3
Vamos habilitar o protocolo HTTPS no site ‘www.site-teste1.com’. Nessa atividade, assumiremos o papel da
autoridade certificadora, gerando um certificado do tipo self -signed (assinado por mim). Na prática, esse tipo
de certificado não é reconhecido por nenhum navegador e sempre será exibido um aviso de segurança. 
Lembre-se de que esse é um procedimento simplificado, pois nosso objetivo é a configuração do Apache.
Sempre que for gerar um certificado, leia as instruções da autoridade certificadora escolhida, que costuma
disponibilizar procedimentos detalhados.
Para gerar nosso certificado self-signed, usaremos o comando a seguir (tudo em uma única linha):
$ sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/site-teste1.key -out
/etc/ssl/certs/site-teste1.crt
 Se o comando ‘openssl’ não for encontrado, será necessário instalar esse pacote de software. Verifique a
documentação da distribuição Linux que estiver usando.
Por exemplo: No Ubuntu Linux, a instalação é feita com o comando:
‘sudo apt install openssl’
O comando ‘openssl’ é uma ferramenta para gerenciamento, entre outras coisas, de chaves criptográficas.
Nessa única linha estamos gerando as chaves (criptografia RSA de 2048 bits), preparando a requisição e
emitindo um certificado com 365 dias de validade.
Chegou o momento de entrar com os dados do novo certificado:
Country Name (2 letter code) [AU]:BR 
State or Province Name (full name) [Some-State]:Rio de Janeiro 
Locality Name (eg, city) []:Nome da cidade 
Organization Name (eg, company) []:Minha Empresa LTDA 
Organizational Unit Name (eg, section) []:Departamento de TI 
Common Name (e.g. server FQDN or YOUR name) []:www.site-teste1.com 
Esse é o endereço do seu site. 
Email Address []: Não é necessário preencher o e-mail. 
 Preenchimento de requisição de certificado.
Ao término, dois arquivos são gerados nos caminhos indicados: a chave criptográfica e o certificado digital.
Nesse exemplo foram escolhidos os diretórios ‘/etc/ssl/private’ e ‘/etc/ssl/certs’, padrão na distribuição Ubuntu,
porém você pode criar outro diretório para esses arquivos.
Atenção: O arquivo site-teste1.key contém a chave privada do seu certificado e deve ser protegido ao
máximo, pois um invasor será capaz de decifrar a comunicação do servidor, além de forjar um site com o
mesmo domínio. É recomendável que o arquivo possua proprietário e grupo ‘root’ e permissão do tipo ‘400’ ou
‘600’. Sempre confira a segurança das suas chaves privadas!
A chave pública está armazenada junto ao certificado digital, e ambos são entregues aos usuários quando se
conectam ao servidor.
O próximo passo é configurar o Apache:
Habilite o módulo de ssl do Apache (SSL é a camada criptográfica usada pelo HTTPS).
$ a2enmod ssl
Inclua o seguinte conteúdo no final do arquivo de configuração, sem modificar o conteúdo que já existe
(/etc/apache2/sites-available/site-teste1.conf).
<VirtualHost *:443> 
ServerName www.site-teste1.com 
ServerAdmin webmaster@site-teste1.com 
DocumentRoot /var/www/site-teste1 
DirectoryIndex index.html 
ErrorLog /var/log/apache2/site-teste1-error.log 
CustomLog /var/log/apache2/site-teste1-access.log combined 
 
SSLEngine on 
SSLCertificateFile /etc/ssl/certs/site-teste1.crt 
SSLCertificateKeyFile /etc/ssl/private/site-teste1.key 
</VirtualHost>
Repare que é um conjunto de diretivas iguais às já existentes com quatro diferenças: a primeira é a porta 443
na diretiva ‘<VirtualHost>’ – lembrando que o protocolo HTTPS tem porta padrão 443; as outras são as três
últimas linhas, onde a diretiva ‘SSLEngine’ ativa o uso da camada SSL e as demais indicam onde estão a
chave e o certificado digital.
Carregue a nova configuração no Apache: 
$ apache2ctl graceful 
Acesse o site: ‘https://www.site-teste1.com’. (Atenção ao https)
Uma mensagem de segurança será exibida, afinal o certificado não foi emitido por uma CA conhecida e
confiável. Selecione a opção para acessar assim mesmo. Você deverá ver o seu site. A diferença é que agora
toda a comunicação ocorreu por um canal criptografado.
No navegador, peça para exibir o certificado digital do site e veja os dados que foram digitados na
requisição:
Repita o procedimento e habilite o HTTPS também para o domínio ‘www.site-teste2.com’.
VERIFICANDO O APRENDIZADO
CONCLUSÃO
CONSIDERAÇÕES FINAIS
O Linux sempre se destacou pela diversidade de linguagens e plataformas suportadas, inclusive em
ambientes de aplicação Web. Aliado aos custos envolvidos, torna-se uma opção quase natural para muitos
administradores de sistemas em soluções privadas ou hospedadas na nuvem.
O servidor Apache é um dos pontos fortes nesse ambiente, por representar uma solução robusta, gratuita e
pronta para suportar demandas de todos os tamanhos. Conhecer o Linux e o Apache é um diferencial para
qualquer profissional da área de tecnologia da informação, necessário para grande parte das oportunidades
de trabalho. A partir do conhecimento apresentado neste tema, você terá condições de se aprofundar, para
aprender e dominar novos recursos, das variadas áreas de serviços que o Linux e o Apache podem atender.
Um conselho final que gostaríamos de deixar é: jamais negligencie a segurança. A correria do dia a dia e a
busca por soluções rápidas podem propiciar essa negligência, mas é importante estar sempre atento à
segurança dos seus sistemas e servidores.
 PODCAST
Agora, os especialistas encerram o tema falando sobre a aplicação do Linux em contraponto à do Windows.
REFERÊNCIAS
APACHE HTTP SERVER PROJECT. Documentação do servidor HTTP Apache versão 2.4. Consultado em
meio eletrônico em: 17 jul. 2020.
MAXWELL, S. Administração de sistemas Unix. 1. ed. Rio de Janeiro: Ciência Moderna, 2003.
MOTA FILHO, J. Descobrindo o Linux: Entenda o Sistema Operacional GNU/Linux. 3. ed. São Paulo:
Novatec, 2012.
PETERSEN, R. Ubuntu 18.04 LTS Server: Administration and Reference. 1. ed. Surfing Turtle Press, 2018.
UBUNTU SERVER GUIDE. HTTPD Apache2 Web server. Consultado em meio eletrônico em: 17 jul. 2020.
UBUNTU DOCUMENTATION. Ubuntu desktop guide. Consultado em meio eletrônico em: 17 jul. 2020.
EXPLORE+
Dois recursos essenciais para administradores Linux são os redirecionadores e os ‘pipes’, em terminal de
comando (shell). Para aprofundar seu conhecimento, pesquise sobre 'pipes' e 'shell'.
CONTEUDISTA
Fernando Diniz Hämmerli
 CURRÍCULO LATTES
javascript:void(0);

Outros materiais