Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
110.1 Lição 1
Tópico 105: Shells e scripts do Shell
105.1 Personalizar e trabalhar no ambiente shell
  • 105.1 Lição 1
  • 105.1 Lição 2
  • 105.1 Lição 3
105.2 Editar e escrever scripts simples
  • 105.2 Lição 1
  • 105.2 Lição 2
Tópico 106: Interfaces de usuário e Desktops
106.1 Instalar e configurar o X11
  • 106.1 Lição 1
106.2 Desktops gráficos
  • 106.2 Lição 1
106.3 Acessibilidade
  • 106.3 Lição 1
Tópico 107: Tarefas administrativas
107.1 Administrar contas de usuário, grupos e arquivos de sistema relacionados
  • 107.1 Lição 1
  • 107.1 Lição 2
107.2 Automatizar e agendar tarefas administrativas de sistema
  • 107.2 Lição 1
  • 107.2 Lição 2
107.3 Localização e internacionalização
  • 107.3 Lição 1
Tópico 108: Serviços essenciais do sistema
108.1 Manutenção da data e hora do sistema
  • 108.1 Lição 1
  • 108.1 Lição 2
108.2 Log do sistema
  • 108.2 Lição 1
  • 108.2 Lição 2
108.3 Fundamentos de MTA (Mail Transfer Agent)
  • 108.3 Lição 1
108.4 Configurar impressoras e impressão
  • 108.4 Lição 1
Tópico 109: Fundamentos de Rede
109.1 Fundamentos de protocolos de internet
  • 109.1 Lição 1
  • 109.1 Lição 2
109.2 Configuração persistente de rede
  • 109.2 Lição 1
  • 109.2 Lição 2
109.3 Soluções para problemas simples de rede
  • 109.3 Lição 1
  • 109.3 Lição 2
109.4 Configurar DNS cliente
  • 109.4 Lição 1
Tópico 110: Segurança
110.1 Tarefas administrativas de segurança
  • 110.1 Lição 1
110.2 Configurar a segurança do host
  • 110.2 Lição 1
110.3 Proteção de dados com criptografia
  • 110.3 Lição 1
  • 110.3 Lição 2
How to get certified
  1. Tópico 110: Segurança
  2. 110.1 Tarefas administrativas de segurança
  3. 110.1 Lição 1

110.1 Lição 1

Certificação:

LPIC-1

Versão:

5.0

Tópico:

110 Segurança

Objetivo:

110.1 Executar tarefas administrativas de segurança

Lição:

1 de 1

Introdução

A segurança é fundamental na administração de qualquer sistema. Como um bom administrador de sistemas Linux, você deve ficar atento a uma série de coisas, como permissões especiais em arquivos, validade das senhas de usuário, portas e sockets abertos, limitações no uso de recursos do sistema, gestão de usuários conectados e escalonamento de privilégios por meio su e sudo. Nesta lição, trataremos de cada um desses tópicos.

Verificando Arquivos com SUID e SGID

Além do conjunto de permissões tradicional de leitura, escrita e execução, os arquivos de um sistema Linux também podem ter algumas permissões especiais definidas, como os bits SUID ou SGID.

O bit SUID permite que o arquivo seja executado com privilégios de proprietário do arquivo. Numericamente, ele é representado por 4000 e, simbolicamente, por s ou S no bit de permissão de execução do proprietário. Um exemplo clássico de arquivo executável com a permissão SUID definida é passwd:

carol@debian:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 jul 27  2018 /usr/bin/passwd

O s minúsculo em rws indica a presença do SUID no arquivo — junto com a permissão de execução. Se, no lugar dele, houvesse um S maiúsculo (rwS), isso significaria que a permissão de execução presumida não foi definida.

Note

Trataremos de passwd na próximo seção. O utilitário é empregado principalmente pelo root para definir/alterar as senhas de usuário (por exemplo: passwd carol). No entanto, os usuários regulares também podem usá-lo para alterar suas próprias senhas. Portanto, ele vem com o SUID definido.

Por outro lado, o bit SGID pode ser definido tanto em arquivos quanto em diretórios. Nos arquivos, seu comportamento é equivalente ao de SUID, mas os privilégios serão os mesmos do proprietário do grupo. Quando definido em um diretório, no entanto, ele permite que todos os arquivos criados ali herdem a propriedade do grupo do diretório. Como o SUID, o SGID é simbolicamente representado por s ou S no bit de permissão de execução do grupo. Numericamente, ele é representado por 2000. Para definir o SGID em um diretório, usamos chmod. É necessário adicionar 2 (SGID) às permissões tradicionais (755, em nosso caso):

carol@debian:~$ ls -ld shared_directory
drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory
carol@debian:~$ sudo chmod 2755 shared_directory/
carol@debian:~$ ls -ld shared_directory
drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory

Para encontrar arquivos com SUID e/ou SGID definidos, use o comando find com a opção -perm. Podemos incluir valores numéricos e simbólicos. Os valores — por sua vez — podem ser passados sozinhos ou precedidos por travessão (-) ou barra (/). O significado é o seguinte:

-perm numeric-value ou -perm symbolic-value

encontrar arquivos com a permissão especial exclusivamente

-perm -numeric-value ou -perm -symbolic-value

encontrar arquivos com a permissão especial e outras permissões

-perm /numeric-value ou -perm /symbolic-value

encontrar arquivos com qualquer uma das permissões especiais (e outras permissões)

Por exemplo, para localizar arquivos com apenas o SUID definido no diretório de trabalho atual, usaríamos o seguinte comando:

