Professor: Macêdo Firmino
Disciplina: Sistemas Operacionais de Rede
Como qualquer sistema operacional multitarefa e multiusuário, o administrador do sistema Linux tem a função de gerenciar usuários
e grupos. Devido a existência de uma variedade de distribuições Linux é importante estarmos preparados para administrá-los diretamente sem a utilização de ferramentas gráficas
que facilitem isso (ex.: users-admin), usando
apenas os comandos básicos do sistema operacional. Deste modo, o administrador estará
apto a proporcionar a administração em qualquer distribuição Linux.
Como foi mostrado na última aula, a segurança de acesso a arquivos e diretórios no Linux
é provida através de um esquema de posse de
arquivo e de permissão de acesso a estes. Com
relação a posse de arquivo (e diretório) o Linux
dividide os usuários em: dono, grupo e outros.
Assim, para que seja possı́vel restringir ou permitir o acesso e o uso de determinados recursos
a uma ou mais pessoas, é necessário que cada
uma tenha um usuário e pertença a um ou mais
grupos devidamente criado no sistema operacional. Na aula de hoje iremos estudar o usuário root e comandos que permitem administrar
usuários e grupos.
Ainda na aula de hoje será apresentado
como os sistemas GNU/Linux (mais precisamente o kernel) administram os processos em
execução, bem como todas as instruções e comandos para um bom gerenciamento destes.
I. O Usuário Root
No Linux é criado automaticamente um usuário
especial, chamado root, usado para administrar
o sistema. Esta separação entre privilégios administrativos e usuários normais faz com que o
sistema operacional se torne mais resistente a
vı́rus e outros malware.
O usuário root tem permissão sobre todos os
arquivos e processos ligados ao funcionamento
do sistema. Este usuário também pode atuar
sobre qualquer arquivo ou processo de outros
usuários. Porém, o que pertence ao root não
pode ser acessado por outros usuários.
O usuário root também é usado para fazer
as seguintes alterações administrativas:
ˆ Criar arquivos de dispositivos;
ˆ Configurar o relógio do sistema;
ˆ Aumentar os limites de uso de recursos e
as propriedades de processos;
ˆ Definir o nome de host do sistema;
ˆ Configurar as interfaces de rede;
ˆ Administrar contas de usuário e grupo.
Por este usuário ser muito poderoso, o
mesmo se torna muito perigoso em mãos erradas. Além disso, a conta root não tem registro
de quem a usou. Por isso, ele só deve ser usado
em situações que não podem ser trabalhadas
por usuários que não possuem privilégios de super usuário (administrador).
Suponha, por exemplo, que você está trabalhando com o usuário root e você saiu da frente
do computador sem bloqueá-lo. Alguém malintencionado percebe isso e vai até seu computador, apaga diretórios importantes ao sistema.
Se você estivesse utilizando um usuário comum,
isto é, um usuário sem permissões para mexer
nesses diretórios, aquele sujeito não teria conseguido apagá-los.
Desta forma não utilize a conta root, exceto quando absolutamente necessário, mesmo
por administradores de sistema com experiência. Ao invés de sistematicamente se logar no
sistema como root, os administradores devem
fazer login com suas contas de usuário comum
e depois usar os comandos, como o su, kdesu,
gdksu e sudo, que lhes proporcionarão os privilégios de root apenas quando necessário e sem
a necessidade de um novo login.
ˆ su: este comando é usado para trocar de
usuários. Se o mesmo for digitado sem parametros ele irá alterar para o usuário root
e solicitar senha de root, e o usuário terá
os privilégios de root até encerrrar com
exit. Porém com a utilização deste comando é possı́vel, através de arquivos de
logs, determinar quem entrou como root.
Quem ainda não tem a senha de root digite o comando passwd root no terminal
e informe uma nova senha para o root.
ˆ sudo: permite ao usuário executar tarefas de administrador (por exemplo, configuraração de rede). Este comando consulta o arquivo /etc/sudoers. Este arquivo lista as pessoas autorizadas a usar
este comando, define a solicitação da senha do usuário e quais os comandos que
elas podem usar com o privilégio de root.
II. Demais Usuários
O Linux gerencia os usuários e os grupos
através de números conhecidos como UID (User
ID ) e GID (Group ID ), respectivamente. Os
nomes dos usuários e dos grupos servem apenas
para facilitar o uso humano do computador.
Como dito anteriormente, cada usuário precisa pertencer a um ou mais grupos. Assim
sendo, cada arquivo ou processo está associado
a um UID e a um GID. Os números UID e GID
variam de 0 a 65.536. No caso do usuário root,
esses valores são sempre 0 (zero).
Os usuários são mantidos no sistema através
do arquivo “/etc/passwd”. Por exemplo, neste
arquivo é possı́vel ver:
login
UID
O diretório HOME
do usuário
GID
macedo:x:1000:1000:Macedo Firmino,,,:/home/macedo:/bin/bash
Informa que a
senha está
armazenada no
arquivo
/etc/shadow
Informações do
usuário (como
nome e telefone)
Shell do
usuário
Figura 1: Exemplo do arquivo “/etc/passwd”
As senhas são armazenadas de forma encriptada (hash) em um arquivo separado, o
“/etc/shadow”. O arquivo possui uma entrada
contendo o usuário e a sua senha.
macedo:$6$h6WpfwPptFdhYXqzrToE2R6laar$D1W1xzb7
Figura 2: Exemplo do arquivo “/etc/shadow”
No Linux as senhas são encriptadas usando
um algoritmo chamado one-time pad (mão
única). Este permite apenas encriptar as senhas, mas não recuperá-las. Durante o login, o
sistema aplica o mesmo algoritmo à senha digitada pelo usuário e compara a string resultante
com a armazenada no arquivo. Se o resultado
for o mesmo, o sistema sabe que a senha está
correta e o acesso é autorizado.
No arquivo “/etc/groups” estão todas as definições de grupos de autenticação. Todos os
grupos padrões do sistema, mais os grupos especı́ficos das aplicações e ainda os grupos criados
pelo administrador.
Os comandos definidos para manipular
usuários e grupos são:
ˆ passwd: é utilizado para especificar uma
nova senha ou alterar a senha atual de
conta de usuário. No Linux as senhas não
são recuperavéis. Se o usuário esqueceu
a senha, ele deverá utilizar este comando
como root para definir uma nova senha.
Por exemplo, utilize passwd macedo para
alterar a senha do usuário macedo.
ˆ adduser: é utilizado para criar contas de
usuários e é somente utilizado pelo administrador do sistema. Por exemplo,
quando digitamos o comando sudo adduser ele irá criar um novo usuário. Para
isso, ele irá fazer algumas perguntas. Inicialmente, será solicitado um nome para o
usuário (não é possı́vel utilizar caracteres
iniciais em letras maiúsculas). Será então criado um novo grupo que contém o
mesmo nome do usuário (novo usuário é
adicionado a este grupo) e criado um diretório home. Na seqüência é solicitado
uma senha e informações opcionais sobre
o novo usuário (nome completo, número
da sala, Telefone, etc).
ˆ deluser: este comando remove a conta
de usuário. Por padrão, os arquivos deste
usuário não são apagados. Para remover o usuário apagando também o diretório home, adicione o parâmetro –removehome. Por exemplo, deluser macedo deleta o usuário macedo sem apagar os seus
arquivos.
ˆ groupadd: é usado para criar um novo
grupo no sistema. Por exemplo, groupadd info cria um grupo chamado informática.
ˆ groupdel: é usado para remover um
grupo do sistema. No entanto, antes de
remove-lo o usário deve remover os seus
usuários.
III. Gerenciamento de Processos
O processo é qualquer atividade executada
pelo sistema que envolve uma rotina de instruções com seus respectivos dados e informações.
Um processo é um programa em execução, que
consome processamento e outros recursos do sistema.
Um processo possui as seguintes caracterı́sticas:
ˆ Memória que o kernel marcou para serem
usadas pelo processo;
ˆ Estado atual do processo (espera, parado,
em execução e se destruindo);
ˆ Prioridade de execução do processo;
ˆ Identificador (PID): é nada mais que uma
identificação numérica de um determinado processo existente, que por sua vez,
quando criado, passa a ser identificado e
manipulado por este número.
O estudo de gerenciamento de processo é
importante, pois em muitos casos, um determinado programa pode deixar de responder, ou
pode ser que um determinado aplicativo entre
num loop e passe a consumir cada vez mais
memória e/ou processamento até que o usuário consiga fechá-lo manualmente.
Os principais comandos para o gerenciamento de processos são:
ˆ ps: exibe os processos os quais estão
sendo rodados no sistema. Utilize o comando ps -aux para obter uma visão geral dos processos em execução. Como
resultado este comando mostra: usuário
proprietário do processo, identificador do
processo (PID), porcentagem do uso da
CPU e Memória, VSZ (tamanho virtual
do processo), RSS (número de páginas
na memória), TTY (identificador de terminal), STAT (corresponde ao estado do
processo, por exemplo, R = executável, S
= dormindo), horá em que o processo foi
iniciado, o tempo de CPU que o processo
consumiu e o nome do comando.
ˆ top: o comando ps fornece informações
apenas um instântaneo de seu sistema. O
comando top fornece um sumário atualizado regularmente:
– A tela é atualizada a cada 10 segundos;
– Processos mais ativos aparecem no
alto;
– A utilização geral da CPU e ocupação da memória.
Para finalizar este comando digite a letra
“q”.
ˆ kill: elimina um processo existente no
sistema (através do seu PID). Ele pode ser
usado por usuários em seus próprios processos ou pelo root em qualquer processo.
Este comando com o parâmetro 9 garante
que o processo será eliminado. Por exemplo, o comando kill -9 1012 elimina o
processo com PID igual a 1012.
Existe um programa que pode ser utilizado para terminar um programa através da
sua interface gráfica. Este programa é chamado xkill. Para executa-lo digite “Alt+F2”
irá abrir um janela de execução de aplicativos.
Digite xkill e clique em executar. O seu mouse
irá aparecer sinalizado por um x. Desta forma
cliqe sobre o programa que você deseja finalizar.
IV. Desligamento do Sistema
Para que possamos encerrar todos os processos em execução, desligar e/ou reiniciar o sistema, poderemos utilizar os comandos:
ˆ halt: desliga o sistema.
ˆ shutdown: desliga o sistema após finalizadas as tarefas em execução. Por exemplo,
shutdown -h 30 desliga o sistema após
30 minutos de sua execução. Outro exemplo, shutdown -c cancela a programação
de desligamento que foi agendada. Para
desligar o sistema imediatamente utilize
shutdown -h now;
ˆ reboot: comando para reiniciar o sistema. A reinicialização também pode ser
obtida através do comando shutdown -r
now, colocando o parâmetro “r” de reboot.
Questões
1. Como é determinado o grupo de um usuário? Como poderı́amos modificar a sua
senha?
2. Qual o objetivo de definir um usuário root
no Linux?
3. Qual comando permite ao usuário executar tarefas de root no Linux?
4. Aonde são armazenadas as senhas dos
usuários no Linux? E caso um usuário
não lembre mais da sua senha tem como
o usuário root recupera-la?
5. Suponha que um usuário em seu sistema
tenha iniciado um processo de longa duração que está consumindo uma fração significativa dos recursos da máquina.
(a) Como você reconheceria um processo
que está exaurindo recursos?
(b) Suponha que o processo tenha que
ser extinto, que comando você usaria?
Download

Aula prática