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?