carol@debian:~$ find . -perm 4000
carol@debian:~$ touch file
carol@debian:~$ chmod 4000 file
carol@debian:~$ find . -perm 4000
./file

Observe que — uma vez que não existiam arquivos contendo exclusivamente o SUID — criamos um para mostrar algumas saídas. Podemos executar o mesmo comando em notação simbólica:

carol@debian:~$ find . -perm u+s
./file

Para encontrar arquivos que correspondam ao SUID (independentemente de quaisquer outras permissões) no diretório /usr/bin/, use um dos seguintes comandos:

carol@debian:~$ sudo find /usr/bin -perm -4000
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su
carol@debian:~$ sudo find /usr/bin -perm -u+s
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su

Se estiver procurando por arquivos no mesmo diretório com o bit SGID definido, execute find /usr/bin/ -perm -2000 ou find /usr/bin/ -perm -g+s.

Finalmente, para encontrar arquivos com qualquer uma das duas permissões especiais definidas, adicione 4 e 2 e use /:

carol@debian:~$ sudo find /usr/bin -perm /6000
/usr/bin/dotlock.mailutils
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/wall
/usr/bin/ssh-agent
/usr/bin/chage
/usr/bin/dotlockfile
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/expiry
/usr/bin/sudo
/usr/bin/bsd-write
/usr/bin/crontab
/usr/bin/su

Gerenciamento e validade das senhas

Como dito acima, o utilitário passwd permite alterar nossa própria senha como um usuário regular. Além disso, com a opção -S ou --status podemos obter informações de status sobre nossa conta:

carol@debian:~$ passwd -S
carol P 12/07/2019 0 99999 7 -1

Eis uma análise dos sete campos obtidos na saída:

carol

Nome de login do usuário.

P

Indica que o usuário possui uma senha válida (P); outros valores possíveis são L para uma senha bloqueada e NP para nenhuma senha.

12/07/2019

Data da última alteração da senha.

0

Idade mínima em dias (o número mínimo de dias entre mudanças de senha). Um valor de 0 significa que a senha pode ser alterada a qualquer momento.

99999

Idade máxima em dias (o número máximo de dias em que a senha é válida). Um valor de 99999 desabilita a expiração da senha.

7

Período de aviso em dias (o número de dias antes da expiração da senha em que um usuário será avisado).

-1

Período de inatividade da senha em dias (o número de dias inativos após a expiração da senha até que a conta seja bloqueada). Um valor de -1 remove a inatividade de uma conta.

Além de relatar o status da conta, o comando passwd empregado com permissão de root serve para realizar algumas manutenções básicas de conta. Ele permite bloquear e desbloquear contas, forçar um usuário a alterar sua senha no próximo login e excluir a senha de um usuário com as opções -l, -u, -e e -d, respectivamente.

Para testar essas opções, é conveniente apresentarmos o comando su neste momento. Através do su, você pode trocar de usuário durante uma sessão de login. Assim, por exemplo, usaríamos passwd como root para bloquear a senha de carol. Em seguida, mudaríamos para a conta de carol para verificar no status da conta se a senha foi — de fato — bloqueada (L) e não pode ser alterada. Finalmente, voltando ao usuário root, desbloqueamos a senha de carol:

root@debian:~# passwd -l carol
passwd: password expiry information changed.
root@debian:~# su - carol
carol@debian:~$ passwd -S
carol L 05/31/2020 0 99999 7 -1
carol@debian:~$ passwd
Changing password for carol.
Current password:
passwd: Authentication token manipulation error
passwd: password unchanged
carol@debian:~$ exit
logout
root@debian:~# passwd -u carol
passwd: password expiry information changed.

Outra alternativa para bloquear e desbloquear a senha de um usuário é o comando usermod:

Bloquear a senha da usuária carol

usermod -L carol or usermod --lock carol.

Desbloquear a senha da usuária carol

usermod -U carol or usermod --unlock carol.

Note

Com as opções -f ou --inactive, usermod também serve para definir o número de dias até que uma conta com a senha expirada seja desabilitada (p. ex. usermod -f 3 carol).

Além de passwd e usermod, o comando mais direto para lidar com senhas e validade de contas é chage (“change age”, ou alterar idade). Como root, você pode passar para chage a opção -l (ou --list) seguida por um nome de usuário para imprimir na tela a senha atual desse usuário e as informações de expiração da conta; como usuário comum, você pode ver suas próprias informações:

carol@debian:~$ chage -l carol
Last password change					: Aug 06, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Quando executado sem opções e seguido apenas por um nome de usuário, chage se comporta de maneira interativa:

root@debian:~# chage carol
Changing the aging information for carol
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]:
	Maximum Password Age [99999]:
	Last Password Change (YYYY-MM-DD) [2020-06-01]:
	Password Expiration Warning [7]:
	Password Inactive [-1]:
	Account Expiration Date (YYYY-MM-DD) [-1]:

As opções para modificar as diferentes configurações de chage são as seguintes:

-m days username ou --mindays days username

Especifica o número mínimo de dias entre as alterações de senha (por exemplo: chage -m 5 carol). Um valor de 0 permite que o usuário altere sua senha a qualquer momento.

-M days username ou --maxdays days username

Especifica o número máximo de dias em que a senha será válida (por exemplo: chage -M 30 carol). Para desabilitar a expiração da senha, é comum atribuir a esta opção o valor 99999.

-d days username ou --lastday days username

Especifica o número de dias desde que a senha foi alterada pela última vez (por exemplo: chage -d 10 carol). Um valor de 0 força o usuário a alterar sua senha no próximo login.

-W days username ou --warndays days username

Especifica o número de dias em que o usuário será lembrado de que sua senha expirou.

-I days username ou --inactive days username

Especifica o número de dias de inatividade após a expiração da senha (por exemplo: chage -I 10 carol) — o mesmo que usermod -f ou usermod --inactive. Transcorridos esses dias, a conta será bloqueada. Porém, se o valor for 0, a conta não será bloqueada.

-E date username ou --expiredate date username

Especifica a data (ou número de dias desde a época — 1º de janeiro de 1970) em que a conta será bloqueada. Normalmente é expresso no formato AAAA-MM-DD (por exemplo: chage -E 2050-12-13 carol).

Note

Para aprender mais sobre passwd, usermod e chage — e suas opções — consulte as páginas de manual respectivas.

Descobrindo portas abertas

Os administradores de sistema também precisam ficar de olho nas portas abertas e, para isso, existem quatro utilitários muito poderosos na maioria dos sistemas Linux: lsof, fuser, netstat e nmap. Falaremos deles nesta seção.

lsof significa “list open files”, o que não é pouca coisa, já que — para o Linux — tudo é arquivo. Na verdade, se você digitar lsof no terminal, aparecerá uma enorme lista de arquivos comuns, arquivos de dispositivos, sockets etc. Porém, nesta lição, vamos nos concentrar principalmente nas portas. Para imprimir a lista de todos os arquivos de rede da “Internet”, execute lsof com a opção -i:

root@debian:~# lsof -i
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient 357     root    7u  IPv4  13493      0t0  UDP *:bootpc
sshd     389     root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd     389     root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
apache2  399     root    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  401 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  402 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
sshd     557     root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd     569    carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Além do serviço bootpc — que é usado pelo DHCP — a saída mostra dois serviços ouvindo conexões — ssh e o servidor web Apache (http) — bem como duas conexões SSH estabelecidas. Podemos especificar um determinado host com a notação @ip-address para verificar suas conexões:

root@debian:~# lsof -i@192.168.1.7
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note

Para imprimir apenas os arquivos de rede IPv4 e IPv6, use as opções -i4 e -i6, respectivamente.

Da mesma forma, é possível filtrar por porta, passando para a opção -i (ou -i@ip-address) o argumento :port:

root@debian:~# lsof -i :22
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    389  root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd    389  root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Ao incluir mais de uma porta, nós as separamos com vírgulas (os intervalos são especificados com um traço):

root@debian:~# lsof -i@192.168.1.7:22,80
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    705  root    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
sshd    718 carol    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note

O lsof tem uma quantidade impressionante de opções disponíveis. Para saber mais, consulte a página de manual.

O próximo na lista de comandos de rede é fuser. Seu propósito principal é encontrar um “usuário do arquivo”  — o que envolve saber quais processos estão acessando quais arquivos; ele também fornece algumas outras informações, como o tipo de acesso. Por exemplo, para verificar o diretório de trabalho atual, basta executar fuser .. Mas quando precisamos de mais informações, é aconselhável usar a opção verbose (-v ou --verbose):

root@debian:~# fuser .
/root:                 580c
root@debian:~# fuser -v .
                     USER        PID ACCESS COMMAND
/root:               root        580 ..c.. bash

Vamos detalhar a saída:

Arquivo

O arquivo sobre o qual estamos obtendo informações (/root).

Coluna USER

O proprietário do arquivo (root).

Coluna PID

O identificador do processo (580).

Coluna ACCESS

Tipo de acesso (..c..). Ele pode ser:

c

Diretório atual.

e

Executável em execução.

f

Arquivo aberto (omitido no modo de exibição padrão).

F

Arquivo aberto para escrita (omitido no modo de exibição padrão).

r

Diretório raiz.

m

Arquivo mmap ou biblioteca compartilhada.

.

Espaço reservado (omitido no modo de exibição padrão).

Coluna COMMAND

O comando afiliado ao arquivo (bash).

Com a opção -n (ou --namespace), podemos encontrar informações sobre portas/sockets de rede. Também é necessário fornecer o protocolo de rede e o número da porta. Assim, para obter informações sobre o servidor web Apache, o comando seria o seguinte:

root@debian:~# fuser -vn tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root        402 F.... apache2
                     www-data    404 F.... apache2
                     www-data    405 F.... apache2
Note

fuser também pode ser usado para eliminar os processos que estão acessando o arquivo, com as opções -k ou --kill (p. ex.: fuser -k 80/tcp). Consulte a página de manual para saber mais detalhes.

Vamos olhar o netstat agora. O netstat é uma ferramenta de rede muito versátil usada principalmente para imprimir “estatísticas de rede”.

Executado sem opções, netstat exibe as conexões ativas da Internet e os sockets Unix. Devido ao tamanho da lista, vale a pena canalizar a saída para less:

carol@debian:~$ netstat |less
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.7:ssh         192.168.1.4:55444       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    10509    /run/systemd/journal/syslog
unix  3      [ ]         DGRAM                    10123    /run/systemd/notify
(...)

Para listar apenas as portas e sockets “ouvintes”, usamos as opções -l ou --listening. As opções -t/--tcp e -u/--udp podem ser adicionadas para filtrar pelos protocolos TCP e UDP, respectivamente (elas também podem ser combinadas no mesmo comando). Da mesma forma, `-e/--extend exibe informações adicionais:

carol@debian:~$ netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
carol@debian:~$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
carol@debian:~$ netstat -lute
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13729
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      root       14372
tcp6       0      0 [::]:http               [::]:*                  LISTEN      root       14159
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       13740
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       14374
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                           root       13604

Se você omitir a opção -l, apenas as conexões estabelecidas serão mostradas:

carol@debian:~$ netstat -ute
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:ssh         192.168.1.4:39144       ESTABLISHED root       15103

Se você está interessado apenas em informações numéricas sobre portas e hosts, pode usar a opção -n or --numeric para imprimir apenas os números de portas e endereços IP. Note como ssh se transforma em 22 ao adicionarmos -n ao comando acima:

carol@debian:~$ netstat -uten
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:22          192.168.1.4:39144       ESTABLISHED 0          15103

Como vemos, é possível tornar os comandos netstat muito úteis e produtivos combinando algumas de suas opções. Navegue pelas páginas de manual para aprender mais e encontrar as combinações que melhor atendem às suas necessidades.

Finalmente, vamos falar do nmap — ou “mapeador de rede”. Poderosíssimo, este scanner de porta é executado especificando-se um endereço IP ou nome de host:

root@debian:~# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds

Além de um host único, o nmap permite escanear:

Múltiplos hosts

separando-os com espaços (p. ex.: nmap localhost 192.168.1.7).

Intervalos de hosts

usando um traço (p. ex.: nmap 192.168.1.3-20).

subredes

usando um curinga ou notação CIDR (p. ex.: nmap 192.168.1.* ou nmap 192.168.1.0/24). Podemos excluir determinados hosts (p. ex.: nmap 192.168.1.0/24 --exclude 192.168.1.7).

Para escanear uma porta específica, use a opção -p seguida pelo número da porta ou nome do serviço (nmap -p 22 e nmap -p ssh terão a mesma saída):

root@debian:~# nmap -p 22 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds

Também podemos escanear várias portas ou intervalos de portas usando vírgulas e travessões, respectivamente:

root@debian:~# nmap -p ssh,80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000051s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 57 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds

Duas outras opções importantes e úteis do nmap são:

-F

Executar um escaneamento rápido das 100 portas mais comuns.

-v

Obter uma saída detalhada (-vv imprime uma saída mais detalhada ainda).

Note

O nmap é capaz de executar comandos bastante complexos usando vários tipos de escaneamento. No entanto, esse tópico está fora do escopo desta lição.

Limites em logins de usuário, processos e uso de memória

Os recursos de um sistema Linux não são ilimitados, e portanto — como administrador do sistema — você deve garantir um bom equilíbrio entre os limites do usuário no uso dos recursos e o funcionamento adequado do sistema operacional. O ulimit pode ajudá-lo nesse aspecto.

O ulimit lida com os limites soft (flexíveis) e hard (rígidos) — especificados pelas opções -S e -H, respectivamente. Quando executado sem opções ou argumentos, o ulimit exibe os blocos de arquivos flexíveis do usuário atual:

carol@debian:~$ ulimit
unlimited

Com a opção -a, o ulimit mostra todos os limites flexíveis atuais (o mesmo que -Sa); para exibir todos os limites rígidos atuais, use -Ha:

carol@debian:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)
carol@debian:~$ ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)

Os recursos de shell disponíveis são especificados por opções como:

-b

Tamanho máximo do buffer do socket

-f

tamanho máximo dos arquivos escritos pelo shell e seus processos-filhos

-l

tamanho máximo da memória que pode ser bloqueada

-m

tamanho máximo do conjunto residente (RSS, resident set size) — a porção atual da memória mantida por um processo na memória principal (RAM)

-v

quantidade máxima de memória virtual

-u

número máximo de processos disponíveis para um único usuário

Assim, para exibir os limites, usaríamos ulimit seguido por -S (soft) ou -H (hard) e a opção referente ao recurso; se nenhum -S ou -H for fornecido, os limites flexíveis (soft) serão mostrados:

carol@debian:~$ ulimit -u
10000
carol@debian:~$ ulimit -Su
10000
carol@debian:~$ ulimit -Hu
15672

Da mesma maneira, para definir novos limites para um recurso determinado, especificamos -S ou -H seguidos pela opção de recurso desejada e o novo valor. Esse valor pode ser um número ou as palavras especiais soft (limite flexível atual), hard (limite rígido atual) ou unlimited (sem limite). Se nem -S nem -H forem especificados, ambos os limites serão definidos. Por exemplo, vamos primeiro ler o valor do tamanho máximo atual para os arquivos gravados pelo shell e seus filhos:

root@debian:~# ulimit -Sf
unlimited
root@debian:~# ulimit -Hf
unlimited

Agora, vamos alterar o valor de unlimited para 500 sem especificar -S ou -H. Observe como os limites flexíveis e rígidos são alterados:

root@debian:~# ulimit -f 500
root@debian:~# ulimit -Sf
500
root@debian:~# ulimit -Hf
500

Por fim, diminuímos apenas o limite flexível para blocos de 200:

root@debian:~# ulimit -Sf 200
root@debian:~# ulimit -Sf
200
root@debian:~# ulimit -Hf
500

Os limites rígidos só podem ser aumentados pelo usuário root. Por outro lado, os usuários comuns podem diminuir os limites rígidos e aumentar os limites flexíveis até o valor dos limites rígidos. Para tornar persistentes os novos valores de limites após a reinicialização, eles devem ser gravados no arquivo /etc/security/limits.conf. Este também é o arquivo usado pelo administrador para aplicar restrições a usuários específicos.

Note

Saiba que não existe uma página de manual para ulimit. Trata-se de uma ferramenta nativa do bash e, por isso, é preciso consultar a man page do bash para saber mais sobre ela.

Lidando com usuários conectados

Outra de suas funções como administrador do sistema envolve manter o controle dos usuários conectados. Há três utilitários que podem ajudá-lo com essas tarefas: last, who e w.

O last imprime uma lista dos últimos usuários logados, com as informações mais recentes no topo:

root@debian:~# last
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 14:24   still running
mimi     pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 12:07 - 14:24  (02:17)
(...)
wtmp begins Sun May 31 14:14:58 2020

Considerando a listagem truncada, obtemos informações sobre os dois últimos usuários do sistema. As duas primeiras linhas trazem informações sobre a usuária carol; as duas linhas seguintes, sobre a usuária mimi. As informações são as seguintes:

  1. A usuária carol, no terminal pts/0 do host 192.168.1.4, iniciou sua sessão em Sat Jun 6 (sábado, 6 de junho) às 14:25 e está still logged in (ainda logada). O sistema — usando o kernel 4.19.0-9-amd64 — foi iniciado (reboot system boot) em Sat Jun 6 (sábado, 6 de junho) às 14:24 e está still running (ainda em execução).

  2. A usuária mimi, no terminal pts/0 do host 192.168.1.4, iniciou sua sessão em Sat Jun 6 (sábado, 6 de junho) às 12:07 e se desconectou às 14:24 (a sessão durou um total de (02:16) horas). O sistema — usando o kernel 4.19.0-9-amd64 — foi iniciado (reboot system boot) em Sat Jun 6 (sábado, 6 de junho) às 12:07 e desligado às 14:24 (tendo estado ativo por (02:17) horas).

Note

A linha wtmp begins Sun May 31 14:14:58 2020 se refere a /var/log/wtmp, o arquivo especial de log no qual last obtém as informações.

Podemos passar um nome de usuário a last para ver apenas as entradas referentes a ele:

root@debian:~# last carol
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
carol    pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
carol    pts/0        192.168.1.4      Fri Jun  5 00:48 - 01:28  (00:39)
(...)

Em relação à segunda coluna (terminal), pts significa Pseudo Terminal Slave — em oposição a um terminal TeleTYpewriter ou tty; 0 refere-se ao primeiro (a contagem começa em zero).

Note

Para verificar se há tentativas de login incorretas, execute lastb em vez de last.

Os utilitários who e w concentram-se nos usuários atualmente logados e são bastante semelhantes. O primeiro exibe quem está conectado, ao passo que o último também exibe informações sobre o que eles estão fazendo.

Quando executado sem opções, o who exibe quatro colunas correspondentes ao usuário conectado, terminal, data e hora e nome do host:

root@debian:~# who
carol    pts/0        2020-06-06 17:16 (192.168.1.4)
mimi     pts/1        2020-06-06 17:28 (192.168.1.4)

O who aceita uma série de opções, dentre as quais podemos destacar as seguintes:

-b,--boot

Exibe a hora da última inicialização do sistema.

-r,--runlevel

Mostra o nível de execução atual.

-H,--heading

Imprime o cabeçalho das colunas.

Comparado ao who, o w fornece uma saída um pouco mais detalhada:

root@debian:~# w
 17:56:12 up 40 min,  2 users,  load average: 0.04, 0.12, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
carol    pts/0    192.168.1.4    17:16    1.00s  0.15s  0.05s sshd: carol [priv]
mimi     pts/1    192.168.1.4    17:28   15:08   0.05s  0.05s -bash

A linha superior fornece informações sobre a hora atual (17:56:12), há quanto tempo o sistema está ativo (up 40 min), o número de usuários atualmente logados (2 users) e os números médios de carga (load average: 0.04, 0.12, 0.09). Esses valores referem-se ao número médio de trabalhos na fila de execução nos últimos 1, 5 e 15 minutos, respectivamente.

Vêm em seguida oito colunas; elas se dividem desta forma:

USER

Nome de login do usuário.

TTY

Nome do terminal em que o usuário está.

FROM

Host remoto a partir do qual o usuário se logou.

LOGIN@

Tempo de login.

IDLE

Tempo ocioso.

JCPU

Tempo usado por todos os processos ligados ao tty (incluindo os trabalhos atualmente em execução em segundo plano).

PCPU

Tempo usado pelo processo atual (que aparece sob WHAT).

WHAT

Linha de comando do processo atual.

Como no caso do who, podemos passar nomes de usuários ao w:

root@debian:~# w mimi
 18:23:15 up  1:07,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
mimi     pts/1    192.168.1.4      17:28    9:23   0.06s  0.06s -bash

Configuração e uso básicos do sudo

Como já observado nesta lição, su permite alternar para qualquer outro usuário no sistema, desde que você forneça a senha do usuário de destino. No caso do usuário root, ter sua senha distribuída ou conhecida por (muitos) usuários põe o sistema em risco e é uma péssima prática de segurança. O uso básico de su é su - nome-de-usuário. Ao alternar para root, porém, o nome de usuário de destino é opcional:

carol@debian:~$ su - root
Password:
root@debian:~# exit
logout
carol@debian:~$ su -
Password:
root@debian:~#

O uso do traço (-) garante que o ambiente do usuário de destino seja carregado. Sem ele, será mantido o ambiente do antigo usuário:

carol@debian:~$ su
Password:
root@debian:/home/carol#

Por outro lado, existe o comando sudo. Com ele, é possível executar um comando como usuário root — ou qualquer outro usuário. Do ponto de vista da segurança, sudo é uma opção muito melhor do que su, pois apresenta duas vantagens principais:

  1. para executar um comando como root, você não precisa da senha do usuário root, mas apenas a do usuário atual, em conformidade com uma política de segurança. A política de segurança padrão é sudoers, especificada em /etc/sudoers e /etc/sudoers.d/*.

  2. O sudo permite executar comandos simples com privilégios elevados em vez de lançar um novo subshell para root, como faria su.

O uso básico de sudo é sudo -u target-username command. Porém, para executar um comando como usuário root, a opção -u target-username não é necessária:

carol@debian:~$ sudo -u mimi whoami
mimi
carol@debian:~$ sudo whoami
root
Note

O sudoers usa uma marca temporal por usuário (e por terminal) para ocultar as credenciais, sendo assim possível usar o sudo sem uma senha por um período padrão de quinze minutos. Esse valor padrão pode ser modificado adicionando-se a opção timestamp_timeout como configuração de Defaults em /etc/sudoers (p. ex.: Defaults timestamp_timeout=1 define o tempo limite do cache de credenciais como um minuto).

O arquivo /etc/sudoers

O arquivo de configuração principal do sudo é /etc/sudoers (também existe o diretório /etc/sudoers.d). É ali que os privilégios de sudo dos usuários são determinados. Em outras palavras, aqui você especifica quem pode executar quais comandos, sob quais nomes de usuário e em quais máquinas — bem como outras configurações. A sintaxe usada é a seguinte:

carol@debian:~$ sudo less /etc/sudoers
(...)
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
(...)

A especificação de privilégio para o usuário root é ALL=(ALL:ALL) ALL. Isso se traduz assim: o usuário root (root) pode se logar com todos os hosts (ALL), em nome de todos os usuários e todos os grupos ((ALL:ALL)), além de executar todos os comandos (ALL). O mesmo vale para os membros do grupo sudo — note como os nomes de grupos são identificados com um símbolo de porcentagem (%).

Assim, para que a usuária carol seja capaz de verificar o status de apache2 de qualquer host em nome de qualquer usuário ou grupo, adicionaríamos a seguinte linha ao arquivo sudoers:

carol   ALL=(ALL:ALL) /usr/bin/systemctl status apache2

Para evitar a carol o incômodo de precisar fornecer sua senha para executar o comando systemctl status apache2, modificamos a linha desta maneira:

carol   ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2

Digamos que agora você queira restringir seus hosts a 192.168.1.7 e permitir que carol execute systemctl status apache2 no nome da usuária mimi. A linha teria de ser modificada desta forma:

carol   192.168.1.7=(mimi) /usr/bin/systemctl status apache2

Vamos então verificar o status do servidor web Apache como a usuária mimi:

carol@debian:~$ sudo -u mimi systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago
(...)

Se carol fosse promovida a sysadmin e você quisesse conceder a ela todos os privilégios, a maneira mais fácil seria incluí-la no grupo especial sudo com usermod e a opção -G (e talvez também a opção -a, que garante que o usuário não seja removido de nenhum outro grupo ao qual possa pertencer):

root@debian:~# sudo useradd -aG sudo carol
Note

Na família de distribuições Red Hat , o grupo wheel é equivalente ao grupo especial de administradores sudo dos sistemas Debian.

Em vez de editar /etc/sudoers diretamente, use simplesmente o comando visudo como root (p. ex. visudo), que abre /etc/sudoers usando o editor de texto predefinido. Para alterar o editor de texto padrão, adicione a opção editor como configuração de Defaults em /etc/sudoers. Assim, por exemplo, para mudar o editor para nano, a linha seria a seguinte:

Defaults	editor=/usr/bin/nano
Note

Outra alternativa é especificar um editor de texto por meio da variável de ambiente EDITOR usando visudo (e.g.: EDITOR=/usr/bin/nano visudo)

Além dos usuários e grupos, também podemos utilizar aliases em /etc/sudoers. É possível definir três categorias principais de aliases: aliases de host (Host_Alias), aliases de usuário (User_Alias) e aliases de comando (Cmnd_Alias). Eis um exemplo:

# Host alias specification

Host_Alias SERVERS = 192.168.1.7, server1, server2

# User alias specification

User_Alias REGULAR_USERS = john, mary, alex

User_Alias PRIVILEGED_USERS = mimi, alex

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS

# Cmnd alias specification

Cmnd_Alias SERVICES = /usr/bin/systemctl *

# User privilege specification
root    ALL=(ALL:ALL) ALL
ADMINS  SERVERS=SERVICES

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

A partir deste arquivo sudoers de amostra, vamos explicar os três tipos de aliases com um pouco mais de detalhes:

Aliases de host

Incluem uma lista separada por vírgulas de nomes de host, endereços IP, redes e grupos de rede (precedidos por +). Máscaras de rede também podem estar especificadas. O alias de host SERVERS inclui um endereço IP e dois nomes de host:

Host_Alias SERVERS = 192.168.1.7, server1, server2
Aliases de usuário

Incluem uma lista separada por vírgulas de usuários especificados como nomes de usuários, grupos (precedidos por %) e grupos de rede (precedidos por +). Para excluir usuários específicos, usamos !. O alias de usuário ADMINS — por exemplo — inclui a usuária carol, os membros do grupo sudo e os membros do alias de usuário PRIVILEGE_USERS que não pertencem ao alias de usuário REGULAR_USERS:

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
Aliases de comando

Incluem uma lista separada por vírgulas de comandos e diretórios. Se um diretório for especificado, qualquer arquivo que esteja nesse diretório será incluído — mas os subdiretórios serão ignorados. O alias do comando SERVICES inclui um único comando com todos os seus subcomandos — conforme especificado pelo asterisco (*):

Cmnd_Alias SERVICES = /usr/bin/systemctl *

Como resultado das especificações de alias, a linha ADMINS SERVERS=SERVICES na seção User privilege specification é traduzida como: todos os usuários pertencentes a ADMINS podem usar sudo para executar qualquer comando em SERVICES em qualquer servidor em SERVERS.

Note

Existe um quarto tipo de alias que pode ser incluído em /etc/sudoers: aliases de execução (Runas_Alias). São muito semelhantes aos aliases de usuário, mas permitem especificar usuários por seu ID de usuário (UID). Esse recurso pode ser conveniente em certos casos.

Exercícios Guiados

  1. Preencha a seguinte tabela com relação às permissões especiais::

    Permissão especial Representação Numérica Representação Simbólica Encontrar arquivos com somente esse conjunto de permissões

    SUID

    SGID

  2. Exibir arquivos com somente o conjunto de bits SUID ou SGID normalmente não é muito prático. Execute as seguintes tarefas para demonstrar que suas buscar podem ser mais produtivas:

    • Encontre todos os arquivos com o SUID (e outras permissões) definido em /usr/bin:

    • Encontre todos os arquivos com o SGID (e outras permissões) definido em /usr/bin:

    • Encontre todos os arquivos com SUID ou SGID definido em /usr/bin:

  3. O chage permite alterar as informações de expiração de senha de um usuário. Como root, complete a seguinte tabela, fornecendo os comandos corretos para o usuário mary:

    Significado Comandos chage

    Faça a senha ser válida por 365 dias.

    Faça o usuário alterar a senha no próximo login.

    Defina o número mínimo de dias entre as alterações de senha para 1.

    Desative a expiração da senha.

    Permita que o usuário altere sua senha a qualquer momento.

    Defina o período de aviso para 7 dias e a data de expiração da conta para 20 de agosto de 2050.

    Imprima as informações de validade da senha atual do usuário.

  4. Preencha a seguinte tabela com o utilitário de rede apropriado:

    Ação Comando(s)

    Mostrar os arquivos de rede do host 192.168.1.55 na porta 22 usando lsof.

    Mostrar os processos que acessam a porta padrão do servidor web Apache em sua máquina com fuser.

    Listar todos os sockets udp ouvintes em sua máquina usando netstat.

    Escanear as portas 80 até 443 no host 192.168.1.55 usando nmap.

  5. Execute as seguintes tarefas relativas ao tamanho do conjunto residente (RSS) e ulimit como um usuário regular:

    • Exiba os limites flexíveis do RSS máximo:

    • Exiba os limites rígidos do RSS máximo:

    • Defina os limites flexíveis do RSS máximo para 5.000 kilobytes:

    • Defina os limites rígidos do RSS máximo para 10.000 kilobytes:

    • Finalmente, tente aumentar o limite rígido do RSS máximo para 15.000 kilobytes. Você conseguiu? Por quê?

  6. Considere a seguinte linha de saída de comando last e responda às perguntas:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • carol estava conectada a partir de um host remoto? Por quê?

    • Quanto tempo durou a sessão de carol?

    • carol estava conectada através de um terminal de texto clássico? Por quê?

  7. Analise o seguinte trecho de /etc/sudoers e responda à questão abaixo.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    alex pode verificar o status do servidor web Apache em qualquer host? Por quê?

Exercícios Exploratórios

  1. Além de SUID e SGID, existe uma terceira permissão especial: o sticky bit. No momento, ele é usado principalmente em diretórios como /tmp para evitar que usuários regulares excluam ou movam arquivos que não sejam seus. Realize as seguintes tarefas:

    • Defina o sticky bit em ~/temporal:

    • Encontre diretórios com o sticky bit (e quaisquer outras permissões) definidas em seu diretório inicial:

    • Remova o sticky bit de ~/temporal:

  2. Quando a senha de um usuário é bloqueada via passwd -l username ou usermod -L username, como é possível saber disso olhando em /etc/shadow?

  3. Qual o equivalente do comando usermod para chage -E date username ou chage --expiredate date username?

  4. Forneça dois comandos nmap diferentes para escanear todas as 65535 no host local:

Resumo

Nesta lição, você aprendeu a executar diversas tarefas de administração ligadas à segurança. Os seguintes tópicos foram abordados:

  • Encontrar arquivos com as permissões especiais SUID e SGID definidas.

  • Definir e alterar as senhas dos usuários e lidar com as informações de validade da senha.

  • Usar diversos utilitários de rede para encontrar portas abertas em hosts/redes.

  • Configurar limites nos recursos do sistema.

  • Verificar os usuários que se logaram ao sistema ou que estão atualmente logados.

  • Uso e configuração básica de sudo (através do arquivo /etc/sudoers).

Comandos e arquivos discutidos nesta lição:

find

Buscar arquivos em uma hierarquia de diretórios.

passwd

Trocar a senha de usuário.

chmod

Alterar os bits de modo do arquivo.

chage

Alterar as informações de expiração da senha de usuário.

lsof

Listar os arquivos abertos.

fuser

Identificar os processos que estão usando arquivos ou sockets.

netstat

Exibir as conexões de rede.

nmap

Ferramenta de exploração de rede e scanner de portas.

ulimit

Obter e definir os limites do usuário.

/etc/security/limits.conf

Arquivo de configuração para aplicar restrições a usuários.

last

Imprimir uma lista dos últimos usuários logados.

lastb

Imprimir uma lista de tentativas de login incorretas.

/var/log/wtmp

Banco de dados de logins de usuários.

who

Mostrar quem está logado.

w

Mostrar quem está logado e o que estão fazendo.

su

Trocar usuário ou entrar como superusuário.

sudo

Executar um comando como outro usuário (incluindo o superusuário).

/etc/sudoers

Arquivo de configuração padrão para a política de segurança de sudo.

Respostas aos Exercícios Guiados

  1. Preencha a seguinte tabela com relação às permissões especiais::

    Permissão especial Representação Numérica Representação Simbólica Encontrar arquivos com somente esse conjunto de permissões

    SUID

    4000

    s,S

    find -perm 4000, find -perm u+s

    SGID

    2000

    s,S

    find -perm 2000, find -perm g+s

  2. Exibir arquivos com somente o conjunto de bits SUID ou SGID normalmente não é muito prático. Execute as seguintes tarefas para demonstrar que suas buscar podem ser mais produtivas:

    • Encontre todos os arquivos com o SUID (e outras permissões) definido em /usr/bin:

      find /usr/bin -perm -4000 or find /usr/bin -perm -u+s

    • Encontre todos os arquivos com o SGID (e outras permissões) definido em /usr/bin:

      find /usr/bin -perm -2000 or find /usr/bin -perm -g+s

    • Encontre todos os arquivos com SUID ou SGID definido em /usr/bin:

      find /usr/bin -perm /6000

  3. O chage permite alterar as informações de expiração de senha de um usuário. Como root, complete a seguinte tabela, fornecendo os comandos corretos para o usuário mary:

    Significado Comandos chage

    Faça a senha ser válida por 365 dias.

    chage -M 365 mary, chage --maxdays 365 mary

    Faça o usuário alterar a senha no próximo login.

    chage -d 0 mary, chage --lastday 0 mary

    Defina o número mínimo de dias entre as alterações de senha para 1.

    chage -m 1 mary, chage --mindays 1 mary

    Desative a expiração da senha.

    chage -M 99999 mary, chage --maxdays 99999 mary

    Permita que o usuário altere sua senha a qualquer momento.

    chage -m 0 mary, chage --mindays 0 mary

    Defina o período de aviso para 7 dias e a data de expiração da conta para 20 de agosto de 2050.

    chage -W 7 -E 2050-08-20 mary, chage --warndays 7 --expiredate 2050-08-20 mary

    Imprima as informações de validade da senha atual do usuário.

    chage -l mary, chage --list mary

  4. Preencha a seguinte tabela com o utilitário de rede apropriado:

    Ação Comando(s)

    Mostrar os arquivos de rede do host 192.168.1.55 na porta 22 usando lsof.

    lsof -i@192.168.1.55:22

    Mostrar os processos que acessam a porta padrão do servidor web Apache em sua máquina com fuser.

    fuser -vn tcp 80, fuser --verbose --namespace tcp 80

    Listar todos os sockets udp ouvintes em sua máquina usando netstat.

    netstat -lu,netstat --listening --udp

    Escanear as portas 80 até 443 no host 192.168.1.55 usando nmap.

    nmap -p 80-443 192.168.1.55

  5. Execute as seguintes tarefas relativas ao tamanho do conjunto residente (RSS) e ulimit como um usuário regular:

    • Exiba os limites flexíveis do RSS máximo:

      ulimit -m, ulimit -Sm

    • Exiba os limites rígidos do RSS máximo:

      ulimit -Hm

    • Defina os limites flexíveis do RSS máximo para 5.000 kilobytes:

      ulimit -Sm 5000

    • Defina os limites rígidos do RSS máximo para 10.000 kilobytes:

      ulimit -Hm 10000

    • Finalmente, tente aumentar o limite rígido do RSS máximo para 15.000 kilobytes. Você conseguiu? Por quê?

      Não. Uma vez definido, os usuários comuns não podem aumentar os limites rígidos.

  6. Considere a seguinte linha de saída de comando last e responda às perguntas:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • carol estava conectada a partir de um host remoto? Por quê?

      Sim, o endereço IP do host remoto está na terceira coluna.

    • Quanto tempo durou a sessão de carol?

      Seis minutos (como mostrado na última coluna).

    • carol estava conectada através de um terminal de texto clássico? Por quê?

      Não, pts/0 na segunda coluna indica que a conexão foi feita por meio de um emulador de terminal gráfico (ou Pseudo Terminal Slave).

  7. Analise o seguinte trecho de /etc/sudoers e responda à questão abaixo.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    alex pode verificar o status do servidor web Apache em qualquer host? Por quê?

    Não, pois ele é membro de REGULAR_USERS e esse grupo de usuários está excluído de ADMINS, que são os únicos usuários (além de carol, dos membros do grupo sudo e de root) que podem executar systemctl status apache2 nos SERVERS.

Respostas aos Exercícios Exploratórios

  1. Além de SUID e SGID, existe uma terceira permissão especial: o sticky bit. No momento, ele é usado principalmente em diretórios como /tmp para evitar que usuários regulares excluam ou movam arquivos que não sejam seus. Realize as seguintes tarefas:

    • Defina o sticky bit em ~/temporal:

      chmod +t temporal, chmod 1755 temporal

    • Encontre diretórios com o sticky bit (e quaisquer outras permissões) definidas em seu diretório inicial:

      find ~ -perm -1000, find ~ -perm /1000

    • Remova o sticky bit de ~/temporal:

      chmod -t temporal, chmod 0755 temporal

  2. Quando a senha de um usuário é bloqueada via passwd -l username ou usermod -L username, como é possível saber disso olhando em /etc/shadow?

    Um ponto de exclamação aparecerá no segundo campo, logo após o nome de login do usuário afetado (p. ex.: mary:!$6$gOg9xJgv…​).

  3. Qual o equivalente do comando usermod para chage -E date username ou chage --expiredate date username?

    usermod -e date username, usermod --expiredate date username

  4. Forneça dois comandos nmap diferentes para escanear todas as 65535 no host local:

    nmap -p 1-65535 localhost e nmap -p- localhost

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

110.3 Proteção de dados com criptografia (110.3 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.